ECS で依存関係を設定したタスクのヘルスステータスがUNHEALTHYのまま終了しないときの対処方法

2022.05.26

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

困っていた内容

ECS でタスク内に複数のコンテナを定義し、依存関係とコンテナへのヘルスチェックを設定しています。
新しいタスクをデプロイしたところヘルスチェックに失敗し、ヘルスステータスがUNHEALTHYになりましたが、タスクが終了しません。何か設定が足りていないのでしょうか。

どう対応すればいいの?

ECS タスク定義のstartTimeoutを設定してください。

タスク定義パラメータ - Amazon ECS

startTimeout
タイプ: 整数
必須: いいえ
値の例: 120
コンテナの依存関係解決の再試行を止めるまでの待機時間 (秒)。

ヘルスステータスがUNHEALTHYになるとタスクの自動終了が期待されますが、コンテナの依存関係を設定している場合、タスクは依存関係を満たすまで待機します。依存関係の解決が継続する状況を避けたい場合は、依存関係のタイムアウト時間(startTimeout)を設定する必要があります。

タスク定義パラメータ - Amazon ECS

注記
コンテナが依存関係の制約を満たさない場合、または制約を満たす前にタイムアウトした場合、Amazon ECS は依存コンテナを次の状態に進めません。

なお、現時点の挙動としてstartTimeoutを指定しない状態でも、3時間待機すると「停止理由:Service : task last status remained in PENDING too long.」自動終了しました。

参考資料