1
1

ECSのヘルスチェック猶予期間についてハマった点

Posted at

はじめに

AWSのALBにぶら下げる形でECS on Fargateを利用しているのですが、起動するまでに数分の時間を要するアプリケーションを運用しており、ヘルスチェック失敗を防ぐためにヘルスチェックの猶予期間(healthCheckGracePeriodSeconds)を設定していました。

ただ、コンテナのデプロイ時に「監視ツール上ではステータスコードの200番しか記録されていない」「その後のアプリケーション自体も正常に動作している」にもかかわらず「unhealthy判定がされてしまい、コンテナがエラー終了し、コンテナの再生成が繰り返されてしまう」といった事象に遭遇したため、その調査の過程を記録したものとなります。

前提として、ヘルスチェック猶予期間とは何か

ECSサービス定義のパラメータの一つです。

ヘルスチェック猶予期間を設定することで、その期間はECSタスクに対するヘルスチェックの結果を無視する事が可能となっています。

参考:サービス定義パラメータ > ネットワーク構成 > healthCheckGracePeriodSeconds

何が原因だったのか

結論から述べると「ヘルスチェックの猶予期間が過ぎた時点で、対象のコンテナがunhealthyの状態になっていた事」が直接の原因でした。

誤解として「ヘルスチェック猶予期間」は「ヘルスチェック自体が行われなくなる」と認識していましたが、この点は誤りで、正しくは「ヘルスチェック自体は行われるが、その結果自体が無視される」という事となります。

実際に、AWS情報センターにも同様の回答としてELB に登録されていて、正常に機能している Amazon ECS タスクが異常とマークされて置き換えられるのはなぜですか?といったドキュメントがあります。

Amazon ECS タスクが猶予期間内に ELB ヘルスチェックに応答しない場合、異常のフラグが付けられます。

確認したこと

実在しないヘルスチェックパスに対してヘルスチェックを実行する(必ずunhealthyとなる)コンテナを、ALBのターゲットグループに登録しました。

結果として「失敗のしきい値(回数)×ヘルスチェックの間隔(秒数)」の経過後は、たとえコンテナがヘルスチェックの猶予期間内でもunhealthyとしてマークされるという事を確認しました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1