Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

创建服务

在创建 Amazon ECS 服务时,您将指定基本参数,用于定义构成服务的内容以及服务的行为方式。这些参数将创建一个服务定义。

您还可以选择配置其他功能,例如 Elastic Load Balancing 负载均衡器,用于在服务中的多个容器间分布流量。有关更多信息,请参阅 服务负载均衡。您必须验证容器实例是否能接收来自您的负载均衡器的流量。您可以允许流量从负载均衡器的安全组流到容器实例上的所有端口,以确保流量可到达使用动态分配的端口的任何容器。

配置基本服务参数

所有服务都需要一些基本配置参数,用于定义服务(如要使用的任务定义、应运行服务的集群、应为服务放置的任务数等);这些参数称为服务定义。有关服务定义中定义的参数的更多信息,请参阅服务定义参数

该过程介绍如何创建包含必需的基本服务定义参数的服务。在配置了这些参数后,您可以创建您的服务,或继续进行可选的服务定义配置,如配置服务以使用负载均衡器。

配置基本服务定义参数

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航栏上,选择集群所在的区域。

  3. 在导航窗格中,选择 Task Definitions,然后选择用于创建服务的任务定义。

  4. Task Definition name 页面上,选择用于创建服务的任务定义的修订。

  5. 查看任务定义,然后依次选择操作创建服务

  6. 配置服务页面上,相应地填写以下参数:

    • 启动类型:选择您的服务是应在 Fargate 基础设施上还是应在您维护的 Amazon EC2 容器实例上运行任务。

    • 平台版本:如果您选择了 Fargate 启动类型,请选择您希望使用的平台版本。

    • 群集:选择要在其中创建您的服务的群集。

    • 服务名称:为您的服务键入唯一名称。

    • 任务数:键入要在您的群集中启动并保留的任务数量。

      注意

      如果您的启动类型为 EC2,并且您的任务定义在容器实例上使用静态主机端口映射,则至少需要一个具有指定端口且在群集中可用于服务中的每个任务的容器实例。如果您的任务定义使用动态主机端口映射和 bridge 网络模式,则此限制不适用。有关详细信息,请参阅 portMappings

    • 最小正常百分比:以服务的预期任务数的百分比形式指定部署期间必须保持在 RUNNING 状态的服务任务数的下限(向上取整到最近的整数)。例如,如果您的服务的预期任务数为 4,最小正常百分比为 50%,则计划程序可能在开始两个新任务之前停止两个现有任务以释放集群容量。服务任务的状态如果为 RUNNING,而且未使用负载均衡器,即为运行正常。服务任务的状态如果为 RUNNING 且确实使用了负载均衡器,同时托管任务的容器实例被负载均衡器报告为正常,即为运行正常。在控制台中,最小正常百分比的默认值为 50%,在 AWS CLI 或软件开发工具包中为 100%。

    • 最大百分比:以服务的预期任务数的百分比形式指定部署期间允许处于 RUNNINGPENDING 状态的服务任务数的上限(向下取整到最近的整数)。例如,如果您的服务的预期任务数为 4,最大百分比值为 200%,则计划程序将在停止 4 个旧任务之前开始 4 个新任务(前提是具有执行此操作所需的集群资源)。最大百分比的默认值为 200%。

  7. (可选) 如果您选择了 EC2 启动类型,则对于任务放置,您可以使用任务放置策略和约束指定如何放置任务。从以下选项中进行选择:

    • AZ Balanced Spread - 在各个可用区以及每个可用区中的各个容器实例中分配任务。

    • AZ Balanced BinPack - 在各个可用区以及具有最低可用内存的容器实例中分配任务。

    • BinPack - 根据 CPU 或内存的最低可用量来分配任务。

    • One Task Per Host - 在每个容器实例中最多可放置服务的一个任务。

    • Custom - 定义您自己的任务放置策略。有关示例,请参阅 Amazon ECS 任务放置

    有关更多信息,请参阅 Amazon ECS 任务放置

  8. 选择下一步以继续。

配置网络

VPC 和安全组

如果服务的任务定义使用 awsvpc 网络模式,则您必须为您的服务配置 VPC、子网和安全组设置。有关更多信息,请参阅 awsvpc 网络模式的任务联网

