Amazon ECS タスクのコンテナヘルスチェックの失敗をトラブルシューティングするにはどうすればよいですか?

最終更新日: 2022 年 3 月 11 日

Amazon Elastic Container Service (Amazon ECS) タスクが、コンテナヘルスチェックに失敗します。これを解決するにはどうすればいいですか?

簡単な説明

次のエラーが表示された場合、タスクの Amazon ECS コンテナは、サービスが合格できないヘルスチェックを使用しています。

(service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks

注: Elastic Load Balancing (ELB) ヘルスチェックの問題が発生している場合は、「How can I get my Amazon ECS tasks running to pass the Application Load Balancer health check in Amazon ECS?」(Amazon ECS で Application Load Balancer のヘルスチェックに合格するために、Amazon ECS タスクを実行するにはどうすればよいですか?) を参照してください。

解決方法

Amazon ECS のコンテナヘルスチェックの失敗をトラブルシューティングするには、以下のヒントを試してください。

  • Amazon ECS にプロビジョニングする前に、コンテナをローカルでテストして、コンテナヘルスチェックに合格することを確認します。
  • コンテナに渡すコマンドが正しく、Amazon ECS タスクに正しい構文を使用していることを確認します。
  • インスタンス化するのに十分な時間がコンテナにあることを確認します。
  • Amazon ECS タスクがしばらく実行されている場合は、アプリケーションログと Amazon CloudWatch ログを確認してください。

コンテナをローカルでテストして、コンテナヘルスチェックに合格することを確認する

Amazon ECS にコンテナをプロビジョニングする前に、コンテナが想定どおりに動作し、指定されたコンテナヘルスチェックに合格できることを確認します。Docker ウェブサイトの Dockerfile HEALTHCHECK 設定でコンテナをテストできます。コンテナが Dockerfile で定義されたヘルスチェックに合格すると、タスク定義でヘルスチェック設定を指定できます。ヘルスチェック設定を指定すると、Amazon ECS コンテナエージェントは指定されたヘルスチェックをモニタリングしたり、レポートしたりできるようになります。

: Amazon ECS は、コンテナイメージに埋め込まれており、かつ、コンテナ定義で指定されていない Docker ヘルスチェックをモニタリングしません。コンテナ定義で指定されたヘルスチェックパラメータは、コンテナイメージ内に存在する Docker ヘルスチェックよりも優先されます。

Amazon ECS タスクに正しい構文を使用していることを確認する

Amazon ECS タスクに正しいコマンドと構文を使用していることを確認します。

例えば、AWS マネジメントコンソールの JSON パネル、AWS Command Line Interface (AWS CLI)、または API を使用する場合は、次のようにコマンドのリストを角かっこで囲みます。

["CMD-SHELL", "curl -f http://localhost/ || exit 1"]

AWS マネジメントコンソールを使用して ECS タスクを編集する場合、角かっこを含める必要はありません。

"CMD-SHELL", "curl -f http://localhost/ || exit 1"

また、["CMD-SHELL", "healthcheck.sh", "||", "exit 1"] のように、ヘルスチェックコマンドを二重引用符で区切っていないことを確認してください。代わりに、次のコマンド構文を使用します。

["CMD-SHELL", "healthcheck.sh || exit 1"]

インスタンス化するのに十分な時間がコンテナにあることを確認する

コンテナの開始に時間がかかると、コンテナヘルスチェックに失敗する可能性があります。高度なコンテナ定義パラメータstartPeriod を設定してみてください。これにより、Amazon ECS コンテナは、失敗したヘルスチェックが最大再試行回数に算入されるのに先立って、ブートストラップするのに十分な時間を持つことができます。

タスクがしばらく実行されている場合に、アプリケーションログと Amazon CloudWatch Logs を確認する

Amazon ECS コンテナがしばらく実行されていて、コンテナヘルスチェックに失敗する場合は、アプリケーションログを確認します。Amazon ECS タスクで awslogs ログドライバーを使用している場合は、Amazon CloudWatch でアプリケーションログを確認します。

注: AWS Fargate はマネージドサービスです。そのため、基盤となるインフラストラクチャにはアクセスできません。トラブルシューティングするには、Amazon ECS タスクを Amazon Elastic Compute Cloud (Amazon EC2) で起動します。その後、SSH を使用して Amazon EC2 インスタンスに接続します。また、Amazon ECS Exec を使用して ECS コンテナを直接操作することもできます。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?