サービスの Auto Scaling - Amazon Elastic Container Service

サービスの Auto Scaling

Auto Scaling は、Amazon ECS サービスの必要タスク数を自動的に増減させる機能です。Amazon ECS は Application Auto Scaling サービスを活用してこの機能を提供します。詳細については、Application Auto Scaling ユーザーガイドを参照してください。

Amazon ECS はご使用のサービスの CPU とメモリの平均使用量を含む CloudWatch メトリクスを発行します。詳細については、「サービス使用率」を参照してください。これらおよびその他の CloudWatch メトリクスを使用して、ピーク時に高需要に対処するためにサービスをスケールアウトし (実行するタスクを増やし)、使用率の低い期間にコストを削減するためにサービスをスケールインする (実行するタスクを減らす) ことができます。

Amazon ECS サービスの Auto Scaling は、以下のタイプの自動スケーリングをサポートします。

  • ターゲット追跡スケーリングポリシー—特定のメトリクスのターゲット値に基づいて、サービスが実行するタスクの数を増減させます。これはサーモスタットが家の温度を維持する方法に似ています。温度を選択すれば、後はサーモスタットがすべてを実行します。

  • ステップスケーリングポリシー—アラーム超過のサイズに応じて変動する一連のスケーリング調整値 (ステップ調整値) に基づいて、サービスが実行するタスク数を増減させます。

  • スケジュールに基づくスケーリング—日付と時刻に基づいてサービスが実行するタスクの数を増減させます。

サービスの自動スケーリングとデプロイ

スケールインプロセスがスケールアウトプロセスと同じように動作しないようにするためのベストプラクティスとして、デプロイ中の動的なスケーリングを停止します。これにより、実行中のタスク数に依存するスケールインプロセスとスケールアウトプロセスがアラームでトリガーされなくなります。この問題を回避するには、次のステップに従います。

  1. Application Auto Scaling のスケーラブルなターゲットに関連付けられた ECS サービスのリソース ID (例: service/default/sample-webapp) を指定して describe-scalable-targets コマンドを呼び出します。出力を記録します。これは、次のコマンドを呼び出すときに必要になります。

  2. リソース ID、名前空間、およびスケーラブルなディメンションを指定して register-scalable-target コマンドを呼び出します。DynamicScalingInSuspendedDynamicScalingOutSuspended の両方に true を指定します。

  3. デプロイが完了したら、register-scalable-target コマンドを呼び出してスケーリングを再開できます。

詳細については、「Application Auto Scaling のスケーリングの中断と再開」を参照してください。

サービスの Auto Scaling に必要な IAM アクセス許可

サービスの Auto Scaling は Amazon ECS、CloudWatch、および Application Auto Scaling API と組み合わせることで機能します。サービスは Amazon ECS を使用して作成および更新され、アラームは CloudWatch を使用して作成されます。また、スケーリングポリシーは Application Auto Scaling で作成されます。

サービスを作成および更新する標準の IAM アクセス許可に加えて、サービスの Auto Scaling 設定にアクセスする IAM ユーザーには、動的スケーリングをサポートするサービスに対する適切なアクセス許可が必要です。IAM ユーザーには、以下のポリシー例に示されているアクションを使用するアクセス許可が必要です。

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

サービス作成の例」および「サービスの更新の例」の IAM ポリシー例に、IAM ユーザーが AWS Management Console で サービスの Auto Scaling を使用するためのアクセス権限が示されています。

Application Auto Scaling サービスには、Amazon ECS サービスおよび CloudWatch アラームを記述するアクセス許可が必要です。また、ユーザーの代わりにサービスの必要タスク数を変更するアクセス許可も必要です。Amazon ECS サービスの自動スケーリングを有効にすると、サービスにリンクされたロールが AWSServiceRoleForApplicationAutoScaling_ECSService という名前で作成されます。このサービスにリンクされたロールでは、ポリシーのアラームを記述し、サービスの現在実行中のタスクの数をモニタリングし、サービスの必要なタスクの数を変更するアクセス許可を Application Auto Scaling に付与します。Application Auto Scaling の元のマネージド型の Amazon ECS ロールは ecsAutoscaleRole ですが、このロールは不要になりました。サービスにリンクされたロールは Application Auto Scaling のデフォルトロールです。詳細については、Application Auto Scaling ユーザーガイドApplication Auto Scaling のサービスにリンクされたロールを参照してください。

CloudWatch メトリクスが Amazon ECS で使用可能になる前に Amazon ECS コンテナインスタンスを作成した場合は、ecs:StartTelemetrySession アクセス許可の追加が必要になることがあります。詳細については、「CloudWatch メトリクスを有効にする」を参照してください。