要为您的服务配置 VPC 和安全组设置,请执行以下操作:

  1. 对于群集 VPC,如果您选择了 EC2 启动类型,请选择您的容器实例所在的 VPC。如果您选择了 Fargate 启动类型,请选择 Fargate 任务应使用的 VPC。确保您选择的 VPC 未配置为需要专用硬件租赁,因为 Fargate 任务对此不予支持。

  2. 对于 Subnets,请为您的服务任务放置选择可用子网。

    重要

    awsvpc 网络模式仅支持私有子网。由于任务不接收公有 IP 地址,因此出站 Internet 访问需要 NAT 网关,并且入站 Internet 流量应通过负载均衡器进行路由。

  3. 对于 Security groups,已经为您的服务任务创建了一个安全组,允许来自 Internet 的 HTTP 流量 (0.0.0.0/0)。要编辑此安全组的名称或规则,或选择现有安全组,请选择 Edit,然后修改安全组设置。

  4. 对于自动分配公有 IP,选择是否让您的任务收到公有 IP 地址。如果您使用的是 Fargate 任务,需要向该任务的弹性网络接口分配一个公有 IP 地址,还需要一个到 Internet 的路由,或一个可以将请求路由到 Internet 的 NAT 网关,以便于该任务拉取容器映像。

(可选) 运行状况检查宽限期

如果您的服务的任务需要一段时间才能启动和响应 Elastic Load Balancing 运行状况检查,则您最长可以指定 7,200 秒的运行状况检查宽限期,在此期间,ECS 服务计划程序将忽略运行状况检查状态。此宽限期可防止 ECS 服务计划程序将由于时间不足尚未启动的任务标记为不正常并停止它们。您的服务只有配置为使用负载均衡器时此设置才适用。

  • 运行状况检查宽限期:输入时间段 (以秒为单位),在任务首次启动后,Amazon ECS 服务计划程序在此时间段内将忽略不正常的 Elastic Load Balancing 目标运行状况检查。

(可选)将您的服务配置为使用负载均衡器

如果您没有将服务配置为使用负载均衡器,则可以选择 None 作为负载均衡器类型,然后转到下一部分:(可选)将您的服务配置为使用 服务 Auto Scaling

如果您已配置可用的 Elastic Load Balancing 负载均衡器,则可通过以下过程将其附加到您的服务,您也可以配置新的负载均衡器。有关更多信息,请参阅创建负载均衡器

注意

您必须在执行这些过程之前创建 Elastic Load Balancing 负载均衡器资源。

首先,您必须选择要用于服务的负载均衡器类型。然后,您可将服务配置为使用负载均衡器。

选择负载均衡器类型

  1. 如果您尚未这样做,请按照配置基本服务参数中的基本服务创建过程操作。

  2. 对于负载均衡器类型,选择要用于您的服务的负载均衡器类型:

    应用程序负载均衡器

    允许容器使用动态主机端口映射,这使您能够在单个容器实例上使用同一端口放置多个任务。在单个负载均衡器上,多个服务可以通过基于规则的路由和路径使用同一个侦听器端口。

    网络负载均衡器

    允许容器使用动态主机端口映射,这使您能够在单个容器实例上使用同一端口放置多个任务。在单个负载均衡器上,多个服务可以通过基于规则的路由使用同一个侦听器端口。

    传统负载均衡器

    需要静态主机端口映射(每个容器实例只允许一个任务);不支持基于规则的路由和路径。

    建议您对 Amazon ECS 服务使用应用程序负载均衡器,以便利用对这些服务可用的高级功能。

  3. 对于 Select IAM role for service,选择 Create new role 以便为您的服务创建新角色,或选择对该服务使用现有 IAM 角色(默认情况下,此角色为 ecsServiceRole)。

    重要

    如果您选择使用现有 ecsServiceRole IAM 角色,则必须验证此角色是否拥有使用 应用程序负载均衡器 和 传统负载均衡器 的适当权限。有关更多信息,请参阅 Amazon ECS 服务计划程序 IAM 角色

  4. 对于 ELB Name,选择要用于您的服务的负载均衡器的名称。此处只有与您之前选择的负载均衡器类型对应的负载均衡器可见。

  5. 下一个步骤因服务的负载均衡器类型而异。如果您选择了应用程序负载均衡器,请按照配置应用程序负载均衡器中的步骤操作。如果您选择了网络负载均衡器,请按照配置网络负载均衡器中的步骤操作。如果您选择了传统负载均衡器,请按照配置传统负载均衡器中的步骤操作。

