スポットフリート の自動スケーリング - Amazon Elastic Compute Cloud

スポットフリート の自動スケーリング

自動スケーリングは、需要に応じて スポットフリート のターゲット容量を自動的に増減する機能です。スポットフリート は、1 つ以上のスケーリングポリシーに応答して、選択する範囲内でインスタンスを起動 (スケールアウト) するか、インスタンスを削除 (スケールイン) できます。

スポットフリート は、以下のタイプの自動スケーリングをサポートします。

  • Target tracking scaling – 特定のメトリクスのターゲット値に基づいて、フリートの現在の容量を増減させます。これはサーモスタットで家の温度を管理する方法と似ています (温度を選択すれば、後はサーモスタットがすべてを実行する)。

  • Step scaling – アラーム超過のサイズに応じて変動する一連のスケーリング調整値 (ステップ調整値) に基づいて、グループの現在の容量を増減させます。

  • Scheduled scaling – 日付と時刻に基づいて、フリート現在の容量を増減させます。

インスタンスの重み付けを使用している場合は、必要に応じて スポットフリート がターゲット容量を超える場合があることに注意してください。具体的には、取得済み容量が浮動小数点数となってもターゲット容量は整数でなければならないために、スポットフリート はその数を次の整数に切り上げます。アラームがトリガーされたときにスケーリングポリシーの結果を確認する際は、このような動作を考慮に入れる必要があります。たとえば、ターゲット容量が 30、取得済み容量が 30.1 で、スケーリングポリシーが 1 を減算するとします。アラームがトリガーされると、自動スケーリングプロセスは 30.1 から 1 を減算して 29.1 を得るため、この数は 30 に切り上げられることになり、スケーリングアクションは実行されません。別の例として、選択したインスタンスの重みが 2、4、8 であり、ターゲット容量が 10 であるとします。重み 2 のインスタンスが利用できなかったために、スポットフリート は重み 4 と 8 のインスタンスをプロビジョニングして取得済みの容量が 12 になったとします。スケーリングポリシーがターゲット容量を 20% 減らしてアラームがトリガーされた場合、自動スケーリングプロセスは 12 から 12×0.2 を減算して 9.6 を得るため、この数は 10 に切り上げられることになり、スケーリングアクションは実行されません。

スポットフリート 用に作成したスケーリングポリシーはクールダウン期間をサポートしています。クールダウン期間は、以前のトリガー関連のスケーリングアクティビティが以後のスケーリングイベントに影響を及ぼすことができる期限であり、スケーリングアクティビティが終了した時点からの秒数として指定します。スケールアウトポリシーにクールダウン期間を設定すると、その期間中にクールダウンを開始したスケールアウトイベントによって追加された容量は、次のスケールアウトに予定される容量の一部として繰り入れられます。これにより、スケールアウトが継続的に (ただし過剰になることなく) 行われます。スケールインポリシーにクールダウン期間を設定すると、その期間が過ぎるまでは以後のスケールインリクエストがブロックされます。これにより、スケールインが抑制されてアプリケーションの可用性が確保されます。ただし、スケールイン後のクールダウン期間中に別のアラームによってスケールアウトポリシーがトリガーされると、自動スケーリングによってスケーラブルなターゲットが即座にスケールアウトされます。

使用率の変化に迅速に対応できるように、1 分間隔でインスタンスのメトリクスをスケーリングすることをお勧めします。5 分間隔でメトリクスをスケールすると、応答時間が低速になり、古いメトリクスデータに基づいてスケールすることになる可能性があります。1 分ごとにインスタンスのメトリクスデータを CloudWatch に送信するには、インスタンスで詳細モニタリングを有効にできます。詳細については、「インスタンスの詳細モニタリングを有効または無効にする」および「定義済みパラメータを使用して スポットフリート を作成する (コンソール)」を参照してください。

スポットフリート のスケーリングの設定の詳細については、次のリソースを参照してください。

スポットフリート の自動スケーリングに必要な IAM のアクセス許可

スポットフリート の Auto Scaling は Amazon EC2、Amazon CloudWatch、および Application Auto Scaling API と組み合わせることで機能します。スポットフリート リクエストは Amazon EC2 で作成され、アラームは CloudWatch で作成され、スケーリングポリシーは Application Auto Scaling で作成されます。

スポットフリート および Amazon EC2 への IAM アクセス許可に加えて、フリートのスケーリング設定にアクセスする IAM ユーザーには、動的スケーリングをサポートするサービスへの適切なアクセス許可も必要です。IAM ユーザーには、次のポリシー例に示されているアクションを使用するためのアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:*", "ec2:DescribeSpotFleetRequests", "ec2:ModifySpotFleetRequest", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "cloudwatch:DisableAlarmActions", "cloudwatch:EnableAlarmActions", "iam:CreateServiceLinkedRole", "sns:CreateTopic", "sns:Subscribe", "sns:Get*", "sns:List*" ], "Resource": "*" } ] }

独自の IAM ポリシーを作成し、Application Auto Scaling API を呼び出すためのよりきめ細かなアクセス許可を付与することもできます。詳細については、Application Auto Scaling ユーザーガイドの「認証とアクセスコントロール」を参照してください。

Application Auto Scaling サービスには、スポットフリート と CloudWatch のアラームを記述するためのアクセス許可と、ユーザーに代わって スポットフリート のターゲット容量を変更するためのアクセス許可も必要です。スポットフリート の自動スケーリングを有効にすると、サービスにリンクされたロールが AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest という名前で作成されます。このサービスにリンクされたロールは、Application Auto Scaling に対して、ポリシーのアラームの記述、フリートの現容量のモニタリング、およびフリートの容量の変更を行うためのアクセス許可を付与します。Application Auto Scaling の元のマネージド型の スポットフリート ロールは aws-ec2-spot-fleet-autoscale-role ですが、このロールは不要になりました。サービスにリンクされたロールは、Application Auto Scaling のデフォルトロールです。詳細については、Application Auto Scaling ユーザーガイドの「サービスにリンクされたロール」を参照してください。