Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 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": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "ENABLED" } }, "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "ECS" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }

注意

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

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

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

cluster

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

serviceName

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

必需:是

taskDefinition

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

loadBalancers

表示要用于您的服务的负载均衡器的负载均衡器对象。对于使用 应用程序负载均衡器 或 网络负载均衡器 的服务,最多可将 5 个目标组附加到一个服务。

在创建服务后,在服务定义中指定的负载均衡器名称或目标组 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 组合。如果服务任务指定的任务定义使用 awsvpc 网络模式,并且使用类型 SRV DNS 记录,则必须指定 containerNamecontainerPort 组合或 port 值,但不能同时指定二者。

containerPort

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

desiredCount

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

clientToken

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

launchType

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

platformVersion

正在运行服务中任务的平台版本。仅为使用 Fargate 启动类型的任务指定平台版本。如果没有指定任何版本,将默认使用最新版本 (LATEST)。

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

注意

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

role

允许 Amazon ECS 代表您调用负载均衡器的 IAM 角色的名称或完整 ARN。仅当您在服务中使用负载均衡器且任务定义未使用 awsvpc 网络模式时,才允许使用此参数。如果您指定 role 参数,还必须指定具有 loadBalancers 参数的负载均衡器对象。

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

重要

如果您的账户已创建 Amazon ECS 服务相关角色,则默认情况下会为您的服务使用该角色,除非您在此处指定一个角色。如果您的任务定义使用 awsvpc 网络模式(在这种情况下,您不应在此处指定角色),则需要服务相关角色。有关更多信息,请参阅对 Amazon ECS 使用服务相关角色

deploymentConfiguration

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

maximumPercent

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

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

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

如果服务使用的是蓝/绿 (CODE_DEPLOY) 或 EXTERNAL 部署类型和使用 EC2 启动类型的任务,最大百分比值将设置为默认值并在容器实例处于 DRAINING 状态时用于定义服务中保持在 RUNNING 状态的任务数的上限。如果服务中的任务使用 Fargate 启动类型,将不会使用最大百分比值,尽管该值会在描述您的服务时返回。

minimumHealthyPercent

如果服务使用滚动更新 (ECS) 部署类型, minimumHealthyPercentdesiredCount 的百分比形式表示您的服务中在部署期间必须保持在 RUNNING 状态的任务数的下限(向上取整到最近的整数)。此参数使您不必使用额外的集群容量就能部署。例如,如果您的服务的任务 desiredCount 为 4,minimumHealthyPercent 为 50%,则该服务计划程序可能在开始两个新任务之前停止两个现有任务以释放集群容量。

服务任务的状态如果为 RUNNING,而且 使用负载均衡器,即为运行正常。

在以下情况下,使用负载均衡器的服务的任务被视为运行正常:处于 RUNNING 状态、已通过所有已定义的运行状况检查、在负载均衡器或目标组上报告为正常运行。

minimumHealthyPercent 的副本服务的默认值在 AWS 管理控制台中为 50%,对于 AWS CLI、AWS 开发工具包和 API 为 100%。使用 DAEMON 服务计划的默认 minimumHealthyPercent 值对于 AWS CLI、AWS 开发工具包和 API 为 0%,对于 AWS 管理控制台为 50%。

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

如果服务使用的是蓝/绿 (CODE_DEPLOY) 或 EXTERNAL 部署类型和使用 EC2 启动类型的任务,最小正常百分比值将设置为默认值并在容器实例处于 DRAINING 状态时用于定义服务中保持在 RUNNING 状态的任务数的下限。如果服务中的任务使用 Fargate 启动类型,将不会使用最小正常运行百分比值,尽管该值会在描述您的服务时返回。

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 目标运行状况检查、容器运行状况检查和 Route 53 运行状况检查的时间段(以秒为单位)。您的服务只有配置为使用负载均衡器时此设置才适用。如果您的服务的任务需要一段时间才能启动和响应运行状况检查,则您最长可以指定 2,147,483,647 秒的运行状况检查宽限期,在此期间,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.

deploymentController

要用于该服务的部署控制器。有关更多信息,请参阅 Amazon ECS 部署类型

type

要使用的部署控制器类型。部署控制器有三种类型:

ECS

滚动更新 (ECS) 部署类型涉及将当前运行版本的容器替换为最新版本。Amazon ECS 在滚动更新期间在服务中添加或删除的容器数量可以通过调整服务部署期间允许的运行正常的任务的最小和最大数量进行控制,如 deploymentConfiguration 中指定。

CODE_DEPLOY

蓝/绿 (CODE_DEPLOY) 部署类型使用 CodeDeploy 提供技术支持的蓝/绿部署模型,从而让您可以先验证服务的新部署,然后再向其发送生产流量。

EXTERNAL

外部部署类型让您可以使用任何第三方部署控制器以便完全控制 Amazon ECS 服务的部署过程。

tags

您应用于服务以帮助您对其进行分类和组织的元数据。每个标签都包含您定义的一个键和一个可选值。在服务被删除时,标签也会随之被删除。标签键的最大字符长度为 128 个字符,标签值的最大长度为 256 个字符。有关更多信息,请参阅 标记您的 Amazon ECS 资源

key

构成标签的键-值对的一个部分。键是一种常见的标签,行为类似于更具体的标签值的类别。

value

构成标签的键-值对的可选部分。值充当标签类别(键)中的描述符。

enableECSManagedTags

指定是否要为服务中的任务启用 Amazon ECS 托管标签。有关更多信息,请参阅标记资源以便于计费

propagateTags

指定是否要将标签从任务定义或服务复制到服务中的任务。如果未指定值,则不会复制标签。只能在创建服务的过程中将标签复制到服务中的任务。要在创建服务以后将标签添加到任务,请使用 TagResource API 操作。