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

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

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

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

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