サービスのオートスケーリング - Amazon Elastic Container Service

サービスのオートスケーリング

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

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

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

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

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

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

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

Application Auto Scaling は、Amazon ECS デプロイの進行中にスケールインプロセスを無効にします。ただし、スケールアウトプロセスは、中断しない限り、デプロイ中に引き続き発生します。デプロイの進行中にスケールアウトプロセスを一時停止するには、次の手順を実行します。

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

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

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

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

サービス Auto Scaling に必要な IAM のアクセス権限

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

サービスの作成および更新のためのデフォルトの IAM アクセス許可に加えて、Service 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 でService Auto Scaling を使用するためのアクセス権限が示されています。

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

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