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

よくある質問: 特定のライフサイクルの状態に留まる Amazon ECS タスク

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) タスクが特定のライフサイクル状態のままとなる理由を知りたいです。

Q: Amazon ECS タスクが PROVISIONING 状態のままになっている理由を知りたいです。

ECS スケジューラーが Amazon Elastic Compute Cloud (Amazon EC2) の起動タイプで適切な ECS インスタンスを見つけられない場合、その起動タイプを使用するタスクが PROVISIONING 状態のままになることがあります。既存のコンテナインスタンスにタスクを実行するためのスペースがあっても、この問題が発生します。

PROVISIONING 状態のタスクはキューを生成します。Amazon ECS は、メモリ、ポート、Elastic Network Interface、GPU、CPU に関連するリソースの制約が原因でデプロイできないタスクをキューに追加します。追加のリソースが使用可能になると、これらのタスクは RUNNING 状態に移行します。

キャパシティプロバイダーのスケーリングを管理すれば、既存のインスタンスで十分なリソースを取得できなくても、タスクはすぐには失敗しません。代わりに、タスクは PROVISIONING 状態になります。スケーリングを管理しない場合は、キャパシティを見つけられないタスクはすぐに失敗します。

問題が発生して awsvpc モードのタスクがエラスティックネットワークインターフェイスをプロビジョニングできない場合、それらのタスクが PROVISIONING 状態のままになることがあります。問題が発生し、Elastic Network Interface をプロビジョニングできない場合に、AWS Fargate タスクも PROVISIONING 状態のままになる場合があります。

Q: Amazon ECS タスクがキャパシティプロバイダーを使用すると、PROVISIONING 状態から STOPPED 状態に移行する理由を知りたいです。

次の理由により、ECS が PROVISIONING 状態のままになることがあります。

  • 設定エラー
  • リソースの制約
  • キャパシティプロバイダーの仕様との不一致

これらの問題をトラブルシューティングするには、次のアクションを実行します。

  • キャパシティプロバイダーに関連付けられている Auto Scaling グループが最大インスタンス数に達しているかどうかを確認します。制限に達した場合、ECS は追加のタスクをプロビジョニングできません。

  • Auto Scaling グループに関連付けられている起動テンプレートで Amazon EC2 起動タイプを使用している場合は、ユーザーデータを確認します。次の形式での、正しいクラスター名があることを確認してください。

    #!/bin/bash
    echo "ECS_CLUSTER=MyCluster" >> /etc/ecs/ecs.config
  • 正しい信頼関係を持つ ecsInstanceRole ポリシーが、Auto Scaling グループに関連付けられているインスタンスにアタッチされていることを確認します。

  • Amazon ECS サービスのイベントを確認します。次のエラーが発生する場合、インスタンスは起動されていますが、アタッチされたロードバランサー用に設定されていません。
    ** ターゲットがロードバランサー用に有効になっていないアベイラビリティーゾーンにある**

  • タスクに指定されたサブネットと、キャパシティプロバイダーが管理するコンテナインスタンスが同じアベイラビリティーゾーンにあることを確認してください。aws-vpc ネットワークモードでキャパシティプロバイダー戦略を使用して起動するタスクの場合、これらが同じアベイラビリティーゾーンにある必要があります。

  • EC2 Linux インスタンスで awsvpc ネットワークモードを使用するタスクの場合、Elastic Network Interface にはパブリック IP アドレスが付与されません。インターネットにアクセスするには、プライベートサブネットで NAT ゲートウェイを使用するように設定されたタスクを起動する必要があります。パブリックサブネットで起動したタスクはインターネットにアクセスできず、PROVISIONING 状態のままとなる場合があります。

詳細については、「Amazon ECS サービスのイベントメッセージを確認する」を参照してください。

Q. Amazon ECS タスクが PENDING 状態のままになっている理由を知りたいです。

Amazon ECS がコンテナエージェントによるさらなるアクションを待っている間、タスクは PENDING 状態になります。リソースがタスクで使用可能になるまで、そのタスクはこの状態にとどまります。

詳細については、「Amazon ECS タスクが PENDING 状態のままになっている理由を知りたいです」を参照してください。

Q: Amazon ECS タスクが ACTIVATING 状態のままになっている理由を知りたいです。

コンテナ内のメインプロセスが RUNNING 状態に移行し、Amazon ECS が追加のステップを実行すると、タスクは ACTIVATING 状態になります。たとえば、サービス検出を使用するタスクには、サービス検出リソースを作成する必要があります。

複数の Elastic Load Balancing ターゲットグループを使用するサービスの一部であるタスクの場合、ターゲットグループの登録はこの状態で行われます。タスクが ACTIVATING 状態のとき、Amazon ECS はターゲットグループ登録またはサービス検出リソースで対応するアクションが完了するのを待ちます。