配置应用程序负载均衡器

  1. 对于用于负载均衡的容器,从任务定义中选择负载均衡器应将流量分发到的容器和端口组合,然后选择添加到负载均衡器

  2. 对于 Listener port,选择您在创建 应用程序负载均衡器中创建的侦听器的侦听器端口和协议(如果适用);或者选择 create new 以创建新侦听器,然后输入端口号并在 Listener protocol 中选择端口协议。

  3. 对于 Target group name,选择您在创建 应用程序负载均衡器中创建的目标组(如果适用),或选择 create new 以创建新目标组。

    重要

    如果您的服务的任务定义使用 awsvpc 网络模式 (为 Fargate 启动类型所需),则您的目标组必须使用 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。

  4. (可选)如果您选择创建新目标组,请按照下面所示填写以下字段:

    • 对于 Target group name,输入您的目标组的名称。

    • 对于 Target group protocol,输入用于将流量路由至您的任务的协议。

    • 对于 Path pattern,如果您的侦听器没有任何现有规则,则将使用默认路径模式 (/)。如果您的侦听器已经有默认规则,您必须输入与要发送到您的服务目标组的流量匹配的路径模式。例如,如果您的服务是名为 web-app 的 Web 应用程序,并且您希望与 http://my-elb-url/web-app 匹配的流量路由到您的服务,您应输入 /web-app* 作为您的路径模式。有关更多信息,请参阅 Application Load Balancer 用户指南 中的 ListenerRules

    • 对于 Health check path,输入负载均衡器应将运行状况检查 ping 发送到的路径。

  5. 配置完 应用程序负载均衡器 之后,选择下一步

配置网络负载均衡器

  1. 对于用于负载均衡的容器,从任务定义中选择负载均衡器应将流量分发到的容器和端口组合,然后选择添加到负载均衡器

  2. 对于 Listener port,选择您在创建 应用程序负载均衡器中创建的侦听器的侦听器端口和协议(如果适用);或者选择 create new 以创建新侦听器,然后输入端口号并在 Listener protocol 中选择端口协议。

  3. 对于 Target group name,选择您在创建 应用程序负载均衡器中创建的目标组(如果适用),或选择 create new 以创建新目标组。

    重要

    如果您的服务的任务定义使用 awsvpc 网络模式 (为 Fargate 启动类型所需),则您的目标组必须使用 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。

  4. (可选)如果您选择创建新目标组,请按照下面所示填写以下字段:

    • 对于 Target group name,输入您的目标组的名称。

    • 对于 Target group protocol,输入用于将流量路由至您的任务的协议。

    • 对于 Health check path,输入负载均衡器应将运行状况检查 ping 发送到的路径。

  5. 配置完 网络负载均衡器 之后,选择下一步

配置传统负载均衡器

  1. Health check portHealth check protocolHealth check path 字段是使用您在创建传统负载均衡器中配置的值(如果适用)预先填充的。您可在 Amazon EC2 控制台中更新这些设置。

  2. 对于 Container for ELB health check,选择用于发送运行状况检查的容器。

  3. 配置完 传统负载均衡器 之后,选择下一步

(可选) 将您的服务配置为使用 Service Discovery

Amazon ECS 服务可以选择启用 service discovery 集成,这使得您的服务可以通过 DNS 搜索。有关更多信息,请参阅 Service Discovery

