Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Amazon ECS での自動スケーリングの問題をトラブルシューティングする方法を教えてください。
Amazon Elastic Container Service (Amazon ECS) に自動スケーリングを設定しましたが、必要なタスク数をスケールインまたはスケールアウトしていません。
簡単な説明
必要なタスク数を自動的に更新するには、Amazon ECS で AWS Application Auto Scaling と Amazon CloudWatch アラームを設定します。
Application Auto Scaling では、次の理由により想定どおりにタスクの追加、削除が行われない場合があります。
- スケーリングポリシーが正しく設定されていない。
- スケーリングポリシーを呼び出す CloudWatch アラームを削除または編集した。
- 自動スケーリングが一時停止されている。
- スケジュールされたアクションで cron 式の指定が誤っている。
- AWS CloudFormation または AWS Cloud Development Kit (AWS CDK) を使用して目的のタスク数を手動で更新したが、入力した値が誤っている。
- 必要なタスク数が正しく設定されていない。
- Amazon ECS クラスターには、新しいタスクを実行するための十分なリソースまたはキャパシティが不足している。
- ネットワークの問題が発生している。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
CloudWatch アラームとスケーリングポリシーのトラブルシューティング
CloudWatch アラームとスケーリングポリシーをトラブルシューティングするには、使用するスケーリングポリシーに応じて次のタスクを実行します。
スケーラブルターゲット
サービスが Application Auto Scaling でスケーラブルターゲットとして登録されているかどうかを確認するには、describe-scalable-targets コマンドを実行します。
aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region
注: example-region は、お使いの AWS リージョンに置き換えます。
サービスが登録されていない場合は、register-scalable-target コマンドを実行してサービスを登録します。
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
注: お使いのものでそれぞれ、your-cluster を Amazon ECS クラスター名に、your-service-name をサービス名に、example-region をリージョンに置き換えます。
上記のコマンド出力で、DynamicScalingInSuspended、DynamicScalingOutSuspended、ScheduledScalingSuspended の値を確認します。DynamicScalingInSuspended または DynamicScalingOutSuspended が true に設定されている場合、スケーリングポリシーを開始しても Application Auto Scaling はキャパシティを更新しません。ScheduledScalingSuspended が true に設定されている場合、中断期間中は Application Auto Scaling は実行をスケジュールしたスケーリングアクションを開始しません。中断された自動スケーリングを再開する方法の詳細については、「Application Auto Scaling のスケーリングの一時停止と再開」を参照してください。
サービスの登録後、スケーリングポリシーと CloudWatch アラームを設定します。
ステップスケーリング
CloudWatch がスケーリングポリシーに関連するアラームを起動しているかどうかを確認します。エラーは CloudWatch アラームの履歴で確認できます。違反デルタに対するステップ調整が行われていない場合は、次のエラーが表示されます。 AutoScaling アクションを実行できませんでした: メトリクス値 [xx, xx] および違反デルタ xx に対するステップ調整は行われていません。この問題を解決するには、CloudWatch アラームでしきい値、ステップ調整、スケーリング調整の種類を設定する必要があります。さらに、ポリシーですべてのステップ調整を指定する必要があります。スケールインには -infinity から 0 を入力し、スケールアウトには 0 から +infinity を入力します。
注: Amazon ECS キャパシティプロバイダーを使用する場合は、タスクを実行するのに十分なコンテナインスタンスがあることを確認してください。
ターゲット追跡スケーリング
ターゲット追跡スケーリングポリシーはスケーリングの動作に影響する可能性があるため、関連する CloudWatch アラームを編集、削除することは避けてください。かかるアラームを変更または削除した場合は、ターゲット追跡ポリシーを再作成する必要があります。
複数のスケーリングポリシーを設定すると、ポリシーが競合し、スケールインとスケールアウトのアクティビティが連続して発生する場合があります。Amazon ECS サービスに複数のターゲット追跡スケーリングポリシーを設定する場合は、各ポリシーで別々のメトリクスを使用する必要があります。
誤った cron 式のトラブルシューティング
Application Auto Scaling では、スケジュールしたアクション設定の cron 式は次の形式である必要があります: [Minutes] [Hours] [Day_of_Month] [Month] [Day_of_Week] [Year]6 つのフィールドは空白で区切る必要があります。
cron 式を使用するアクションの例については、「定期的なスケジュールで実行されるスケジュールされたアクションを作成する」を参照してください。
必要なタスク数の更新に関するトラブルシューティング
Amazon ECS サービスで必要なタスク数を更新すると、スケールイベントが呼び出されることがあります。スケールアウトでは、Application Auto Scaling は必要な数を最小キャパシティまで増やします。スケールインでは、Application Auto Scaling は必要な数を最大キャパシティまで増やします。どちらの場合も、Application Auto Scaling はスケーリングポリシーに基づいてスケーリングを続けますが、必要な数が変更されることはありません。
CloudFormation または AWS CDK を使用して Amazon ECS サービスを作成した場合、デフォルトの DesiredCount 値は 1 です。Amazon ECS サービスを CloudFormation または AWS CDK で更新する場合は、アプリケーションは新しいデプロイに既存の DesiredCount を使用します。
CloudFormation スタックまたは AWS CDK の必要なカウント値では、サービスの更新時における最小値と最大値の間の値を指定します。
注: 必要数が、サービスのデプロイ設定のニーズ (特に最小パーセントと最大パーセントの設定) を満たしていることを確認してください。
クラスターのキャパシティに関する問題のトラブルシューティング
キャパシティの問題を回避するには、Amazon ECS キャパシティプロバイダーを使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを自動的にプロビジョニングします。
過度のスケーリングを防ぐために、自動スケーリングは必要数ではなく、サービスで実際に実行中のタスク数を起点として使用します。追加のタスクを配置するのに十分なコンテナインスタンスリソースがない場合、自動スケーリングはスケーリングを完了できません。この問題を解決するには、キャパシティプロバイダーを使用してコンテナインスタンスのキャパシティを自動的にスケーリングします。この方法をとらない場合は、コンテナインスタンスのキャパシティを手動で増やす必要があります。
クールダウン期間が過ぎても、自動スケーリングにより引き続きアクティビティのスケーリングが行われます。AWS Fargate タスクでは、Fargate キャパシティプロバイダーを使用してコンピューティングキャパシティを管理します。
自動スケーリングは必要数ではなく、サービスで実際に実行中のタスク数を起点として使用します。追加のタスクを配置するのに十分なコンテナインスタンスのリソースがない場合、自動スケーリングはスケーリングアクティビティを完了できません。ただし、自動スケーリングは使用可能なリソースに基づいて可能な限りスケーリングを試みることで、実現不可能な過剰なスケーリング試行を防ぎます。
ネットワークに関連するスケーリングの問題のトラブルシューティング
awsvpc ネットワークモードでのタスクの設定を確認する
自動スケーリングによってタスクの数が増えると、awsvpc ネットワークモードの各タスクには独自の IP アドレスが必要になります。仮想プライベートクラウド (VPC) のサブネットに使用可能な IP アドレスが不足している場合、タスクの数はスケールアップできません。VPC の IP アドレスの使用状況を定期的に監視してください。構成がキャパシティ制限に近い場合は、より大きな CIDR ブロックを使用するか、新しいサブネットを作成します。
awsvpc ネットワークモードの Amazon ECS タスクは、Elastic ネットワークインターフェイスを使用します。各 VPC の各インスタンスタイプには、ネットワークインターフェイスの合計数にクォータがあります。このクォータを超えると、タスクは起動しません。ネットワークインターフェースの使用状況を確認するには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインで [ネットワークインターフェイス] を選択します。
- [インスタンス ID] 列を使用して、各ネットワークインターフェイスがアタッチされているインスタンスを確認します。IP アドレスやセキュリティグループなど、ネットワークインターフェイスに関する詳細情報を確認するには、該当するネットワークインターフェイスを選択します。
設定で必要なトラフィックがブロックされていないことを確認する
セキュリティグループまたはネットワークアクセスコントロールリスト (ネットワーク ACL) ルールで必要なトラフィックがブロックされていると、ヘルスチェックに合格できない結果、不要なスケーリングイベントが発生する可能性があります。セキュリティグループがアプリケーションのポートへのインバウンドトラフィックを許可していることを確認してください。さらに、ネットワーク ACL がアプリケーションと Amazon ECS 間のインバウンドトラフィックとアウトバウンドトラフィックを許可していることも確認してください。
関連情報
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
- 質問済み 3ヶ月前