Q: サービス検出を使用するタスクが ACTIVATING 状態のままとなっている理由を知りたいです。

AWS CloudTrail イベント履歴で、対応するサービス検出サービスに関連する API コールを確認します。例を次に示します。

  • CreatePrivateDnsNamespace
  • CreateService
  • RegisterInstance
  • UpdateInstanceCustomHealthStatus

上記の API アクションは、AWS マネージドポリシー AmazonECSServiceRolePolicy で定義されています。API コールが SeviceNotFoundInternalFailure などのエラーコードにより失敗した場合は、サービス検出の考慮事項に従っていることを確認します。

Q: Elastic Load Balancing ターゲットグループを使用するタスクが ACTIVATING 状態のままになる理由を知りたいです。

Amazon ECS がコンテナの正常性を判断するのに長い時間がかかっている場合、タスクが ACTIVATING状態のままになることがあります。かかっている合計時間を計算するには、HealthCheckIntervalSecondsHealthyThresholdCount のパラメーターを乗算します。ヘルスチェックプロセスを高速化するには、チェックの数とチェックの間隔を減らします。CloudTrail イベントをチェックして、対応する Elastic Load Balancing RegisterTargets API コールに対し、エラーや障害が報告されていないかどうかを確認します。

Q: Amazon ECS タスクが STOPPED 状態となるはずなのに、RUNNING の状態のままである理由を知りたいです。

アプリケーションに問題があるか、タスクの設定が誤っていると、タスクが RUNNING 状態のままになることがあります。

これらの問題をトラブルシューティングするには、次のアクションを実行します。

  • アプリケーションログを確認し、エラーやコンテナが終了しない理由について調べます。必要なコンテナが終了すると、タスクは STOPPED 状態に移行します。
  • タスクが Amazon ECS サービスの一部である場合は、DeploymentConfiguration パラメータが正しく設定されていることを確認します。
  • タスクがロードバランサーを使用する Amazon ECS サービスの一部である場合は、deregistration delay パラメータが正しく設定されていることを確認します。
  • ECS_CONTAINER_STOP_TIMEOUT 値が正しく設定されているかどうかを確認します。
  • タスクで Amazon ECS exec を有効にします。次に、ECS exec を使用してコンテナにログインし、アプリケーションの問題をトラブルシューティングします。

詳細については、「コンテナインスタンスが DRAINING に設定されているときに、停止に時間がかかる Amazon ECS タスクをトラブルシューティングする方法を教えてください」を参照してください。

Q: Amazon ECS タスクが DEACTIVATING 状態のままになる理由を知りたいです。

DEACTIVATING 状態では、Amazon ECS はタスクが停止する前に追加のステップを実行します。たとえば、複数の Elastic Load Balancing ターゲットグループを使用するサービスの一部であるタスクの場合、ターゲットグループの登録解除はこの状態で行われます。

次の理由により、タスクが DEACTIVATING 状態のままになることがあります。

  • タスクがターゲットグループから登録解除される前に、Elastic Load Balancing ターゲットグループに関連するリソースを削除した。
  • Amazon ECS サービスの作成時にパラメータとして指定されたカスタムロールに、必要な Elastic Load Balancing アクセス許可が欠けている。
  • タスクがアクティブなときにカスタムロールを削除した。

サービス定義で指定したターゲットグループおよび、AWS Identity and Access Management (IAM) ロールが存在することを確認します。また、サービス定義に必要な信頼ポリシーと Elastic Load Balancing のアクセス許可が含まれていることを確認します。

タスクが DEACTIVATING 状態から移行するまでの時間を最適化するには、deregistration_delay.timeout_seconds パラメータおよび deregistration_delay.timeout_seconds パラメータを調整します。詳細については、「ロードバランサーの Connection Draining」を参照してください。

Q: Amazon ECS タスクが DEPROVISIONING 状態のままとなっている理由を知りたいです。

Amazon ECS は、タスクが停止した後、タスクが STOPPED 状態に移行する前に、追加のステップを実行します。たとえば、awsvpc ネットワークモードを使用するタスクの場合、Amazon ECS は Elastic Network Interface をデタッチして削除します。

次の理由により、タスクが DEPROVISIONING 状態のままになることがあります。

  • タスクが終了する前に、サービスに関連付けられているサービスリンクロールを削除した。サービスでは、サービスリンクロールがあらかじめ定義されており、ユーザーに代わって他の AWS サービスを呼び出すために必要なすべてのアクセス許可が含まれています。次のコマンドを実行して、サービスリンクロールがサービスに関連付けられているかどうかを確認します。

    $aws ecs describe-services --cluster CLUSTER-NAME --services SERVICE-NAME
  • タスクがターゲットグループから登録解除される前に、ターゲットグループを削除した。

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