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

服务定义参数

服务定义将定义要用于您的服务的任务定义、该任务要运行的实例化的数量以及要与您的任务关联的负载均衡器(如果有)。

{ "cluster": "", "serviceName": "", "taskDefinition": "", "loadBalancers": [ { "targetGroupArn": "", "loadBalancerName": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "desiredCount": 0, "clientToken": "", "launchType": "EC2", "platformVersion": "", "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "memberOf", "expression": "" } ], "placementStrategy": [ { "type": "random", "field": "" } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "ENABLED" } }, "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA" }

注意

您可使用以下 AWS CLI 命令创建上述服务定义模板。

aws ecs create-service --generate-cli-skeleton

您可在服务定义中指定以下参数。

cluster

要在其上运行您的服务的集群的短名称或完整 Amazon 资源名称 (ARN)。如果您未指定集群,则采用 default 集群。

serviceName

您的服务的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。 一个集群中的服务不得重名,但您可在一个区域或多个区域的多个集群中拥有名称相似的服务。

taskDefinition

要在您的服务中运行的任务定义的 familyrevision (family:revision) 或完整 ARN。如果未指定 revision,将使用最新的 ACTIVE 修订。

loadBalancers

表示要用于您的服务的负载均衡器的负载均衡器对象。当前,对每个服务只能使用一个负载均衡器或目标组。在创建服务后,在服务定义中指定的负载均衡器名称或目标组 ARN、容器名称和容器端口是不可变的。

对于 传统负载均衡器,此对象必须包含负载均衡器名称、容器名称 (与在容器定义中显示的相同) 和容器端口才能从负载均衡器进行访问。将此服务中的任务放在容器实例上后,容器实例将注册到在此处指定的负载均衡器。

对于 应用程序负载均衡器 和 网络负载均衡器,此对象必须包含负载均衡器目标组 ARN、容器名称 (与在容器定义中显示的相同) 和容器端口才能从负载均衡器进行访问。将此服务中的任务放在容器实例上后,容器实例和端口组合将注册为在此处指定的目标组中的目标。

targetGroupArn

与服务关联的 Elastic Load Balancing 目标组的完整 Amazon 资源名称 (ARN)。

loadBalancerName

负载均衡器的名称。

containerName

要与负载均衡器关联的容器的名称(与在容器定义中显示的相同)。

containerPort

要与负载均衡器关联的容器上的端口。此端口必须对应于服务的任务定义中的 containerPort。您的容器实例必须允许端口映射的 hostPort 上的入口流量。

serviceRegistries

服务的服务发现配置的详细信息。有关更多信息,请参阅 Service Discovery

registryArn

服务注册表的 Amazon 资源名称 (ARN)。当前支持的服务注册表是 Amazon Route 53 自动命名。有关更多信息,请参阅服务

port

在服务发现服务指定了一个 SRV 记录时使用的端口值。如果使用 awsvpc 网络模式和 SRV 记录,则需要此字段。

containerName

已在任务定义中指定的容器名称值,用于服务发现服务。如果服务任务指定的任务定义使用 bridgehost 网络模式,则必须从任务定义中指定 containerNamecontainerPort 组合。如果服务任务指定的任务定义使用 code 网络模式,并且使用类型 SRV DNS 记录,则必须指定 containerNamecontainerPort 组合或 port 值,但不能同时指定二者。

containerPort

已在任务定义中指定的端口值,用于服务发现服务。如果服务任务指定的任务定义使用 bridgehost 网络模式,则必须从任务定义中指定 containerNamecontainerPort 组合。如果服务任务指定的任务定义使用 awsvpc 网络模式,并且使用类型 SRV DNS 记录,则必须指定 containerNamecontainerPort 组合或 port 值,但不能同时指定二者。

desiredCount

要在您的集群中放置并保持运行的指定任务定义的实例化数量。

clientToken

您为确保请求的幂等性而提供的唯一、区分大小写的标识符。最多允许 32 个 ASCII 字符。

launchType

运行您的服务的启动类型。如果没有指定任何类型,将默认使用 EC2。有关更多信息,请参阅 Amazon ECS 启动类型

platformVersion

运行您的服务的平台版本。如果没有指定任何版本,将默认使用最新版本 (LATEST)。

AWS Fargate 平台版本用来指 Fargate 任务基础设施的特定运行时环境。在运行任务或创建服务的过程中指定 LATEST 平台版本时,您将获得可用于任务的最新平台版本。当您扩展服务时,这些任务将收到在服务的当前部署中指定的平台版本。有关更多信息,请参阅 AWS Fargate 平台版本

注意

不会使用 EC2 启动类型为任务指定平台版本。

role

允许 Amazon ECS 代表您调用负载均衡器的 IAM 角色的名称或完整 Amazon 资源名称 (ARN)。当您要将负载均衡器用于服务时才需要此参数。如果您指定 role 参数,还必须指定具有 loadBalancers 参数的负载均衡器对象。

如果您的指定角色的路径并非 /,则必须指定完整角色 ARN(推荐)或将此路径作为角色名称的前缀。例如,如果名称为 bar 的角色的路径为 /foo/,您应指定 /foo/bar 作为角色名称。有关更多信息,请参阅 IAM 用户指南 中的易记名称和路径

deploymentConfiguration

可选部署参数,用于控制部署期间运行的任务数以及停止和开始任务的顺序。

maximumPercent

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

如果您使用的是守护程序服务类型,则 maximumPercent 应保持在 100%,这是默认值。

部署期间的最大任务数为 desiredCount 乘以 maximumPercent/100(向下取整到最近的整数值)。

minimumHealthyPercent

minimumHealthyPercentdesiredCount 的百分比形式表示部署期间必须保持在 RUNNING 状态的服务任务数的下限(向上取整到最近的整数)。此参数使您不必使用额外的集群容量就能部署。例如,如果您的服务的任务 desiredCount 为 4,minimumHealthyPercent 为 50%,则计划程序可能在开始两个新任务之前停止两个现有任务以释放集群容量。服务任务的状态如果为 RUNNING,而且使用负载均衡器,即为运行正常。服务任务的状态如果为 RUNNING确实使用了负载均衡器,同时托管负载均衡器的容器实例报告为正常,即为运行正常。minimumHealthyPercent 的副本服务的默认值在 AWS 管理控制台 中为 50%,对于 AWS CLI、AWS 开发工具包和 API 为 100%。minimumHealthyPercent 的守护程序服务的默认值对于 AWS CLI、AWS 开发工具包和 API 为 0%,对于 AWS 管理控制台 为 50%。

部署期间的最小正常任务数为 desiredCount 乘以 minimumHealthyPercent/100 (向上取整到最近的整数值)。

placementConstraints

您的服务中的任务使用的一组放置约束对象。对于每个任务,您可以指定多达 10 种约束 (此限制包括任务定义中的约束和这些在运行时指定的约束)。如果您使用的是 Fargate 启动类型,则不支持任务放置约束。

type

约束类型。使用 distinctInstance 确保特定组中的每个任务在不同的容器实例上运行。使用 memberOf 将选择限制为一组有效的候选。任务定义不支持值 distinctInstance

expression

应用于约束的集群查询语言表达式。请注意,如果约束类型为 distinctInstance,您不能指定表达式。有关更多信息,请参阅 集群查询语言

placementStrategy

您的服务中的任务所用的放置策略对象。对于每项服务,您最多可以指定 4 种策略。

type

放置策略的类型。random 放置策略将任务随机放置在可用的候选上。spread 放置策略基于 field 参数将任务均匀地放置在可用候选上。binpack 策略将任务放置在可用资源数量最少(使用 field 参数指定)的可用候选上。例如,如果对内存使用装填,则任务会放置到剩余内存最少但仍够运行该任务的实例上。

field

应用放置策略的字段。对于 spread 放置策略,有效值为 instanceId (或具有相同效果的 host) 或应用于容器实例的任何平台或自定义属性,如 attribute:ecs.availability-zone。对于 binpack 放置策略,有效值为 cpumemory。对于 random 放置策略,该字段未用。

networkConfiguration

服务的网络配置。对于使用 awsvpc 网络模式接收其自己的弹性网络接口的任务定义,此参数是必需的,其他网络模式不支持此参数。如果使用 Fargate 启动类型,则需要 awsvpc 网络模式。有关更多信息,请参阅 awsvpc 网络模式的任务联网

awsvpcConfiguration

表示任务或服务的子网和安全组的对象。

subnets

与任务或服务相关联的子网。

securityGroups

与任务或服务相关联的安全组。如果您未指定安全组,将使用 VPC 的默认安全组。

assignPublicIP

任务的弹性网络接口是否接收公有 IP 地址。

healthCheckGracePeriodSeconds

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

schedulingStrategy

要使用的计划策略。有关更多信息,请参阅 服务计划程序概念

There are two service scheduler strategies available:

  • REPLICA—The replica scheduling strategy places and maintains the desired number of tasks across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement strategies and constraints to customize task placement decisions. For more information, see 副本.

  • DAEMON—The daemon scheduling strategy deploys exactly one task on each active container instance that meets all of the task placement constraints that you specify in your cluster. When using this strategy, there is no need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. For more information, see 守护程序.

    注意

    Fargate tasks do not support the DAEMON scheduling strategy.