Amazon Elastic Container Service (Amazon ECS) タスクがコンテナのヘルスチェックに失敗します。
簡単な説明
次のエラーが表示された場合、タスクの Amazon ECS コンテナでサービスが合格できないヘルスチェックが使用されています。
(service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks
解決策
Amazon ECS コンテナのヘルスチェックの失敗をトラブルシューティングするには、次の手順を実行してください。
- Amazon ECS へのプロビジョニングを行う前に、コンテナをローカルでテストして、コンテナのヘルスチェックに合格することを確認します。
- コンテナに渡すコマンドが正しく、Amazon ECS タスクに正しい構文を使用していることを確認します。
- コンテナが起動するのに十分な時間を確保します。
- Amazon ECS タスクが長時間実行され続ける場合は、アプリケーションログと Amazon CloudWatch ログを確認します。
コンテナをローカルでテストして、コンテナのヘルスチェックに合格することを確認する
Amazon ECS にコンテナをプロビジョニングする前に、コンテナが期待どおりに動作し、指定されているコンテナのヘルスチェックに合格できることを確認します。Docker ウェブサイトの Dockerfile HEALTHCHECK 設定を使用してコンテナをテストし、コンテナが Dockerfile で定義されているヘルスチェックに合格することを確認します。その後、Amazon ECS コンテナエージェントがヘルスチェックをモニタリングして報告できるように、タスク定義でヘルスチェックの設定を指定します。
注: Docker ヘルスチェックがコンテナイメージに埋め込まれているがコンテナ定義で指定されていない場合、Amazon ECS ではモニタリングされません。コンテナ定義で指定されているヘルスチェックのパラメータは、コンテナイメージ内に存在する Docker ヘルスチェックを上書きします。
Amazon ECS タスクに正しい構文を使用していることを確認する
注: AWS コマンドラインインターフェイス (AWS CLI) の実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
Amazon ECS タスクに正しいコマンドと構文を使用していることを確認します。AWS マネジメントコンソールの JSON パネル、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 CloudWatch ログを確認する
Amazon ECS コンテナが長時間稼働していてコンテナのヘルスチェックに失敗した場合は、アプリケーションログを確認します。Amazon ECS タスクが awslogs ログドライバーを使用している場合は、CloudWatch でアプリケーションログを確認します。
注: AWS Fargate はマネージドサービスであるため、基盤となるインフラストラクチャにアクセスすることはできません。この問題をトラブルシューティングするには、Amazon Elastic Compute Cloud (Amazon EC2) で Amazon ECS タスクを起動します。その後、SSH を使用して Amazon EC2 インスタンスに接続します。Amazon ECS Exec を使用して ECS コンテナと直接やり取りすることもできます。
関連情報
Amazon ECS で Application Load Balancer のヘルスチェックに合格するために、Amazon EC2 起動タイプを使用して Amazon ECS タスクを実行するにはどうすればよいですか?