

# 通过替换任务来部署 Amazon ECS 服务
<a name="deployment-type-ecs"></a>

当创建一项使用*滚动更新*（`ECS`）部署类型的服务时，Amazon ECS 服务调度器会将当前正在运行的任务替换为新任务。在滚动更新期间 Amazon ECS 在服务中添加或删除的任务数量由服务部署配置控制。

Amazon ECS 使用以下参数来确定任务数量：
+ `minimumHealthyPercent` 表示在滚动部署期间或容器实例耗尽时应为服务运行且状态良好的任务数下限，以服务所需的任务数的百分比表示。此值向上取整。例如，如果最小运行状况百分比为 `50`，并且所需的任务计数为 4，则调度器可以在启动两个新任务之前停止两个现有任务。同样，如果最小运行状况百分比为 75%，所需任务计数为 2，则由于结果值也为 2，调度器无法停止任何任务。
+ `maximumPercent` 表示在滚动部署期间或容器实例耗尽时应为服务运行的任务数上限，以服务所需的任务数的百分比表示。此值向下取整。例如，如果最大百分比为 `200` 且目标任务计数为 4，则调度器可以在停止四个现有任务之前启动四个新任务。同样，如果最大百分比为 `125`，且目标任务计数为三，则调度器无法启动任何任务，因为结果值也是三。

在滚动部署期间，当任务运行状况不佳时，Amazon ECS 会替换它们，以维护您的服务的 `minimumHealthyPercent` 并保护可用性。运行状况不佳的任务将使用它们所属的同一服务修订进行替换。这样可以确保源修订中运行状况不佳的任务替换与目标修订中的任务失败无关。如果 `maximumPercent` 设置允许，则计划程序会先启动替换任务，然后再停止运行状况不佳的任务。如果 `maximumPercent` 参数限制计划程序先启动替换任务，则计划程序会一次停止一个运行状况不佳的任务以释放容量，然后再启动替换任务。