配置 service discovery

  1. 如果您尚未这样做,请按照配置基本服务参数中的基本服务创建过程操作。

  2. Configure network (配置网络) 页面上,选择 Enable service discovery integration (启用 service discovery 集成)。

  3. 对于 Namespace (命名空间),选择现有 Amazon Route 53 命名空间 (如果已有),否则请选择 create new private namespace (创建新的私有命名空间)。

  4. 如果创建新的命名空间,为 Namespace name (命名空间名称) 输入您命名空间的描述性名称。这是用于 Amazon Route 53 托管区域的名称。

  5. 对于 Configure service discovery service (配置 service discovery 服务),请选择创建新 service discovery 服务或者选择现有 service discovery 服务。

  6. 如果创建新的 service discovery 服务,为 Service discovery name (服务发现名称) 输入您的 service discovery 服务的描述性名称。它用作要创建的 DNS 记录的前缀。

  7. 如果您希望为 service discovery 服务启用运行状况检查,请选择 Enable ECS task health propagation (启用 ECS 任务运行状况传播)。

  8. 对于 DNS record type (DNS 记录类型),选择要为服务创建的 DNS 记录类型。Amazon ECS service discovery 仅支持 A 和 SRV 记录,具体取决于您的任务定义指定的网络模式。有关这些记录类型的更多信息,请参阅 DnsRecord

    • 如果您的服务任务指定的任务定义使用 bridgehost 网络模式,则只支持类型 SRV 记录。选择要与记录关联的容器名称和端口组合。

    • 如果您的服务任务指定的任务定义使用 awsvpc 网络模式,请选择 A 或 SRV 记录类型。如果选择了类型 A DNS 记录,请跳到下一步。如果选择了类型 SRV,请指定可以在其上找到该服务的端口或与该记录关联的容器名称和端口组合。

  9. 对于 TTL,输入资源记录缓存存续时间 (TTL),以秒计算。此值确定 DNS 解析程序和 Web 浏览器将记录集缓存多久。

  10. 选择下一步

(可选)将您的服务配置为使用 服务 Auto Scaling

您可以选择将 Amazon ECS 服务配置为使用 Auto Scaling 根据 CloudWatch 警报上调或下调其预期数量。

Amazon ECS 服务 Auto Scaling支持以下类型的扩展策略:

  • 目标跟踪扩展策略 - 根据特定指标的目标值,增加或减少服务运行的任务数。这与恒温器保持家里温度的方式类似。您选择一个温度,恒温器将完成所有其他工作。

  • 步进扩展策略 - 根据一组扩展调整,增加或减少服务运行的任务数,这些调整称为步进调整,将根据警报严重程度发生变化。

有关更多信息,请参阅 服务 Auto Scaling

配置基本 服务 Auto Scaling 参数

  1. 如果您尚未这样做,请按照配置基本服务参数中的基本服务创建过程操作。

  2. 设置 Auto Scaling 页面上,选择配置服务 Auto Scaling 以调整您的服务的预期计数

  3. 对于 Minimum number of tasks,输入 服务 Auto Scaling 要使用的任务数的下限。您的服务的预期数量不会自动调整到低于此数量。

  4. 对于 Desired number of tasks (预期任务数),此字段是使用您之前输入的值预先填充的。此时您可更改服务的预期数量,但此值必须介于此页面上指定的最小任务数和最大任务数之间。

  5. 对于 Maximum number of tasks,输入 服务 Auto Scaling 要使用的任务数的上限。您的服务的预期数量不会自动调整到高于此数量。

  6. 对于 IAM role for Service Auto Scaling,选择一个 IAM 角色来授权 Application Auto Scaling 服务代表您调整您的服务的预期数量。如果您之前未创建此类角色,请选择 Create new role,系统将为您创建此角色。为了方便将来参考,为您创建的角色名为 ecsAutoscaleRole。有关更多信息,请参阅 Amazon ECS 服务 Auto Scaling IAM 角色

  7. 以下过程提供了用于为您的服务创建目标跟踪或分步扩展策略的步骤。选择您需要的扩展策略类型。

为服务配置目标跟踪扩展策略

以下步骤将帮助您创建目标跟踪扩展策略和可用于为您的服务触发扩展活动的 CloudWatch 警报。您可以创建扩展警报来增加服务的预期数量,并创建缩减警报来减少服务的预期数量。

  1. 对于 Scaling policy type (扩展策略类型) 选择 Target tracking (目标跟踪)。

  2. 对于 Policy name (策略名称),请键入策略的描述性名称。

  3. 对于 ECS service metric (ECS 服务指标),请选择您要跟踪的指标。

  4. 对于 Target value (目标值),请输入您希望策略保持的指标值。

  5. 对于 Scale-out cooldown period (扩展冷却时间),请输入在一个扩展活动完成后、另一个扩展活动开始之前的时间量 (秒)。在此期间,已启动的资源不影响 Auto Scaling 组指标。

  6. 对于 Scale-in cooldown period (缩减冷却时间),请输入在一个缩减活动完成之后、另一个缩减活动开始之前的时间量 (秒)。在此期间,已启动的资源不影响 Auto Scaling 组指标。

  7. (可选) 如果您希望为此策略禁用缩减操作,请选择 Disable scale-in (禁用缩减)。这样,您稍后就可以根据需要为缩减创建单独的扩展策略。

  8. 选择下一步

