

# 更新 Amazon ECS Express Mode 服务
<a name="express-service-update-full"></a>

Express Mode 服务通过为联网、负载均衡和 Application Auto Scaling 提供可配置的选项，并协调这些服务之间的更改，简化了服务更新过程。

您可以更新 Express Mode 服务以修改容器映像、调整资源分配或更改配置设置。将使用金丝雀部署来部署更新，通过基于警报的回滚警报保持可用性。

## 部署行为
<a name="express-service-update-full-behavior"></a>

Express Mode 服务默认使用金丝雀部署来确保安全更新和快速回滚：
+ 创建一个新环境，并使用您的更改部署任务
+ 5% 的流量转移到新环境
+ 如果在 3 分钟内有 2 个数据点的 4xx 和 5xx 错误百分比之和大于 1，则会触发基于警报的回滚
+ 运行状况检查验证新任务是否正常
+ 3 分钟烘焙时间后，100% 的流量将转移到新环境
+ 3 分钟烘焙时间进行监控后，旧任务会逐渐停止并被替换

有关更多信息，请参阅 [Amazon ECS 金丝雀部署](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/canary-deployment.html)。

## 过程
<a name="express-service-update-full-procedure"></a>

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

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

1. 在**集群**页面上，选择包含您的 Express Mode 服务的集群的名称。

1. 在集群详细信息页面上，选择**服务**选项卡。

1. 配置一个筛选条件以查看您的 Express Mode 服务。对于**筛选资源管理类型**，请选择 **ECS**。

   Express Mode 服务的名称旁边有一个 **Express** 徽章。

1. 在**配置**下：

   1. 指定要用于您的应用程序的映像。对于**映像 URI**，输入您的映像的 URI。要浏览您的 Amazon ECR 映像，请选择**浏览 ECR 映像**，然后执行以下操作：

      1. 对于**私有存储库**，请选择 Amazon ECR 私有存储库。

      1. 对于**映像**，请选择您的映像。

      1. 选择如何识别映像。对于**按以下方式选择映像**，请选择以下选项之一：
         + AWS 建议您选择**映像摘要**。
         + 要使用标签，请选择**映像标签**，然后选择标签。

   1. 要使用私有注册表，请选择**私有注册表**。然后，对于 **Secrets Manager ARN 或名称**，输入您在先决条件中创建的 Secrets Manager ARN。

   1. 对于**任务执行角色**，请选择角色或创建新角色并刷新。当您需要添加其他权限时，可以更新任务执行角色。

1. 在**其他配置**下，自定义您的服务。

   1. 在**容器**下：

      1. 对于**容器端口**，更新您的应用程序侦听的端口（默认值为 80）。

      1. 对于**运行状况检查路径**，更新运行状况检查的路径（例如，`/health`）。

   1. 在**环境变量**下，添加应用程序所需的环境变量的键值对：

      1. 对于**键**，请键入环境变量名称。

      1. 对于**值类型**，请选择**环境变量**或**密钥**。

      1. 对于**值或值来自**，输入值或参考。

      1. 要根据需要添加更多变量，请选择**添加环境变量**。

   1. 对于**命令**，根据需要输入自定义命令来覆盖 Docker CMD 指令。

   1. 对于**任务角色**，添加一个 IAM 角色来向在容器中运行的应用程序授予权限。这允许您的应用程序对 AWS 服务进行 API 调用。

   1. 在**计算**下：

      1. 对于 **CPU**，更新任务的 vCPU 分配（例如，1 个 vCPU）。

      1. 对于**内存**，更新任务的内存分配（例如，2 GB）。

   1. 在**自动扩缩**下：

      1. 对于 **ECS 服务指标**，选择要扩展的指标（例如，**ECS 服务平均内存利用率**或**每个目标的请求计数**）。

      1. 对于**目标值**，输入扩展的目标（例如，**60** 或 **1000**）。

      1. 对于**最小任务数**和**最大任务数**，更新扩展限制。

   1. 在**日志**下：

      1. 对于 **Amazon CloudWatch 日志组**，更新您的应用程序日志的日志组名称。请注意，这不会移动现有日志，而是从新的服务修订开始写入日志。

      1. 对于 **Amazon CloudWatch 日志流前缀**，输入日志流的新前缀。

1. 选择**更新**以更新您的 Express Mode 服务。

### 使用自定义任务定义进行更新
<a name="express-service-update-custom-td"></a>

通过指定 `taskDefinitionArn` 参数，您可以使用自定义任务定义来更新 Express Mode 服务。Express Mode 按原样使用您的任务定义，并继续管理基础设施的其余部分。

在后续更新中，您可以执行以下任一操作：
+ 创建任务定义的新修订版并更新 `taskDefinitionArn`。Express Mode 使用新修订版进行下一次服务部署。
+ 直接更新 Express Mode 参数
  + 对于与任务定义无关的参数（例如 `healthCheckPath`、`networkConfiguration` 或 `scalingTarget`），Express Mode 会在不修改任务定义的情况下应用更改。
  + 对于与任务定义相关的参数（例如使用 `primaryContainer` 或 `cpu`/`memory` 的映像、CPU 或内存），Express Mode 会根据您的更改创建新的托管任务定义，同时保留其他任务级配置。

**要使用自定义任务定义进行更新（ Amazon ECS 控制台）**

1. 打开 Amazon ECS 控制台并导航到 Express Mode 服务。

1. 选择**更新服务**旁边的下拉箭头，然后选择**使用自定义任务定义更新**。

1. 对于**任务定义系列**，选择现有的任务定义系列。要创建新的任务定义，选择**任务定义**链接。

1. 对于**任务定义修订版**，选择要使用的修订版，或留空以使用最新的修订版。

1. （可选）展开**其他配置**以更新运行状况检查路径、网络或自动扩缩设置。

1. 选择**更新**。

以下 AWS AWS CLI 命令使用自定义任务定义更新您的 Express Mode 服务：

```
aws ecs update-express-gateway-service \
    --service-arn arn:aws:ecs:us-west-2:123456789012:service/default/my-service \
    --task-definition-arn arn:aws:ecs:us-west-2:123456789012:task-definition/my-td:4
```

**注意**  
如果您是首次使用 CloudFormation 并添加 `taskDefinitionArn` 到 Express Mode 服务，请先重新部署堆栈一次。这确保了回滚兼容性。