**重要**  
设置最小运行状况百分比或最大百分比时，应确保调度器在启动部署时可以停止或启动至少一个任务。如果您的服务由于部署配置无效而停滞的部署，将发送服务事件消息。有关更多信息，请参阅 [因为服务部署配置，服务（*service-name*）无法在部署期间停止或启动任务。更新 minimumHealthyPercent 或 maximumPercent 值，然后重试。](service-event-messages-list.md#service-event-messages-7)。

滚动部署有 2 种方法可以让您快速识别服务部署失败的时间：
+ [Amazon ECS 部署断路器如何检测故障](deployment-circuit-breaker.md)
+ [CloudWatch 警报如何检测 Amazon ECS 部署故障](deployment-alarm-failure.md)

可以单独使用这些方法，也可以一起使用。当同时使用这两种方法时，只要满足任一故障方法的故障标准，部署就会设置为失败。

使用以下准则来帮助确定要使用哪种方法：
+ 断路器 — 若要在任务无法启动时停止部署，请使用此方法。
+ CloudWatch 警报 — 若要根据应用程序指标停止部署，请使用此方法。

两种方法都支持回滚到之前的服务修订版本。

## 容器映像解析
<a name="deployment-container-image-stability"></a>

默认情况下，Amazon ECS 会将任务定义中指定的容器映像标签解析为容器映像摘要。如果您创建的服务要运行和维护单个任务，则该任务将用于为任务中的容器建立映像摘要。如果您创建的服务要运行和维护多个任务，则服务调度器在部署期间启动的第一个任务将用于为任务中的容器建立映像摘要。

如果尝试建立容器映像摘要时失败三次或以上，则部署将继续，但不再进行映像摘要解析。如果启用了部署断路器，则部署还会失败并回滚。

建立容器映像摘要后，Amazon ECS 将使用摘要来启动任何其他所需的任务，以及用于任何未来的服务更新。这会导致服务中的所有任务始终运行相同的容器映像，从而确保软件的版本一致性。

您可以使用容器定义中的 `versionConsistency` 参数为任务中的每个容器配置此行为。有关更多信息，请参阅 [versionConsistency](task_definition_parameters.md#ContainerDefinition-versionconsistency)。

**注意**  
低于 `1.31.0` 版本的 Amazon ECS 代理不支持映像摘要解析。代理版本：`1.31.0``1.69.0`仅支持对推送到 Amazon ECR 存储库的映像进行映像摘要解析。代理版本 `1.70.0` 或更高版本支持所有映像的映像摘要解析。
映像摘要解析的最低 Fargate Linux 平台版本为 `1.3.0`。映像摘要解析的最低 Fargate Windows 平台版本为 `1.0.0`。
Amazon ECS 不会捕获由 Amazon ECS 管理的附加容器摘要，例如 Amazon GuardDuty 安全代理或 Service Connect 代理。
要减少具有多个任务的服务中的与容器映像解析相关的可能延迟，请在 EC2 容器实例上运行 Amazon ECS 代理版本 `1.83.0` 或更高版本。要避免可能的延迟，请在任务定义中指定容器映像摘要。
如果您创建的服务所需任务数为零，则 Amazon ECS 将无法建立容器摘要，直到您触发另一个所需任务数大于零的服务部署。
若要建立更新的映像摘要，可以强制进行新的部署。此更新后的摘要将用于启动新任务，不会影响已在运行的任务。有关强制新部署的更多信息，请参阅 *Amazon ECS API 参考*中的 [forceNewDeployment](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html#ECS-UpdateService-request-forceNewDeployment)。
使用 EC2 容量提供程序时，如果在初始部署期间容量不足以启动任务，则软件版本一致性可能会无法保证。为确保即使在容量有限的情况下也能保持版本一致性，请在任务定义容器配置中明确设置 `versionConsistency: "enabled"`，而不是依赖默认行为。这将导致 Amazon ECS 等到容量可用后再继续部署。

# Amazon ECS 服务参数的最佳实践
<a name="service-options"></a>

为确保应用程序不会停机，按照如下部署过程操作：

1. 启动新的应用程序容器，同时保持现有容器运行。

1. 检查新容器是否正常运行。

1. 停止旧容器。

 根据您的部署配置和集群中空闲的未预留空间量，可能需要多轮操作完成此操作，才能将所有旧任务替换为新任务。

您可以使用两个服务配置选项修改数字：
+ `minimumHealthyPercent`：100%（默认值）

  服务在部署期间必须保持在 `RUNNING` 状态的任务数下限。其表示为向上取整到最近整数的 `desiredCount` 的百分比。此参数使您不必使用额外的集群容量就能部署。
+ `maximumPercent`：200%（默认值）

   服务在部署期间允许处于 `RUNNING` 或 `PENDING` 状态的任务数上限。其表示为向下取整到最近整数的 `desiredCount` 的百分比。

**示例：默认配置选项**

考虑以下服务：它有六个任务，部署在一个拥有总共可容纳八个任务的空间的集群中。默认的服务配置选项不允许部署下降到低于六个所需任务的 100%。

部署过程如下：

1. 目标是替换这六个任务。

1. 计划程序会启动两个新任务，因为默认设置要求有六个正在运行的任务。

   现在有六个现有任务和两个新任务。

1. 计划程序停止两个现有任务。

   现在有四个现有任务和两个新任务。

1. 计划程序启动另外两个新任务。

   现在有四项现有任务和四项新任务。

1. 计划程序关闭两个现有任务。

   现在有两个现有任务和四个新任务。

1. 计划程序启动另外两个新任务。

   现在有两个现有任务和六个新任务

1. 计划程序关闭最后两个现有任务。

   现在有六个新任务。

在上面的示例中，如果您使用选项的默认值，则每启动一个新任务都有 2.5 分钟的等待时间。此外，负载均衡器可能需要等待 5 分钟才能停止旧任务。

**示例：修改 `minimumHealthyPercent`**

您可以通过将 `minimumHealthyPercent` 值设置为 50% 来加快部署速度。

考虑以下服务：它有六个任务，部署在一个拥有总共可容纳八个任务的空间的集群中。部署过程如下：

1. 目标是替换这六个任务。

1. 计划程序停止三个现有任务。

   仍然有三个符合 `minimumHealthyPercent` 值的现有任务在运行。

1. 计划程序启动五个新任务。

   现在有三个现有任务和五个新任务。

1. 计划程序停止剩余的三个任务。

   现在有五个新任务

1. 计划程序启动最后一个新任务。

   现在有六个新任务。

**示例：修改集群可用空间**

您还可以添加额外的可用空间，以便可以运行额外的任务。

考虑以下服务：它有六个任务，部署在一个拥有总共可容纳十个任务的空间的集群中。部署过程如下：

1. 目标是替换现有任务。

1. 计划程序停止三个现有任务。

   现在有三个现有任务。

1. 计划程序启动六个新任务。

   有三个现有任务和六个新任务

1. 计划程序停止三个现有任务。

   现在有六个新任务。

**建议**

当您的任务闲置一段时间并且利用率不高时，请使用以下值作为服务配置选项。
+ `minimumHealthyPercent`：50%
+ `maximumPercent`：200% 

# 创建 Amazon ECS 滚动更新部署
<a name="create-service-console-v2"></a>

创建一个服务以在集群中同时运行并维护指定数量的任务定义实例。如果其中一个任务失败或停止，Amazon ECS 服务调度器会启动另一个任务定义实例来替换它。这有助于保持服务中的预期任务数。

在创建服务之前，请确定以下配置参数：
+ 有两个计算选项可分发您的任务。
  + **capacity provider strategy**（容量提供程序策略）会使 Amazon ECS 在一个或多个容量提供商之间分发您的任务。

    如果要在 Amazon ECS 托管实例上运行工作负载，则必须使用容量提供程序策略选项。
  + **启动类型**会让 Amazon ECS 直接在 Fargate 或注册到集群的 EC2 实例上启动我们的任务。

    如果要在 Amazon ECS 托管实例上运行工作负载，则必须使用容量提供程序策略选项。
+ 任务定义使用 `awsvpc` 网络模式或配置为使用负载均衡器的服务必须具有网络配置。预设情况下，控制台会选择原定设置 Amazon VPC 以及原定设置 Amazon VPC 中的所有子网和原定设置安全组。
+ 放置策略。默认的任务放置策略会在可用区之间平均分配任务。

  我们建议您使用可用区重新平衡来帮助确保服务的高可用性。有关更多信息，请参阅 [在可用区之间平衡 Amazon ECS 服务](service-rebalancing.md)。
+ 当您为服务部署使用 **Launch Type**（启动类型）时，默认情况下，该服务会在集群 VPC 的子网中启动。
+ 对于 **capacity provider strategy**（容量提供程序策略），控制台会默认选择一个计算选项。下面介绍了控制台用于选择原定设置值的顺序：
  + 如果您的集群已定义原定设置容量提供程序策略，则将选择该策略。
  + 如果您的集群没有定义的原定设置容量提供程序策略，但您确实已将 Fargate 容量提供程序添加到集群中，则选择使用 `FARGATE` 容量提供程序的自定义容量提供程序策略。
  + 如果您的集群没有定义原定设置容量提供程序策略，但您已将一个或多个自动扩缩组容量提供程序添加到集群中，则选中**使用自定义（高级）**选项，且您需要手动定义策略。
  + 如果您的集群没有定义原定设置容量提供程序策略，并且没有向集群添加容量提供程序，则会选择 Fargate 启动类型。
+ 默认的部署故障检测默认选项是使用 **Amazon ECS 部署断路器**选项和**故障时回滚**选项。

  有关更多信息，请参阅 [Amazon ECS 部署断路器如何检测故障](deployment-circuit-breaker.md)。
+ 决定是否希望 Amazon ECS 自动增加或减少服务中所需的任务数。有关信息，请参阅[自动扩缩 Amazon ECS 服务](service-auto-scaling.md)。
+ 如果您需要一个应用程序来连接到在 Amazon ECS 中运行的其他应用程序，则请确定适合您的架构的选项。有关更多信息，请参阅 [互连 Amazon ECS 服务](interconnecting-services.md)。
+ 当您创建使用 Amazon ECS 断路器的服务时，Amazon ECS 会创建服务部署和服务修订。这些资源允许您查看有关服务历史记录的详细信息。有关更多信息，请参阅 [使用 Amazon ECS 服务部署查看服务历史记录](service-deployment.md)。

  有关如何使用 AWS CLI 创建服务的信息，请参阅《AWS Command Line Interface 参考》**中的 [https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html)。

  有关如何使用 AWS CloudFormation 创建服务的信息，请参阅《AWS CloudFormation 用户指南》**中的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-service.html)。

## 使用默认选项创建服务
<a name="create-default-service"></a>

您可以使用控制台快速创建和部署服务。服务具有以下配置：
+ 在与您的集群关联的 VPC 和子网中部署
+ 部署一项任务
+ 使用滚动部署
+ 将容量提供程序策略与您的默认容量提供程序一起使用
+ 使用部署断路器检测故障，并将选项设置为在出现故障时自动回滚部署

要使用默认参数部署服务，请执行以下步骤。

**创建服务（Amazon ECS 控制台）**

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

1. 在导航页面中，选择**集群**。

1. 在**集群**页面上，选择要在其中创建服务的集群。

1. 在 **Services**（服务）选项卡上，选择 **Create**（创建）。

   此时会显示**创建服务**页面。

1. 在**服务详细信息**下，执行以下操作：

   1. 对于**任务定义**，输入要使用的任务定义系列和修订版次。

   1. 对于 **Service name**（服务名称），为您的服务输入一个名称。

1. 要使用 ECS Exec 调试服务，请在**问题排查配置**下，选择**开启 ECS Exec**。

1. 在**部署配置**下，执行以下操作：

   1. 对于 **Desired tasks**（预期任务），输入要在服务中启动并保留的任务数量。

1. （可选）为了帮助确定您的服务和任务，请展开**标签**部分，然后配置您的标签。

   要让 Amazon ECS 使用集群名称和任务定义标签自动标记全部新启动的任务，选择 **Turn on Amazon ECS managed tags**（启用 Amazon ECS 托管标签），然后选择 **Task definitions**（任务定义）。

   要让 Amazon ECS 使用集群名称和服务标签自动标记全部新启动的任务，选择 **Turn on Amazon ECS managed tags**（启用 Amazon ECS 托管标签），然后选择 **Service**（服务）。

   添加或删除标签。
   + [添加标签] 选择 **Add tag**（添加标签），然后执行以下操作：
     + 对于 **Key（键）**，输入键名称。
     + 对于**值**，输入键值。
   + [删除标签] 在标签旁，选择**删除标签**。

## 使用定义的参数创建服务
<a name="create-custom-service"></a>

要使用定义的参数创建服务，请执行以下步骤。

**创建服务（Amazon ECS 控制台）**

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

1. 确定要从其中启动服务的资源。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/create-service-console-v2.html)

   此时会显示**创建服务**页面。

1. 在服务详细信息下，执行以下操作：

   1. 对于**任务定义**，输入要使用的任务定义。然后对于**修订版次**，选择要使用的修订版次。

   1. 对于 **Service name**（服务名称），为您的服务输入一个名称。

1. 对于**现有集群**，选择该集群。

   选择**创建集群**，以在新集群上运行该任务

1. 选择任务在集群基础设施中的分发方式。在**计算配置**下，选择您的选项。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/create-service-console-v2.html)

