ヘルスチェックの失敗ですぐに終了してしまう ECS タスクに ECS Exec する方法を教えてください

「ヘルスチェックの猶予期間」の設定すると、ヘルスチェックによるタスクの停止を延長することができます
2022.06.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

ECS Fargate で ALB のヘルスチェックを設定しています。新しいアプリケーションをデプロイしたところ、ヘルスチェックに失敗しました。ECS Exec でデバックをしたいのですがヘルスチェックの失敗後、すぐにタスクが終了してしまいます。 タスクの停止を一時的に止めるなどして、ECS Exec で一定時間デバックを行いたいのですが、どうしたら良いでしょか。

どう対応すればいいの?

ヘルスチェックの猶予期間を設定してください。

ECS サービスから起動した ECS タスクは、ELB のヘルスチェックに失敗すると自動的に停止されますが、猶予期間healthCheckGracePeriodSecondsで設定された時間は結果が無視されます。そのため、猶予期間の時間内であれば、ヘルスチェックが失敗した状態でもタスクは停止されません。

ヘルスチェックの猶予期間は ECS サービスの設定から変更でき、最大約68年(2,147,483,647秒)まで指定できます。
なお、ELB の設定ではありませんのでご注意ください。

サービス定義パラメータ - Amazon Elastic Container Service

healthCheckGracePeriodSeconds
タイプ: 整数
必須: いいえ
Amazon ECS サービススケジューラが、タスクが RUNNING 状態になった後で異常な Elastic Load Balancing ターゲットのヘルスチェック、コンテナのヘルスチェック、Route 53 のヘルスチェックを無視する期間 (秒単位)。

やってみた

ECS サービスのコンソールを開き、クラスターを選択

サービスを選択

「更新」をクリック

「次のステップ」をクリック

任意の猶予時間(単位:秒)を入力し、「次のステップ」をクリック

「次のステップ」をクリック

指定した猶予時間に問題がないことを確認して、「サービスの更新」をクリック

実際の挙動

猶予時間の変更後も、ヘルスチェックに失敗するとunhealthyとなりますが、

ECS タスク画面ではunhealthyの状態でも、指定の猶予期間まではRUNNING状態となります。

参考資料