

# コンテナのヘルスチェックを使用して Amazon ECS タスク状態を判定する
<a name="healthcheck"></a>

タスク定義を作成するときに、コンテナのヘルスチェックを設定できます。ヘルスチェックは、コンテナ上でローカルに実行され、アプリケーションのヘルスと可用性を検証するコマンドです。

Amazon ECS コンテナエージェントは、タスク定義で指定されたヘルスチェックについてのみ、モニタリングとレポートを行います。Amazon ECS は、コンテナイメージに組み込みた Docker ヘルスチェックについても、コンテナ定義で指定されていない場合はモニタリングしません。コンテナ定義で指定されているヘルスチェックのパラメータは、コンテナイメージ内に存在する Docker ヘルスチェックを上書きします。

タスク定義でヘルスチェックが定義されると、コンテナはコンテナ内でヘルスチェックプロセスを実行し、終了コードを評価してアプリケーションのヘルスを判定します。

ヘルスチェックは以下のパラメータで構成されています。
+ コマンド – 正常かどうかを判定するためにコンテナが実行するコマンド。この文字列配列の先頭には、コマンド引数を直接実行するための `CMD`、またはコンテナのデフォルトシェルでコマンドを実行するための `CMD-SHELL` を付加できます。パイプ、リダイレクト、コマンドチェイニング、環境変数の拡張などのシェル機能が必要な場合は `CMD-SHELL` を使用します。例えば、`CMD-SHELL` では、シェルが `||` 演算子を解釈する `curl -f http://localhost/ || exit 1` のようなコマンドを使用できます。シェル解釈を必要としないシンプルなコマンドには `CMD` を使用します。
+ 間隔 – 各ヘルスチェック間の時間間隔 (秒)。
+ タイムアウト – 失敗したと見なされるまでの、ヘルスチェックが正常に終了するのを待つ時間 (秒)。
+ 再試行回数 – コンテナが異常と見なされるまでに、失敗したヘルスチェックを再試行する回数。
+ 開始期間 – 失敗したヘルスチェックの再試行が最大回数に達する前に、コンテナにブートストラップするまでの時間を与えるオプションの猶予期間です。

  ヘルスチェックが `startPeriod` 内で成功した場合、コンテナは正常であるとみなされ、その後の失敗は最大再試行回数にカウントされます。

タスク定義でヘルスチェックを指定する方法については、「[ヘルスチェック](task_definition_parameters.md#container_definition_healthcheck)」を参照してください。

以下はコンテナのヘルスステータスの取り得る値です。
+ `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 がタスクの正常性を判定する方法
<a name="task-determination"></a>

タスクの正常性を判定するのに考慮されるのは、必須で、タスク定義にヘルスチェックコマンドが含まれているコンテナだけです。

次のルールが順番に評価されます。

1. ある必須コンテナのステータスが `UNHEALTHY` の場合、そのタスクステータスが `UNHEALTHY` である。

1. ある必須コンテナのステータスが `UNKNOWN` の場合、そのタスクステータスが `UNKNOWN` である。

1. すべての必須コンテナのステータスが `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 | 

## エージェントの切断がヘルスチェックに及ぼす影響
<a name="healthcheck-agent-disconnect"></a>

Amazon ECS コンテナエージェントが Amazon ECS サービスから切断されても、コンテナが `UNHEALTHY` ステータスに移行することはありません。これは、エージェントの再起動中や一時的に使用不可になっている間もコンテナが実行され続けるように設計されているためです。ヘルスチェックのステータスは、Amazon ECS エージェントからの「最後に受信した」レスポンスであるため、コンテナが切断前に `HEALTHY` であると見なされていた場合、エージェントが再接続されて新たにヘルスチェックが行われるまではそのステータスが残ります。コンテナのヘルスチェックのステータスについては、いかなる仮定もありません。