1. 要使用 ECS Exec 调试服务，请在**问题排查配置**下，选择**开启 ECS Exec**。

1. 在**部署配置**下，执行以下操作：

   1. 对于 **Service type**（服务类型），选择服务计划策略。
      + 要让计划程序只在每个活动容器实例上部署一个任务，以满足所有任务放置约束，请选择**进程守护程序**。
      + 要让计划程序在集群上放置并维护所需数量的任务，选择 **Replica**（副本）。

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

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

   1. 对于**运行状况检查宽限期**，输入在任务首次启动后，服务调度程序将忽略运行不正常的弹性负载均衡、VPC Lattice 和容器运行状况检查的时间长度（以秒为单位）。如果没有指定运行状况检查宽限期值，则使用默认值 0。

   1. 确定服务的部署类型。展开**部署选项**，然后指定以下参数。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/create-service-console-v2.html)

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

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

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

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

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

1. 如果任务定义使用 `awsvpc` 网络模式，则可以指定自定义网络配置。请展开**联网**，然后执行以下操作：

   1. 对于 **VPC**，选择要使用的 VPC。

   1. 对于 **Subnets**（子网），选择 VPC 中的一个或多个子网，任务计划程序在放置任务时会考虑这些子网。

   1. 对于**安全组**，您可以选择现有安全组或创建新安全组。要使用现有安全组，请选择该安全组并移至下一步。要创建新安全组，请选择**创建新安全组**。您必须指定安全组名称、说明，然后为该安全组添加一个或多个入站规则。

   1. 对于**公有 IP**，选择是否向任务的弹性网络接口（ENI）自动分配公有 IP 地址。

      在公有子网中运行时，可以为 AWS Fargate 任务分配一个公有 IP 地址，以便它们具有通往互联网的路由。无法使用此字段为 EC2 任务分配公有 IP。有关更多信息，请参阅 [Fargate 的 Amazon ECS 任务联网选项](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html)和[为 Amazon ECS 任务分配网络接口](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html)。

