

# 更新 Amazon ECS 服务
<a name="update-service-console-v2"></a>

创建服务后，有时可能需要更新服务参数，例如任务数。

当您更新使用 Amazon ECS 断路器的服务时，Amazon ECS 会创建服务部署和服务修订。这些资源允许您查看有关服务历史记录的详细信息。有关更多信息，请参阅 [使用 Amazon ECS 服务部署查看服务历史记录](service-deployment.md)。

## 先决条件
<a name="update-service-prerequisites"></a>

更新服务前，请确认您的部署类型可以更改哪些服务参数。要获得参数的完整列表，请参阅[更新 Amazon ECS 服务参数](update-service-parameters.md)。

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

------
#### [ Console ]

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

1. 在 **Clusters**（集群）页面上，选择集群。

1. 在集群详细信息页面上的**服务**部分，选中服务旁边的复选框，然后选择**更新**。

1. 要让您的服务开始新的部署，请选择 **Force new deployment**（强制执行新部署）。

1. 对于**任务定义**，选择任务定义系列和修订。
**重要**  
控制台验证所选任务定义系列和修订与定义的计算配置兼容。如果收到警告，请验证任务定义兼容性和您选择的计算配置。

1. 如果您对于 **Desired tasks**（预期任务）使用 **Replica**（副本），输入要在服务中启动并保留的任务数量。

1. 如果您选择**副本**，要让 Amazon ECS 监控在可用区之间的任务分配情况，并在出现不平衡时重新分配任务，请在**可用区服务重新平衡**下选择**可用区服务重新平衡**。

1. 对于**Min running tasks**（最小运行任务数），输入服务中在部署期间必须保持 `RUNNING` 状态的任务数的下限，以所需任务数的百分比表示（四舍五入到最接近的整数）。有关更多信息，请参阅[部署配置](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/service_definition_parameters.html#sd-deploymentconfiguration)。

1. 对于 **Max running tasks**（最大运行任务数），输入部署期间 `RUNNING` 或 `PENDING` 状态下允许的服务中任务数的上限，以所需任务数的百分比表示（四舍五入到最接近的整数）。

1. 要配置服务的任务部署方式，请展开**部署选项**，然后配置选项。

   1. 对于**部署控制器类型**，指定服务部署控制器。Amazon ECS 控制台支持以下控制器类型：`ECS`。

   1. 对于**部署策略**，选择 Amazon ECS 用于部署服务新版本的策略。

   1. 根据选择的**部署策略**，执行以下操作：    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/update-service-console-v2.html)

   1. 要在生命周期阶段运行 Lambda 函数，请在**部署生命周期挂钩**下为每个唯一的 Lambda 函数执行以下操作：

      1. 选择**添加**。

         对每个要运行的唯一函数重复此操作。

      1. 对于 **Lambda 函数**，输入函数名称。

      1. 对于**角色**，选择在先决条件中创建的具有蓝绿权限的角色。

         有关更多信息，请参阅 [Amazon ECS 蓝绿部署中 Lambda 函数所需的权限](blue-green-permissions.md)。

      1. 对于**生命周期阶段**，选择 Lambda 函数运行的阶段。

      1.  （可选）对于**挂钩详细信息**，输入包含挂钩相关信息的键值对。

1. 要配置 Amazon ECS 如何检测和处理部署故障，请展开 **Deployment failure detection**（部署故障检测），然后选择您的选项。

   1. 要在任务无法启动时停止部署，请选择 **Use the Amazon ECS deployment circuit breaker**（使用 Amazon ECS 部署断路器）。

      要让软件在部署断路器将部署设置为故障状态时自动将部署回滚到上次完成的部署状态，请选择**故障时回滚**。

   1. 要根据应用程序指标停止部署，请选择**使用 CloudWatch 警报**。然后，从 **CloudWatch 警报名称**中选择警报。要创建新报警，请转到 CloudWatch 控制台。

      要让软件在 CloudWatch 警报将部署设置为故障状态时自动将部署回滚到上次完成的部署状态，请选择**故障时回滚**。

1. 要更改计算选项，请展开**计算配置**，然后执行以下操作：

   1. 对于 Amazon Fargate 上的服务，请在 **Platform version**（平台版本）中选择新版本。

   1. 对于使用容量提供程序策略的服务，请对**容量提供程序策略**执行以下操作：
      + 要添加其他容量提供程序，请选择**添加更多**。然后，对于**容量提供程序**，请选择容量提供程序。
      + 要移除容量提供程序，请在容量提供商程序的右侧选择**删除**。

      使用自动扩缩组容量提供程序的服务无法更新为使用 Fargate 容量提供程序。使用 Fargate 容量提供程序的服务无法更新为使用自动扩缩组容量提供程序。

