

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

# Amazon ECS EC2 容器執行個體
<a name="ecs-agent-versions"></a>

Amazon ECS 代理程式是在每個已註冊至叢集的容器執行個體上執行的程序。該程序有助於容器執行個體與 Amazon ECS 之間的通訊。

**注意**  
在 Linux 容器執行個體上，代理程式容器會掛載最上層目錄，例如 `/lib`、`/lib64` 與 `/proc`。這對於 Amazon EBS 磁碟區、`awsvpc` 網路模式、Amazon ECS Service Connect 與 FireLens for Amazon ECS 等 ECS 功能是必要的。

每個 Amazon ECS 容器代理程式版本都支援不同的功能集，並提供先前版本的錯誤修復。可能的話，我們建議您一律使用最新版本的 Amazon ECS 容器代理程式。若要將您的容器代理更新到最新版本，請參閱「[更新 Amazon ECS 容器代理程式](ecs-agent-update.md)」。

Amazon ECS 容器代理程式包含 `amazon-ecs-pause` 映像。Amazon ECS 會將此映像用於採用 `awsvpc` 網路模式的任務。

若要查看每個代理版本中包含哪些功能和強化功能，請參閱 [https://github.com/aws/amazon-ecs-agent/releases](https://github.com/aws/amazon-ecs-agent/releases)。

**重要**  
可靠指標的最低 Docker 版本是 Docker 版本 `v20.10.13` 及更新版本，該版本隨附於 Amazon ECS 最佳化 AMI `20220607` 及更新版本中。  
Amazon ECS 代理程式版本 `1.20.0` 和更新版本已不支援 `18.01.0` 之前的 Docker 版本。

## 生命週期
<a name="container-lifecycle"></a>

當 Amazon ECS 容器代理程式在您的叢集中註冊 Amazon EC2 執行個體時，Amazon EC2 執行個體會將其狀態報告為 `ACTIVE`，其代理程式連線狀態為 `TRUE`。這個容器執行個體可以接受執行任務請求。

如果您停止 (非終止) 容器執行個體，狀態會維持在 `ACTIVE`，但代理程式連線狀態會在幾分鐘內轉換成 `FALSE`。容器執行個體上執行的所有任務都會停止。如果您再次啟動容器執行個體，容器代理會與 Amazon ECS 服務重新連線，而您即可再次在執行個體上執行任務。

如果您將容器執行個體的狀態變更為 `DRAINING`，新的任務就不會放置在容器執行個體中。如果可能，容器執行個體上執行的所有服務任務都會移除，以便您可以執行系統更新。如需詳細資訊，請參閱[排空 Amazon ECS 容器執行個體](container-instance-draining.md)。

如果您取消註冊或終止容器執行個體，則容器執行個體狀態會立即變更為 `INACTIVE`，且在您列出容器執行個體時將不再回報該容器執行個體。不過，終止後的一小時內您仍然可以描述容器執行個體。一小時之後，即無法再進行執行個體描述。

您可以手動耗盡執行個體，或者建置 Auto Scaling 群組 lifecycle hook 以將執行個體狀態設定為 `DRAINING`。如需有關 Auto Scaling lifecycle hook 的詳細資訊，請參閱 [Amazon EC2 Auto Scaling lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)。

## Docker 支援
<a name="docker-support"></a>

Amazon ECS 支援在 Amazon Linux 上發布的 Docker 最近兩個主要版本。目前包括 Docker 20.10.x 與 Docker 25.x。

您可以在 GitHub 的 [Amazon ECS 代理程式規格檔案](https://github.com/aws/amazon-ecs-agent/blob/dev/packaging/amazon-linux-ami-integrated/ecs-agent.spec#L53)中找到 Amazon ECS 所需的最低 Docker 版本。

使用 Amazon ECS 最佳化 AMI 時，會預先安裝 Docker 並設定為搭配 Amazon ECS 容器代理程式使用。AMI 包含經 Amazon ECS 測試且支援的 Docker 版本。

**注意**  
雖然 Amazon ECS 支援多個 Docker 版本，但建議使用 Amazon ECS 最佳化 AMI 內建的 Docker 版本，以取得最佳相容性與技術支援。

## Amazon ECS 最佳化 AMI
<a name="ecs-optimized-ami"></a>

如需 Amazon ECS 最佳化 AMI 的詳細資訊，請參閱 [Amazon ECS 最佳化 Linux AMIs](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)。

## 其他資訊
<a name="additional-information"></a>

下列頁面提供變更的其他資訊：
+ GitHub 上的 [Amazon ECS 代理程式變更記錄](https://github.com/aws/amazon-ecs-agent/blob/master/CHANGELOG.md)
+ [Amazon Linux 2 版本備註](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)
+ Docker 文件中的 [Docker 引擎版本備註](https://docs.docker.com/engine/release-notes/27/)
+ NVIDIA 文件中的 [NVIDIA 驅動程式文件](https://docs.nvidia.com/datacenter/tesla/index.html)

## Amazon ECS 容器代理程式日誌組態參數
<a name="agent-logs"></a>

Amazon ECS 容器代理程式會在您的容器執行個體儲存紀錄。

針對 1.36.0 版和更新版本的容器代理程式，根據預設，紀錄會位在 Linux 執行個體的 `/var/log/ecs/ecs-agent.log`，以及 Windows 執行個體的 `C:\ProgramData\Amazon\ECS\log\ecs-agent.log`。

針對 1.35.0 版和更舊版本的容器代理程式，根據預設，紀錄會位在 Linux 執行個體的 `/var/log/ecs/ecs-agent.log.timestamp`，以及 Windows 執行個體的 `C:\ProgramData\Amazon\ECS\log\ecs-agent.log.timestamp`。

根據預設，代理程式紀錄會每小時輪換一次，最多儲存 24 個日誌。

下列是容器代理程式組態變數，可用來變更預設的代理程式紀錄行為。如需有關所有可用組態參數的詳細資訊，請參閱 [Amazon ECS 容器代理程式組態](ecs-agent-config.md)或 GitHub 上的 [Amazon ECS Agent README](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)。

針對 1.36.0 和更新版本的容器代理程式，可參考以下使用 `logfmt` 格式時的範例日誌檔。

```
level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go
level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go
level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go
level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go
level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go
level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go
level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go
```

以下是使用 JSON 格式時的範例日誌檔。

```
{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}
```