Amazon Elastic Container Service (Amazon ECS) サービス用に設定されたサービスのオートスケーリングが、必要に応じて目的のタスク数をスケールインまたはスケールアウトしません。
簡単な説明
ECS サービスを Application Auto Scaling サービスおよび Amazon CloudWatch アラームと統合することで、Amazon ECS サービスに必要なタスク数を自動的に更新できます。
サービスのオートスケーリングは、次の 1 つまたは複数の理由により、タスクを想定どおりに追加または削除できない場合があります。
- スケーリングポリシーが正しく設定されていない。
- スケーリングポリシーをトリガーする CloudWatch アラームが削除または編集されている。
- スケジュールされたアクションで cron 式の形式が正しく指定されていない。
- 必要なタスク数を手動で、または AWS CloudFormation または AWS クラウド開発キット (AWS CDK) を使用して、サービスのオートスケーリングで設定された最小値未満または最大値より大きい値に更新している。
- ECS クラスターに、新しいタスクを実行するのに十分なリソースまたは容量がない。
解決方法
CloudWatch アラームとスケーリングポリシーのトラブルシューティング
スケーラブルなターゲット
aws application-autoscaling register-scalable-target --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name --min-capacity 1 --max-capacity 10 --region example-region
- ECS サービスのサービスオートスケーリングに関する情報を取得するには、次のコマンドを使用します。
aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region
aws application-autoscaling describe-scaling-policies --service-namespace ecs --region example-region
aws application-autoscaling describe-scaling-activities --service-namespace ecs \
--scalable-dimension ecs:service:DesiredCount --resource-id service/your-cluster/your-service-name --region example-region
- ECS サービスのオートスケーリングの CloudWatch アラームを作成または更新するときは、メトリクス、ディメンション、統計、期間、条件、しきい値が正しく指定されていることを確認します。正しく指定されていないと、関連付けられたスケーリングポリシーを更新するアラームがトリガーされません。
注意: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
ステップスケーリング
- スケーリングポリシーに関連付けられた CloudWatch アラームがトリガーされているかどうかを確認します。CloudWatch アラーム履歴を表示して、エラーが発生していないか確認します。
- ステップスケーリングポリシーでは、CloudWatch アラームで違反しきい値、ステップ調整、スケーリング調整タイプが設定されているか確認します。違反デルタに一致するステップ調整がない場合、つまりメトリクス値からしきい値を差し引いた場合、アラーム履歴に次のエラーメッセージが表示されます: AutoScaling アクションの実行に失敗しました:メトリクス [xx, xx] および違反デルタ xx のステップ調整が見つかりません
したがって、すべてのステップ調整 (スケールインの場合は -infinity ~ 0、スケールアウトの場合は 0 ~ +infinity) がポリシーでカバーされていることを確認してください。
**注意:**通常、スケールアウトポリシーのステップ調整では上限のみが null (正の無限大) になります。スケールインポリシーでは、下限のみが null (負の無限大) になります。詳細については、ステップ調整を参照してください。
ターゲット追跡スケーリング
- ターゲット追跡スケーリングポリシーは AWS が管理するため、Application Auto Scaling は、ポリシーの作成時に指定されたターゲット値またはしきい値に基づいて、スケールインとスケールアウトの CloudWatch アラームを作成します。そのため、これらのアラームを編集または削除しないでください。これらのアラームを編集または削除すると、スケーリング動作に影響します。これらのアラームを変更または削除した場合は、ターゲットの追跡ポリシーを再作成してください。
- 各ポリシーで異なるメトリクスが使用されている限り、1 つの ECS サービスに複数のターゲット追跡スケーリングポリシーを設定できます。Application Auto Scaling の目的は、可用性を優先することです。したがって、これらのポリシーの動作は、ターゲットの追跡ポリシーがスケールアウトまたはスケールインの準備ができているかどうかによって異なります。Application Auto Scaling は、いずれかのターゲット追跡ポリシーがスケールアウトの準備ができている場合にタスクをスケールアウトし、(スケールイン部分が有効になっている) すべてのターゲット追跡ポリシーがスケールインの準備ができている場合にのみスケールインします。
- ターゲット追跡ポリシーやステップスケーリングポリシーなど、複数のスケーリングポリシーが ECS サービスに対して設定されている場合は、それらが競合しないようにしてください。そうした競合により、スケールインとスケールアウトが連続して行われるなど、望ましくない動作が発生し、タスクカウントが不必要に増大する可能性があります。
詳細については、「Application Auto Scaling のターゲット追跡スケーリングポリシー」を参照してください。
間違った cron 式のトラブルシューティング
スケジュールで指定された cron 式が、Application Auto Scaling のスケジュールされたアクションの設定で正しいことを確認します。Application Auto Scaling でサポートされている cron 形式は、[Minutes] [Hours] [Day_of_Month] [Month] [Day_of_Week] [Year] の 6 つのフィールドで構成されます。
詳細については、「Application Auto Scaling のスケジュールされたアクションの例」を参照してください。
希望するタスク数更新のトラブルシューティング
手動で更新するか、CloudFormation または AWS CDK を使用して ECS サービスの希望するタスク数を更新する場合は、次の点に注意してください。
- ECS サービスの希望するタスク数を最小キャパシティー値を下回る値に更新し、アラームによってスケールアウトアクティビティがトリガーされると、サービスのオートスケーリングは最小キャパシティー値まで希望するカウントをスケールアップします。その後、サービスのオートスケーリングは、アラームに関連付けられたスケーリングポリシーに基づいて、必要に応じてスケールアウトを続けます。ただし、スケールインアクティビティでは、希望する数がすでに最小キャパシティー値を下回っているため、希望する数は調整されません。
- ECS サービスの希望するタスク数を最大キャパシティ値を超える値に更新し、アラームによってスケールインアクティビティがトリガーされると、サービスのオートスケーリングは希望する数を最大キャパシティ値にスケールアウトします。その後、サービスのオートスケーリングは、アラームに関連付けられたスケーリングポリシーに基づいて、必要に応じてスケールインを続けます。ただし、スケールアウトアクティビティでは、希望する数がすでに最大キャパシティー値を超えているため、希望する数は調整されません。
- DesiredCount フィールドを指定せずに CloudFormation または CDK を使用して ECS サービスを作成した場合、希望するカウントはデフォルト値の 1 に設定されます。ただし、DesiredCount フィールドを指定せずに CloudFormation または CDK を使用して同じサービスを更新すると、現在のデプロイの既存の希望カウントが新しいデプロイに使用されます。そのため、CloudFormation スタックまたは AWS CDK で目的のカウント値が指定されている場合は、サービスの更新中に値が最小値と最大値の間にあることを確認してください。
クラスター容量に関する問題のトラブルシューティング
ECS クラスターに Amazon Elastic Compute Cloud (Amazon EC2) コンテナインスタンスなどのタスクを実行するのに十分なリソースがない場合、スケーリングポリシーによって開始されたスケーリングアクティビティは実行されないままになります。この場合、サービスイベントにエラーメッセージが記録されます。これらの Amazon EC2 キャパシティの問題を回避し、タスクを正常に起動するには、Amazon ECS キャパシティプロバイダーを活用して、必要に応じて EC2 インスタンスを自動的にプロビジョニングします。
**注意:**スケーリングアクティビティ中、サービスのオートスケーリングは、希望する数ではなく、サービス内で実際に実行中のタスク数を出発点として使用します。これにより、コンテナインスタンスリソースが足りず、追加のタスクを配置できないような過度のスケーリングを防ぐことができます。コンテナインスタンスの容量が後で使用可能になると、保留中のスケーリングアクティビティが成功する可能性があります。その後、クールダウン期間後もさらにスケーリングアクティビティが継続されます。
関連情報
サービスのオートスケーリング
application-autoscaling の AWS CLI コマンドリファレンス