1. （可选）要使用 Service Connect 与服务进行互连，请展开 **Service Connect**，然后指定以下参数：

   1.  选择**打开 Service Connect**。

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

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

   1. （可选）指定日志配置。选择**使用日志收集**。默认选项将容器日志发送到 CloudWatch Logs。其他日志驱动程序选项都使用 AWS FireLens 进行配置。有关更多信息，请参阅 [将 Amazon ECS 日志发送到 AWS 服务或 AWS 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. （可选）要使用服务发现与服务进行互连，请展开**服务发现**，然后执行以下操作。

   1. 选择**使用服务发现**。

   1. 要使用新的命名空间，请在**配置命名空间**下选择**创建新命名空间**，然后提供命名空间名称和描述。要使用现有命名空间，请选择**选择现有命名空间**，然后选择要使用的命名空间。

   1. 提供服务发现的服务信息，例如服务的名称和描述。

   1. 要让 Amazon ECS 定期执行容器级别的运行状况检查，请选择**启用 Amazon ECS 任务运行状况传播**。

   1. 对于 **DNS 记录类型**，选择要为服务创建的 DNS 记录类型。Amazon ECS 服务发现仅支持 **A** 和 **SRV** 记录，具体取决于您的任务定义指定的网络模式。有关这些记录类型的更多信息，请参阅《Amazon Route 53 开发人员指南》**中的[支持的 DNS 记录类型](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)。
      + 如果您的服务任务指定的任务定义使用 `bridge` 或 `host` 网络模式，则只支持类型 **SRV** 记录。选择要与记录关联的容器名称和端口组合。
      + 如果您的服务任务指定的任务定义使用 `awsvpc` 网络模式，请选择 **A** 或 **SRV** 记录类型。如果您选择 **A**，请跳到下一步。如果您选择 **SRV**，请指定可以在其上找到该服务的端口或与该记录关联的容器名称和端口组合。

      对于 **TTL**，请输入 DNS 解析器和 Web 浏览器缓存记录集的时长（以秒为单位）。

1. （可选）要使用 VPC Lattice 与服务互连，请展开 **VPC Lattice**，然后执行以下操作：

   1. 选择**打开 VPC Lattice**

   1. 对于**基础设施角色**，请选择该基础设施角色。

      如果尚未创建该角色，请选择**创建基础设施角色**。

   1. 在**目标组**下，选择一个或多个目标组。您需要选择至少 1 个目标组，最多可选择 5 个目标组。要添加更多目标组，请选择**添加目标组**。为您选择的每个目标组选择**端口名称**、**协议**和**端口**。

      要删除目标组，请选择**移除**。
**注意**  
如果要添加现有目标组，则需要使用 AWS CLI。有关如何使用 AWS CLI 添加目标组的说明，请参阅《AWS Command Line Interface 参考》中的 [register-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/register-targets.html)**。
虽然 VPC Lattice 服务可以有多个目标组，但每个目标组只能添加到一个服务中。

   1. 要完成 VPC Lattice 配置，请通过 VPC Lattice 控制台在侦听器默认操作或现有 VPC Lattice 服务的规则中包含您的新目标组。有关更多信息，请参阅 [Listener rules for your VPC Lattice](https://docs.aws.amazon.com/vpc-lattice/latest/ug/listener-rules.html)。

1. （可选）要为您的服务配置负载均衡器，请展开 **Load balancing**（负载均衡）。

   选择负载均衡器。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/create-service-console-v2.html)

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

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

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

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

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

1. （可选）要使用默认策略之外的其他任务放置策略，请展开 **Task Placement**（任务放置），然后从以下选项中进行选择。

    有关更多信息，请参阅 [Amazon ECS 如何将任务放置在容器实例上](task-placement.md)。
   + **AZ 均衡分散** – 在各个可用区以及每个可用区中的各个容器实例中分配任务。
   + **AZ 均衡装填** – 在各个可用区以及具有最低可用内存的容器实例中分配任务。
   + **装填** – 根据 CPU 或内存的最低可用量来分配任务。
   + **每个主机一项任务** – 在每个容器实例中最多可放置服务的一个任务。
   + **自定义** – 定义您自己的任务放置策略。

   如果您选择了 **Custom**（自定义），请定义放置任务的算法和任务放置过程中要考虑的规则。
   + 在 **Strategy**（策略）下，对于 **Type**（类型）和 **Field**（字段），选择算法和用于该算法的实体。

     您最多可输入 5 个策略。
   + 在**约束**下，对于**类型**和**表达式**，选择要用于该约束的规则和属性。

     例如，要设置在 T2 实例上放置任务的约束，对于 **Expression**（表达式），输入 **attribute:ecs.instance-type =\$1 t2.\$1**。

     您最多可输入 10 个约束。

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

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

1. 要使用 ECS Exec 调试服务，请在**问题排查配置**下，选择**开启 ECS Exec**。

1. （可选）为了帮助确定您的服务和任务，请展开**标签**部分，然后配置您的标签。

   要让 Amazon ECS 使用集群名称和任务定义标签自动标记全部新启动的任务，选择**开启 Amazon ECS 托管标签**，然后对于**从中传播标签**，选择**任务定义**。

   要让 Amazon ECS 使用集群名称和服务标签自动标记全部新启动的任务，选择**开启 Amazon ECS 托管标签**，然后对于**从中传播标签**，选择**服务**。

   添加或删除标签。
   + [添加标签] 选择 **Add tag**（添加标签），然后执行以下操作：
     + 对于 **Key（键）**，输入键名称。
     + 对于**值**，输入键值。
   + [删除标签] 在标签旁，选择**删除标签**。

1. 选择**创建**。

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

以下是创建服务之后的额外操作。
+ 配置预测式自动扩缩，这将检查流量中的历史负载数据。有关更多信息，请参阅 [使用历史模式通过预测式扩缩来扩展 Amazon ECS 服务](predictive-auto-scaling.md)。
+ 跟踪部署并查看使用 Amazon ECS 断路器的服务的服务历史记录。有关更多信息，请参阅 [使用 Amazon ECS 服务部署查看服务历史记录](service-deployment.md)。