Amazon Elastic コンテナサービス (Amazon ECS) タスクがターゲットグループから登録解除されました。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon ECS タスクがターゲットグループから登録解除された後、タスクにエラーメッセージがないか確認します。または、次の AWS CLI コマンド describe-tasks を実行します。
aws ecs describe-tasks \
--cluster cluster-name \
--tasks task-ARN
注: 実際のものでそれぞれ、cluster-name をクラスター名に、task-ARN をタスクの ARN に置き換えます。停止したタスクの詳細は、タスクが停止してから 1 時間だけ表示されます。
コマンドの出力で exitCode、reason、stopCode、stoppedReason を確認してから、停止したタスクをトラブルシューティングします。
タスク内の必須コンテナが終了したかどうかを確認する
すべてのタスクには、少なくとも 1 つの必須コンテナが必要です。必須コンテナに障害が発生したり停止したりすると、Amazon ECS はタスク内のすべてのコンテナを停止します。詳細な調査を行うには、アプリケーションログを確認します。
タスクで awslogs ログドライバーを使用している場合は、次の get-log-events コマンドを実行して Amazon CloudWatch のアプリケーションログを確認します。
aws logs get-log-events \
--log-group-name awslogs-group \
--log-stream-name awslogs-stream-prefix/container-name/task-id
注: 実際のものでそれぞれ、awslogs-group をロググループ名に、awslogs-stream-prefix をログストリーム名に、container-name をコンテナ名に、task-id をタスク ID に置き換えます。
CloudWatch にログを送信するタスク定義の例については、「Amazon ECS タスク定義例: ログを CloudWatch にルーティングする」を参照してください。
OutofMemory に関する問題がないか確認する
コンテナのプロセスが、タスク定義で割り当てた量よりも多くのメモリを消費している場合、タスクコンテナは終了します。
この問題を解決するには、コンテナにさらに多くのメモリを割り当てます。本番環境以外で、ロードテストを行い、メモリパラメータを微調整することをおすすめします。さらに、メモリを徐々に増やしてからパフォーマンスを監視することをおすすめします。たとえば、256 MB を 512 MB に増やします。タスクメモリを更新する際、CPU 割り当ても確認してください。詳細については、「Amazon EC2 タスクサイズのベストプラクティス」を参照してください。
メモリを更新するには、コンテナまたはタスク定義でメモリが定義済みかどうかを確認します。タスク定義を更新してから、サービスが新しいタスク定義リビジョンを使用するように更新します。サービスを監視して、タスク定義が新しいメモリ設定で正常にデプロイされていることを確認します。
その他のトラブルシューティング手順については、「Amazon ECS でのメモリ不足エラーをトラブルシューティングする方法を教えてください」を参照してください。
ヘルスチェックの設定を確認する
AWS Fargate タスクでのヘルスチェックに関する問題のトラブルシューティング方法については、「Fargate で Amazon ECS タスクのヘルスチェックに問題があった場合のトラブルシューティング方法を教えてください」を参照してください。
登録解除エラーは、タスクが Elastic Load Balancing (ELB) ヘルスチェックに合格できず、次のいずれかのエラーが発生した場合に発生することがあります。
- 「(service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [5xx]/[4xx]/[3xx]) or (Request timed out)」 (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) において、(サービス AWS-service) (ポート 8080) が異常状態です。原因: (次のコードが発生したためヘルスチェックに合格できませんでした: [5xx]/[4xx]/[3xx]) または (Request timed out)
- "(サービス AWS-Service) (タスク eaa3ec9e9f104070b461490987654321) がコンテナのヘルスチェックをパスできませんでした。"
- 「(service AWS-Service) (instance 10.122.144.145) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) due to (reason Target is in an Availability Zone that is not enabled for the load balancer)」 (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) において、(サービス AWS-Service) (インスタンス 10.122.144.145) (ポート 8080) が異常状態です。原因: (ターゲットがロードバランサーで有効ではないアベイラビリティーゾーンにあります)
Amazon ECS コンソールに次のエラーが表示されることもあります。
「Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)」 (タスクが (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) でELB ヘルスチェックに合格できませんでした)
この問題を解決するには、ターゲットグループのヘルスチェックで設定したエンドポイントが正確であることを確認してください。
Amazon ECS タスクがヘルスチェックに応答するまでに時間がかかる場合は、healthCheckGracePeriodSeconds パラメータの値を増やすことをおすすめします。さらに、スロースタートモードを使用すると、ロードバランサーがヘルスチェックリクエストを送信する前にターゲットをウォームアップできます。
タスクとサービスの設定を確認する
サービスの CPU とメモリのメトリクスを確認します。リソースの使用率が高いと、アプリケーションが応答しなくなり、5xx エラーが発生する可能性があります。Fargate および Amazon EC2 起動タイプでの、これらのタスクに関する問題を解決する方法については、「Fargate での、Amazon ECS タスクのメモリ使用率増加を監視する方法を教えてください」を参照してください。
タスクの Elastic ネットワークインターフェイスまたはコンテナインスタンスのセキュリティグループが、ネットワークモードの必須ポートでロードバランサーからのトラフィックを許可していることを確認します。
- awsvpc ネットワークモードでは、タスク定義で containerPort として定義したポートを許可します。
- bridge ネットワークモードでは、エフェメラルポート (32768 ~ 60999) を許可します。
関連情報
Amazon ECS のタスク停止に関するエラーメッセージ
Amazon ECS で Application Load Balancer を使用する
Amazon Elastic コンテナサービスでのログ記録と監視