1. （可选）要配置服务自动扩缩，请展开**服务自动扩缩**，然后指定以下参数。要使用预测式自动扩缩（这将检查流量中的历史负载数据），请在创建服务后对其进行配置。有关更多信息，请参阅 [使用历史模式通过预测式扩缩来扩展 Amazon ECS 服务](predictive-auto-scaling.md)。

   1. 要使用服务自动扩缩，请选择**服务自动扩缩**。

   1. 对于**最小任务数**，输入供服务自动扩缩使用的任务数的下限。所需计数不会低于此计数。

   1. 对于**最大任务数**，输入供服务自动扩缩使用的任务数的上限。所需计数不会高于此计数。

   1. 选择策略类型。在**扩展策略类型**下，选择以下选项之一。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/update-service-console-v2.html)

1. （可选）要使用 Service Connect，请选择 **Turn on Service Connect**（开启 Service Connect），然后指定以下内容：

   1. 在 **Service Connect configuration**（Service Connect 配置）下，指定客户端模式。
      + 如果您的服务运行的网络客户端应用程序只需要连接到命名空间中的其他服务，请选择**仅限客户端**。
      + 如果您的服务运行网络或 Web 服务应用程序且需要为该服务提供端点并连接到命名空间中的其他服务，请选择 **Client and server**（客户端和服务器）。

   1. 要使用默认集群命名空间以外的命名空间，对于**命名空间**，请选择服务命名空间。这可以是您在 Amazon Web Services 账户的同一 Amazon Web Services 区域中单独创建的命名空间，也可以是使用 Amazon Resource Access Manager（Amazon RAM）与您的账户共享的同一区域中的命名空间。有关共享 Amazon Cloud Map 命名空间的更多信息，请参阅《Amazon Cloud Map 开发人员指南》**中的 [Cross-account Amazon Cloud Map namespace sharing](https://docs.amazonaws.cn/cloud-map/latest/dg/sharing-namespaces.html)

   1. （可选）指定日志配置。选择**使用日志收集**。默认选项将容器日志发送到 CloudWatch Logs。其他日志驱动程序选项都使用 Amazon FireLens 进行配置。有关更多信息，请参阅 [将 Amazon ECS 日志发送到 Amazon 服务或 Amazon Partner](using_firelens.md)。

      下面更详细地介绍了每个容器日志目标。
      + **Amazon CloudWatch** – 将任务配置为将容器日志发送到 CloudWatch Logs。提供了默认的日志驱动程序选项，用于代表您创建 CloudWatch 日志组。要指定其他日志组名称，请更改驱动程序选项值。
      + **Amazon Data Firehose** – 将任务配置为将容器日志发送到 Firehose。提供了默认的日志驱动程序选项，这些选项将日志发送到 Firehose 传输流。要指定其他传输流名称，请更改驱动程序选项值。
      + **Amazon Kinesis Data Streams** – 将任务配置为将容器日志发送到 Kinesis Data Streams。提供了默认的日志驱动程序选项，这些选项将日志发送到 Kinesis Data Streams 流。要指定其他传输流名称，请更改驱动程序选项值。
      + **Amazon OpenSearch Service** – 将任务配置为将容器日志发送到 OpenSearch Service 域。必须提供日志驱动程序选项。
      + **Amazon S3** – 将任务配置为将容器日志发送到 Amazon S3 存储桶。提供了默认的日志驱动程序选项，但您必须指定有效的 Amazon S3 存储桶名称。

   1. 要启用访问日志，请按照以下步骤进行操作：

      1. 展开**访问日志配置**。对于**格式**，选择 **JSON** 或 `TEXT`。

      1. 要在访问日志中包括查询参数，请选择**包括查询参数**。
**注意**  
要禁用访问日志，请在**格式**中选择**无**。

1. 如果您的任务使用的数据卷与部署时的配置兼容，则可以通过扩展**卷**来配置该卷。

   卷名称和卷类型在您创建任务定义修订时配置，在更新服务时无法更改。要更新卷名称和类型，您必须创建新的任务定义修订并使用新修订更新服务。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/update-service-console-v2.html)

1. （可选）为了帮助识别您的服务，请展开**标签**部分，然后配置您的标签。
   + [添加标签] 选择**添加标签**，然后执行以下操作：
     + 对于 **Key（键）**，输入键名称。
     + 对于**值**，输入键值。
   + [删除标签] 在标签旁，选择**删除标签**。

1. 选择**更新**。

------
#### [ Amazon CLI ]
+ 运行 `update-service`。有关运行该命令的信息，请参阅《Amazon Command Line Interface Reference》中的 [update-service](https://docs.amazonaws.cn/cli/latest/reference/ecs/update-service.html)。

  以下 `update-service` 示例将服务 `my-http-service` 所需的任务计数更新为 2。

  将 *user-input* 替换为您的值。

  ```
  aws ecs update-service \
      --cluster MyCluster \
      --service my-http-service \
      --desired-count 2
  ```

------

## 后续步骤
<a name="update-service-next-steps"></a>

跟踪部署并查看使用 Amazon ECS 断路器的服务的服务历史记录。有关更多信息，请参阅 [使用 Amazon ECS 服务部署查看服务历史记录](service-deployment.md)。