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

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

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

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

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

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

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

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

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

アプリケーション Auto Scaling は、Amazon ECS デプロイの進行中にスケールインプロセスをオフにします。ただし、スケールアウトプロセスは、中断しない限り、デプロイ中に引き続き発生します。デプロイの進行中にスケールアウトプロセスを中断する場合は、次の手順を実行します。

  1. Application Auto Scaling のスケーラブルなターゲットに関連付けられたサービスのリソース 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 のアクセス権限

Service Auto Scalingは、Amazon ECS、Amazon CloudWatch、およびアプリケーション 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 ユーザーが Service Auto Scaling を使用するためのアクセス権限が示されています。AWS Management Console。

アプリケーション Auto Scaling サービスには、Amazon ECS サービスおよび CloudWatch アラームを記述するアクセス許可が必要です。また、ユーザーの代わりにサービスの必要タスク数を変更するアクセス許可も必要です。sns: 権限は、しきい値を超えたときに CloudWatch が Amazon SNS トピックに送信する通知を対象とするものです。Amazon ECS サービスのオートスケーリングを使用にする場合、サービスにリンクされたロールが AWSServiceRoleForApplicationAutoScaling_ECSService という名前で作成されます。このサービスにリンクされたロールでは、ポリシーのアラームを記述し、サービスの現在実行中のタスクの数をモニタリングし、サービスの必要なタスクの数を変更するアクセス許可をアプリケーションAuto Scaling に付与します。Application Auto Scaling の元のマネージド型の Amazon ECS ロールは ecsAutoscaleRole ですが、これは不要になりました。サービスにリンクされたロールは、アプリケーションの Auto Scaling のデフォルトロールです。詳細については、「Application Auto Scaling ユーザーガイド」の「Application Auto Scaling 用のサービスリンクロール」を参照してください。

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

考慮事項

スケーリングポリシーを使用する場合は、次の考慮事項に注意してください。

  • Amazon ECSは、CloudWatch に 1 分間隔でメトリクスを送信します。クラスターとサービスが CloudWatch にメトリクスを送信するまで、メトリクスは使用できません。また、存在しないメトリクスに対して CloudWatch アラームを作成することはできません。

  • スケーリングポリシーは、クールダウン期間をサポートします。これは、以前のスケーリングアクティビティが有効になるまで待機する秒数です。

    • スケールアウトイベントでは、スケールアウトが継続的に (ただし過剰になることなく) 行われます。スケーリングポリシーを使用して Service Auto Scaling が正常にスケールアウトすると、クールダウン時間の計算が開始されます。スケーリングポリシーは、より大きなスケールアウトがト開始されるか、クールダウン期間が終了しない限り、必要な容量を再度増加させません。このスケールアウトクールダウン期間が有効な間は、スケールアウトアクティビティを開始することで追加された容量は、次のスケールアウトアクティビティに予定される容量の一部として繰り入れられます。

    • スケールインイベントでは、アプリケーションの可用性を保護するために控えめにスケールインされます。そのため、スケールインアクティビティはクールダウン期間が終了するまでブロックされます。ただし、スケールインクールダウン期間中に別のアラームがスケールアウトアクティビティを開始した場合、Application Auto Scaling scale によってターゲットが即座にスケールアウトされます。この場合、スケールインクールダウン期間は停止し、完了しません。

  • サービススケジューラは常に必要数を優先しますが、サービスにアクティブなスケーリングポリシーとアラームがある限り、Service Auto Scaling はユーザーが手動で設定した必要数を変更できます。

  • サービスの必要タスク数が容量最小値より小さく設定された状態で、アラームがスケールアウトアクティビティをトリガーしたとき、Service Auto Scaling が必要タスク数を容量最小値までスケールアップします。その後もアラームに関連付けられたスケーリングポリシーに基づいて、必要に応じてスケーリングし続けます。ただし、必要数はすでにキャパシティーの最小値より小さいため、スケールインアクティビティでは調整されません。

  • サービスの必要タスク数が容量最大値より大きく設定された状態で、アラームがスケールインアクティビティをトリガーしたとき、Service Auto Scaling が必要タスク数を容量最大値までスケールアウトします。その後もアラームに関連付けられたスケーリングポリシーに基づいて、必要に応じてスケーリングし続けます。ただし、必要タスク数はすでに容量最大値より大きいため、スケールアウトアクティビティでは調整されません。

  • スケーリングアクティビティ中、サービスで実際に実行されているタスクの数は、必要数ではなく、Service Auto Scaling が開始点として使用する値です。これが想定される処理能力です。これにより、例えば、追加タスクを配置するために十分なコンテナインスタンスリソースがない場合に、満たすことができない過剰な (ランナウェイ) スケーリングを防ぐことができます。後でコンテナインスタンスのキャパシティーを使用できるようになった場合、保留中の規模の拡大や縮小が続行され、クールダウン期間後にさらに規模の拡大や縮小を続行できることができます。

  • 実行する作業がないときにタスク数をゼロにスケーリングするには、キャパシティーの最小値を 0 に設定します。ターゲット追跡スケーリングポリシーでは、実際の容量が 0 で、メトリクスがワークロードの需要があることを示している場合、Service Auto Scaling は 1 つのデータポイントの送信を待ってからスケールアウトします。この場合、開始点として可能な最小量だけスケールアウトしてから、実際の実行中のタスク数に基づいてスケーリングを再開します。

  • アプリケーション Auto Scaling は、Amazon ECS デプロイの進行中にスケールインプロセスをオフにします。ただし、スケールアウトプロセスは、中断しない限り、デプロイ中に引き続き発生します。詳細については、「サービスの自動スケーリングとデプロイ」を参照してください。

AWS CLI および SDK の操作

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

これらの特定の API オペレーションの詳細については、を参照してください。Amazon Elastic Container Serviceとすると、Amazon CloudWatch API リファレンスであり、Application Auto Scaling API リファレンス。これらのサービス用の AWS CLI コマンドの詳細については、 の「ecs」、「cloudwatch」、および「application-autoscalingAWS CLIを参照してください。

AWS CLI を使用して Amazon ECS サービスのスケーリングポリシーを設定するには

  1. register-scalable-target コマンドを使用して、スケーラブルなターゲットとして ECS サービスを登録します。

  2. put-scaling-policy コマンドを使用して、スケーリングポリシーを作成します。

  3. [ステップスケーリング] put-metric-alarm コマンドを使用してスケーリングポリシーをトリガーするアラームを作成します。

Application Auto Scaling のスケーリングポリシーの詳細については、Application Auto Scaling ユーザーガイドAWS CLIを参照してください。