スキップしてコンテンツを表示

Amazon ECS タスクがプロビジョニングのループに陥った場合のトラブルシューティング方法を教えてください。

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) タスクが PROVISIONING 状態に留まっています。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

この問題をトラブルシューティングするには、影響を受けるサービスに関する Amazon ECS サービスイベントを参照し、最近のデプロイアクティビティと障害を確認します。イベントパターンとエラーメッセージを参考に、問題がキャパシティ、ネットワーク、または構成の問題に関連しているかどうかを判断します。タスク起動エラーの詳細については、停止したタスクのエラーメッセージTaskFailedToStart エラーを確認します。

キャパシティプロバイダーの設定を確認する

キャパシティプロバイダーの Amazon EC2 Auto Scaling グループがタスクのプロビジョニング中に最大キャパシティに達したかどうかを確認するには、次の AWS CLI コマンド describe-auto-scaling-groups を実行します。

aws autoscaling describe-auto-scaling-groups \
    --auto-scaling-group-names your-asg-name \
    --query 'AutoScalingGroups[].{DesiredCapacity:DesiredCapacity,MaxSize:MaxSize,RunningInstances:Instances[?LifecycleState==InService].InstanceId|length}'

注: your-asg-name は、実際の EC2 Auto Scaling グループ名に置き換えます。

すべてのコンテナインスタンスとそのステータスを確認するには、次の list-container-instances コマンドを実行します。

aws ecs list-container-instances \
    --cluster your-cluster-name \
    --status ACTIVE \
    --query 'containerInstanceArns[]'

Auto Scaling グループのキャパシティを増やすには、次の update-auto-scaling-group コマンドを実行します。

aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name your-asg-name \
--max-size new-max-size

注: 実際のものでそれぞれ、your-asg-name を EC2 Auto Scaling グループ名に、new-max-size を更新後の EC2 Auto Scaling グループのサイズに置き換えます。

さらに、Amazon ECS エージェントがコンテナインスタンス上で動作しており、正常であることを確認してください。

キャパシティプロバイダーのエラーをさらにトラブルシューティングするには、「Amazon ECS クラスターに新しいキャパシティプロバイダーを設定したり、既存のキャパシティプロバイダーを更新したりする際の問題のトラブルシューティング方法を教えてください」を参照してください。

サービス設定とタスクスケーリングを確認する

サービスの目標数が、コンテナインスタンス上の CPU とメモリで使用可能なインフラストラクチャ容量に合ったものであることを確認します。サービスの目標数と実行中の数を確認するには、次の describe-services コマンドを実行します。

aws ecs describe-services \
--cluster your-cluster-name \
--services your-service-name \
--query 'services[].{desiredCount:desiredCount,runningCount:runningCount,pendingCount:pendingCount}'

注: お使いのものでそれぞれ、your-cluster-name をクラスター名に、your-service-name をサービス名に置き換えます。

サービスの目標数を更新するには、次の update-service コマンドを実行します。

aws ecs update-service \
--cluster your-cluster-name \
--service your-service-name \
--desired-count new-count
--force-new-deployment

注: 実際のものでそれぞれ、your-cluster-name をクラスター名に、your-service-name をサービス名に、new-count を目的のタスク数に置き換えます。--force-new-deployment オプションを使用すると、サービスを強制的に更新します。

サービスクォータを確認する

Amazon ECS サービスクォータを超えると、タスクの問題が発生する可能性があります。サービスクォータの問題をトラブルシューティングするには、「Amazon ECS サービスクォータの問題を解決する方法を教えてください」を参照してください。

ネットワーク設定を確認する

タスクでセキュリティグループのルールをチェックし、サブネットに使用可能な IP アドレスがあることを確認します。NAT ゲートウェイのないプライベートサブネットの場合は、設定に必要な VPC エンドポイントを設定します。VPC エンドポイントのセキュリティグループは、タスクサブネット CIDR からのインバウンドトラフィックを許可する必要があります。

セキュリティグループは次のトラフィックも許可する必要があります。

  • コンテナイメージをプルするための、インターネットまたは NAT ゲートウェイへのアウトバウンド HTTPS トラフィック (ポート 443)
  • 使用する VPC エンドポイントへのアウトバウンドトラフィック。
  • Application Load Balancer を使用する構成用の、Application Load Balancer のセキュリティグループからのインバウンドトラフィック
  • 通信が必要なコンテナ間のインバウンドトラフィック。

Amazon ECS サービスのサブネットに必要な IP アドレスがあるかどうかを確認するには、次の describe-subnets コマンドを実行します。

aws ec2 describe-subnets \
    --subnet-ids subnet-abcde \
    --query 'Subnets[].{SubnetId:SubnetId,AvailableIPs:AvailableIpAddressCount,TotalIPs:CidrBlock}'

注: subnet-abcde は、実際のサブネット ID に置き換えます。

タスクのネットワークモード要件に従う必要があります。

  • awsvpc モードでは、各タスクに専用の Elastic ネットワークインターフェイスが必要です。
    注: 各インスタンスタイプには、ネットワークインターフェイスの最大クォータがあります。コンテナインスタンスに、新しいタスクに使用できるネットワークインターフェイスのアタッチポイントがあることを確認します。
  • ブリッジモードでは、docker0 ブリッジのプールに十分な数の IP アドレスがあることを確認します。
  • ホストモードでは、特定のネットワークリソースの制約はありません。ただし、複数のタスクが同じホストポートを使用する場合、ポートの競合が発生する可能性があります。

関連情報

Amazon ECS のトラブルシューティング

Amazon ECS サービスクォータ

Amazon ECS サービスを自動的にスケーリングする

Amazon ECS 用のソリューションを設計する

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