コンテナのヘルスチェックを使用して Amazon ECS タスク状態を判定する
タスク定義を作成するときに、コンテナのヘルスチェックを設定できます。ヘルスチェックは、コンテナ上でローカルに実行され、アプリケーションのヘルスと可用性を検証するコマンドです。
Amazon ECS コンテナエージェントは、タスク定義で指定されたヘルスチェックについてのみ、モニタリングとレポートを行います。Amazon ECS は、コンテナイメージに組み込みた Docker ヘルスチェックについても、コンテナ定義で指定されていない場合はモニタリングしません。コンテナ定義で指定されているヘルスチェックのパラメータは、コンテナイメージ内に存在する Docker ヘルスチェックを上書きします。
タスク定義でヘルスチェックが定義されると、コンテナはコンテナ内でヘルスチェックプロセスを実行し、終了コードを評価してアプリケーションのヘルスを判定します。
ヘルスチェックは以下のパラメータで構成されています。
-
コマンド – 正常かどうかを判定するためにコンテナが実行するコマンド。この文字列配列の先頭には、コマンド引数を直接実行するための
CMD
、またはコンテナのデフォルトシェルでコマンドを実行するためのCMD-SHELL
を付加できます。 -
間隔 – 各ヘルスチェック間の時間間隔 (秒)。
-
タイムアウト – 失敗したと見なされるまでの、ヘルスチェックが正常に終了するのを待つ時間 (秒)。
-
再試行回数 – コンテナが異常と見なされるまでに、失敗したヘルスチェックを再試行する回数。
-
開始期間 – 失敗したヘルスチェックの再試行が最大回数に達する前に、コンテナにブートストラップするまでの時間を与えるオプションの猶予期間です。
タスク定義でヘルスチェックを指定する方法については、「ヘルスチェック」を参照してください。
以下はコンテナのヘルスステータスの取り得る値です。
-
HEALTHY
— コンテナのヘルスチェックが正常に完了しました。 -
UNHEALTHY
— コンテナのヘルスチェックが失敗しました。 -
UNKNOWN
— コンテナのヘルスチェックが評価中か、定義されていない、または Amazon ECS にコンテナのヘルスチェックのステータスがありません。
ヘルスチェックコマンドはコンテナ上で実行されます。そのため、コンテナイメージにそのコマンドを入れる必要があります。
ヘルスチェックは、localhost
または 127.0.0.1
にあるコンテナのループバックインターフェイスを介してアプリケーションに接続します。0
である終了コードは成功を示し、ゼロ以外の終了コードは失敗を示します。
コンテナのヘルスチェックを使用する際は、以下の点を考慮してください。
-
コンテナのヘルスチェックには、Amazon ECS コンテナエージェントのバージョン 1.17.0 以降が必要です。
-
コンテナのヘルスチェックは、Linux プラットフォームバージョン
1.1.0
以降、または Windows プラットフォームバージョン1.1.0
以降を使用している場合、Fargate タスクでサポートされます。
Amazon ECS がタスクの正常性を判定する方法
タスクの正常性を判定するのに考慮されるのは、必須で、タスク定義にヘルスチェックコマンドが含まれているコンテナだけです。
次のルールが順番に評価されます。
-
ある必須コンテナのステータスが
UNHEALTHY
の場合、そのタスクステータスがUNHEALTHY
である。 -
ある必須コンテナのステータスが
UNKNOWN
の場合、そのタスクステータスがUNKNOWN
である。 -
すべての必須コンテナのステータスが
HEALTHY
の場合、タスクステータスがHEALTHY
である。
必須コンテナ 2 つでの次のタスクの正常性の例を挙げます。
コンテナ 1 の正常性 | コンテナ 2 の正常性 | タスクの正常性 |
---|---|---|
UNHEALTHY |
UNKNOWN |
UNHEALTHY |
UNHEALTHY |
HEALTHY |
UNHEALTHY |
HEALTHY |
UNKNOWN |
UNKNOWN |
HEALTHY |
HEALTHY |
HEALTHY |
コンテナ 3 つでの次のタスクの正常性の例を挙げます。
コンテナ 1 の正常性 | コンテナ 2 の正常性 | コンテナ 3 の正常性 | タスクの正常性 |
---|---|---|---|
UNHEALTHY |
UNKNOWN |
UNKNOWN |
UNHEALTHY |
UNHEALTHY |
UNKNOWN |
HEALTHY |
UNHEALTHY |
UNHEALTHY |
HEALTHY |
HEALTHY |
UNHEALTHY |
HEALTHY |
UNKNOWN |
HEALTHY |
UNKNOWN |
HEALTHY |
UNKNOWN |
UNKNOWN |
UNKNOWN |
HEALTHY |
HEALTHY |
HEALTHY |
HEALTHY |
エージェントの切断がヘルスチェックに及ぼす影響
Amazon ECS コンテナエージェントが Amazon ECS サービスから切断されても、コンテナが UNHEALTHY
ステータスに移行することはありません。これは、エージェントの再起動中や一時的に使用不可になっている間もコンテナが実行され続けるように設計されているためです。ヘルスチェックのステータスは、Amazon ECS エージェントからの「最後に受信した」レスポンスであるため、コンテナが切断前に HEALTHY
であると見なされていた場合、エージェントが再接続されて新たにヘルスチェックが行われるまではそのステータスが残ります。コンテナのヘルスチェックのステータスについては、いかなる仮定もありません。