

# 更新经 Amazon ECS 优化的 AMI 上的 Amazon ECS 容器代理
<a name="agent-update-ecs-ami"></a>

如果您使用经 Amazon ECS 优化的 AMI，则可通过多种方式获取最新版本的 Amazon ECS 容器代理（按建议的顺序显示）：
+ 终止容器实例并启动最新版本的经 Amazon ECS 优化的 Amazon Linux 2 AMI（手动执行或者通过使用最新的 AMI 更新自动扩缩启动配置来执行）。这将提供全新的容器实例，其中包含最新的经测试和验证的版本的 Amazon Linux、Docker、`ecs-init` 和 Amazon ECS 容器代理。有关更多信息，请参阅 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md)。
+ 使用 SSH 连接到实例，并将 `ecs-init` 程序包（及其依赖项）更新到最新版本。此操作提供了最新的经测试和验证的版本的 Docker 和 `ecs-init`（它们在 Amazon Linux 存储库中提供）以及最新版本的 Amazon ECS 容器代理。有关更多信息，请参阅 [更新经 Amazon ECS 优化过的 AMI 上的 `ecs-init` 程序包](#procedure_update_ecs-init)。
+ 使用 `UpdateContainerAgent` API 操作更新容器代理（通过控制台执行，或者通过 AWS CLI 或 AWS 开发工具包执行）。有关更多信息，请参阅 [使用 `UpdateContainerAgent` API 操作更新 Amazon ECS 容器代理](#agent-update-api)。

**注意**  
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。<a name="procedure_update_ecs-init"></a>

**更新经 Amazon ECS 优化过的 AMI 上的 `ecs-init` 程序包**

1. 通过 SSH 登录到容器实例。

1. 使用以下命令更新 `ecs-init` 包。

   ```
   sudo yum update -y ecs-init
   ```
**注意**  
将立即更新 `ecs-init` 程序包和 Amazon ECS 容器代理。但是，更新版本的 Docker 直至 Docker 进程守护程序重新启动后才会加载。通过重启实例或通过在您的实例上运行以下命令来重新启动：  
经 Amazon ECS 优化的 Amazon ECS Amazon Linux 2 AMI：  

     ```
     sudo systemctl restart docker
     ```
经 Amazon ECS 优化的 Amazon ECS Amazon Linux AMI：  

     ```
     sudo service docker restart && sudo start ecs
     ```

## 使用 `UpdateContainerAgent` API 操作更新 Amazon ECS 容器代理
<a name="agent-update-api"></a>

**重要**  
`UpdateContainerAgent` API 仅在经 Amazon ECS 优化的 AMI 的Linux变体上受支持，但 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 除外。对于使用经 Amazon ECS 优化的 Amazon Linux 2（arm64）AMI 的容器实例，请更新 `ecs-init` 程序包更新代理。有关运行其他操作系统的容器实例，请参阅[手动更新 Amazon ECS 容器代理（适用于非经 Amazon ECS 优化的 AMI）](manually_update_agent.md)。如果您使用的是 Windows 容器实例，建议您启动新的容器实例以更新 Windows 集群中的代理版本。

`UpdateContainerAgent` API 过程在您请求代理更新时开始（通过控制台执行，或者通过 AWS CLI 或 AWS 开发工具包。Amazon ECS 将对照最新的代理版本检查您当前的代理版本，并检查是否可以更新。如果更新不可用（例如代理已在运行最新版本），则会返回 `NoUpdateAvailableException`。

上面显示的更新过程的各个阶段如下所示：

`PENDING`  
代理更新可用，并且更新过程已开始。

`STAGING`  
代理已开始下载代理更新。如果代理无法下载更新，或者更新的内容不正确或已损坏，代理将发送失败通知，并且更新将变为 `FAILED` 状态。

`STAGED`  
代理下载已完成，且代理内容已经过验证。

`UPDATING`  
`ecs-init` 服务已重新启动，并且选取了新代理版本。如果代理出于某个原因无法重新启动，更新将变为 `FAILED` 状态；否则，代理将向 Amazon ECS 发送更新已完成的信号。

**注意**  
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。

**在控制台中更新经 Amazon ECS 优化的 AMI 上的 Amazon ECS 容器代理**

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 从导航栏中，选择您的外部实例将注册的区域。

1. 在导航窗格中，选择 **Clusters** 并选择集群。

1. 在 **Cluster : *name***（集群：名称）页面上，选择 **Infrastructure**（基础设施）选项卡。

1. 在**容器实例**下，选择要更新的实例，然后选择**操作**、**更新代理**。