

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用容器運作狀態檢查來判斷 Amazon ECS 任務運作狀態
<a name="healthcheck"></a>

建立任務定義時，您可以設定容器的運作狀態檢查。運作狀態檢查是在容器本機執行的命令，用於驗證應用程式運作狀態與可用性。

Amazon ECS 容器代理程式只會監控並報告任務定義中指定的運作狀態檢查。Amazon ECS 不會監控嵌入在容器映像中但未在容器定義中指定的 Docker 運作狀態檢查。容器定義中指定的運作狀態檢查參數，會覆寫任何存在於容器影像中的 Docker 運作狀態檢查。

在任務定義中定義運作狀態檢查時，容器會在容器內執行運作狀態檢查程序，然後評估結束程式碼來判斷應用程式的運作狀態。

運作狀態檢查包含下列參數：
+ 命令 – 容器為了判斷自身是否良好所執行的命令。此字串陣列的開頭可以是 `CMD`，如此能直接執行命令引數；或是 `CMD-SHELL`，藉以使用容器預設的 shell 來執行命令。當您需要管道、重新導向、命令鏈接或環境變數擴展等 Shell 功能時，請使用 `CMD-SHELL`。例如，`CMD-SHELL` 可讓您使用 `curl -f http://localhost/ || exit 1` 之類的命令，其中的 `||` 運算子會由 Shell 解釋。若為無需 Shell 解譯的簡單指令，請使用 `CMD`。
+ 時間間隔 – 每次運作狀態檢查之間的時間間隔 (以秒為單位)。
+ 逾時 – 在判定為失敗之前，等待運作狀態檢查成功執行的時間 (以秒為單位)。
+ 重試次數 – 在將容器運作狀態判定為不良之前，失敗的運作狀態檢查重試次數。
+ 啟動期間 – 選用的寬限期，讓容器有時間完成啟動程序，此期間內失敗的運作狀態檢查不會計入最大重試次數。

  如果運作狀態檢查在 `startPeriod` 內成功，則代表容器運作狀態良好，之後的任何故障都會計入，累積至重試次數上限。

如需有關如何在任務定義中指定運作狀態檢查的資訊，請參閱[運作狀態檢查](task_definition_parameters.md#container_definition_healthcheck)。

以下內容說明容器的可能運作狀態值：
+ `HEALTHY` - 容器運作狀態檢查已成功通過。
+ `UNHEALTHY` - 容器運作狀態檢查失敗。
+ `UNKNOWN` - 正在評估容器運作狀態檢查，沒有定義容器運作狀態檢查，或 Amazon ECS 沒有容器的運作狀態。

運作狀態檢查命令在容器上執行。因此，必須將命令包含在容器映像中。

運作狀態檢查會透過容器的回送介面，以 `localhost` 或 `127.0.0.1` 與應用程式建立連線。結束代碼 `0` 表示成功，而非零結束代碼則表示失敗。

使用容器運作狀態檢查時，建議考量下列事項：
+ 容器運作狀態檢查需要 1.17.0 版或更新版本的 Amazon ECS 容器代理程式。
+ 如果您使用的是 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`，該狀態會維持不變，直至代理程式重新連線並完成下一次運作狀態檢查為止。沒有對容器運作狀態檢查的狀態做出任何假設。