为您的服务配置分步扩展策略

以下步骤将帮助您创建分步扩展策略和可用于为您的服务触发扩展活动的 CloudWatch 警报。您可以创建 Scale out 警报来增加服务的预期数量,并创建 Scale in 警报来减少服务的预期数量。

  1. 对于 Scaling policy type (扩展策略类型) 选择 Step scaling (分步扩展)。

  2. 对于 Policy name (策略名称),请键入策略的描述性名称。

  3. 对于 Execute policy when,选择要用于向上或向下扩展您的服务的 CloudWatch 警报。

    您可使用之前创建的现有 CloudWatch 警报,也可选择创建新警报。Create new alarm 工作流程可让您创建基于要创建的服务的 CPUUtilizationMemoryUtilization 的 CloudWatch 警报。要使用其他指标,您可在 CloudWatch 控制台中创建一个警报,然后返回本向导以选择该警报。

  4. (可选)如果您选择创建新警报,请完成以下步骤。

    1. 对于 Alarm name,为您的警报输入一个描述性名称。例如,如果您的警报应在服务 CPU 使用率超过 75% 时触发,则可调用警报 service_name-cpu-gt-75

    2. 对于 ECS service metric,选择要用于警报的服务指标。有关这些服务利用率指标的更多信息,请参阅服务利用率

    3. 对于 Alarm threshold,输入以下信息以配置您的警报:

      • 为警报选择 CloudWatch 统计数据(默认值 Average 适用于很多情况)。有关更多信息,请参阅 Amazon CloudWatch 用户指南 中的统计数据

      • 为您的警报选择比较运算符并输入比较运算符检查所针对的值(例如,>75)。

      • 输入触发警报前的连续时间段的数量和总长度。例如,2 个连续的 5 分钟时间段需要 10 分钟才会触发警报。由于您的 Amazon ECS 任务可快速扩展和缩减,所以应考虑使用少量的连续时间段和较短的时间段长度以尽快响应警报。

    4. 选择 Save 以保存您的警报。

  5. 对于 Scaling action,输入以下信息以配置您的服务对警报的响应方式:

    • 选择为您的服务增加预期数量、减少预期数量还是设置具体预期数量。

    • 如果您选择增加或减少任务,请输入触发扩展操作后要增加或减少的任务数(或现有任务的百分比)。如果您选择设置预期数量,请输入在触发扩展操作时应为您的服务设置的预期数量。

    • (可选)如果您选择增加或减少任务,请选择将之前的值用作整数还是现有预期数量的百分比值。

    • 输入您的步进扩展调整的下限。默认情况下,对于您的第一次扩展操作,此值是触发您的警报的指标数量。例如,以下扩展操作将在 CPU 使用率高于 75% 时增加 100% 的现有预期数量。

       扩展活动示例
  6. (可选) 您可重复 步骤 5 以便为单个警报配置多个扩展操作 (例如,在 CPU 使用率介于 75 和 85% 之间时增加 1 个任务,在 CPU 使用率超过 85% 时增加 2 个任务)。

  7. (可选)如果您选择增大或减小现有预期数量的百分比,请在 Add tasks in increments of N task(s) 中输入最小增量值。

  8. 对于 Cooldown period,输入两次扩展操作之间的秒数。

  9. Scale in 策略重复 步骤 1步骤 8,然后选择 Save 以保存您的 服务 Auto Scaling 配置。

  10. 选择下一步

查看并创建您的服务

在配置基本服务定义参数并选择将您的服务配置为使用负载均衡器后,您可以查看您的配置,然后选择创建服务以完成服务创建。

注意

在创建服务后,在服务定义中指定的目标组 ARN 或负载均衡器名称、容器名称和容器端口是不可变的。您无法添加、删除或更改现有服务的负载均衡器配置。如果您更新服务的任务定义,则创建服务时指定的容器名称和容器端口必须保留在任务定义中。