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

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

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

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

インスタンスの分量指定を使用している場合は、必要に応じてスポットフリートがターゲット容量を超える場合があることに注意してください。インスタンスの重み付けを使用して、EC2 フリートまたはスポットフリートのコストとパフォーマンスを管理する取得済みの容量が浮動小数点数となってもターゲット容量は整数でなければならないため、スポットフリートはその数を次の整数に切り上げます。アラームがトリガーされたときにスケーリングポリシーの結果を確認する際は、このような動作を考慮に入れる必要があります。例えば、ターゲット容量が 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 のアクセス許可

スポットフリートの自動スケーリングは、Amazon EC2、Amazon CloudWatch、および Application Auto Scaling API の組み合わせによって可能になります。スポットフリートは Amazon EC2 で作成され、アラームは CloudWatch で作成され、スケーリングポリシーは Application Auto Scaling で作成されます。

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

{ "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 ポリシーを作成し、アプリケーションの Auto Scaling API を呼び出すためのよりきめ細かなアクセス許可を付与することもできます。詳細については、アプリケーションの Auto Scaling ユーザーガイドの「認証とアクセスコントロール」を参照してください。https://docs.aws.amazon.com/autoscaling/application/userguide/auth-and-access-control.html

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

スケジュールに基づくスケーリングを使用して、スポットフリートをスケーリングします。

スケジュールに基づくスケーリングにより、予想可能な需要の変化に応じてアプリケーションを拡張することができます。スケジュールに基づくスケーリングを使用するには、スポットフリートに指定された時間にスケーリングアクティビティを行うよう伝える、スケジュールされたアクションを作成します。スケジュールされたアクションを作成するとき、既存のスポットフリート、スケーリングアクティビティが起こる時刻、最小容量、最大容量を指定します。スケジュールされたアクションは1回だけ、または反復して行われるように作成できます。

既に存在する スポットフリート 用のスケジュールされたアクションのみを作成できます。スケジュールされたアクションは、スポットフリートの作成と同時に作成することはできません。

制限

スポットフリートリクエストには、タイプが maintain のリクエストが必要です。自動スケーリングはタイプ request のリクエストまたはスポットブロックではサポートされていません。

1 回のアクションを作成するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットフリートリクエストを選択し、画面の下部にある [スケジュールされたスケーリング] タブを選択します。

  4. [予定アクションの作成] を選択します。

  5. [名前] に、予定アクションの名前を指定します。

  6. [最小容量]、[最大容量]、または両方の値を入力します。

  7. [繰り返し] で、[1 回] を選択します。

  8. (オプション) [開始時刻]、[終了時刻]、またはその両方の日付と時刻を選択します。

  9. [Submit] を選択します。

定期的なスケジュールでスケールするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットフリートリクエストを選択し、画面の下部にある [スケジュールされたスケーリング] タブを選択します。

  4. [繰り返し] で、事前定義済みのスケジュール (例えば、[毎日]) のいずれかを選択するか、[カスタム] を選択して cron 式を入力します。スケジュールに基づくスケーリングがサポートする cron 式の詳細については、Amazon CloudWatch Events ユーザーガイドの「cron 式」を参照してください。https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions

  5. (オプション) [開始時刻]、[終了時刻]、またはその両方の日付と時刻を選択します。

  6. [Submit] を選択します。

スケジュールされたアクションを編集するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットフリートリクエストを選択し、画面の下部にある [スケジュールされたスケーリング] タブを選択します。

  4. スケジュールされたアクション を選択して、[Actions]、[Edit] の順に選択します。

  5. 必要な変更を加えて、[Submit] を選択します。

スケジュールされたアクションを削除するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットフリートリクエストを選択し、画面の下部にある [スケジュールされたスケーリング] タブを選択します。

  4. スケジュールされたアクションを選択して、[アクション]、[削除] の順に選択します。

  5. 確認を求めるメッセージが表示されたら、[削除] を選択します。

AWS CLI を使用してスケジュールされたスケーリングを管理するには

次のコマンドを使用します。