服务定义参数 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

服务定义参数

服务定义用于定义如何运行您的 Amazon ECS 服务。可以在服务定义中指定以下参数。

启动类型

launchType

类型:字符串

有效值:EC2 | FARGATE

必需:否

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

如果指定 launchType,必须省略 capacityProviderStrategy 参数。

容量提供程序策略

capacityProviderStrategy

类型:对象数组

必需:否

要用于服务的容量提供程序策略。

容量提供程序策略由一个或多个容量提供程序以及要分配给它们的 baseweight 组成。容量提供程序必须与要在容量提供程序策略中使用的集群相关联。PutClusterCapacityProviders API 用于将容量提供程序与集群相关联。只能使用具有 ACTIVEUPDATING 状态的容量提供程序。

如果指定 capacityProviderStrategy,必须省略 launchType 参数。如果没有指定 capacityProviderStrategylaunchType,将使用集群的 defaultCapacityProviderStrategy

如果指定使用 Auto Scaling 组的容量提供程序,则必须已创建该容量提供程序。可以通过 CreateCapacityProvider API 操作创建新的容量提供程序。

要使用 AWS Fargate 容量提供程序,请指定 FARGATEFARGATE_SPOT 容量提供程序。AWS Fargate 容量提供程序对所有账户都可用,只需要与要使用的集群相关联。

PutClusterCapacityProviders API 操作用于在创建集群后更新集群的可用容量提供程序列表。

capacityProvider

类型:字符串

必需:是

容量提供程序的简称或完整 ARN。

weight

类型:整数

有效范围:介于 0 到 1000 之间的整数。

必需:否

权重值指明应使用指定容量提供程序的已启动任务总数的相对百分比。

例如,如果您的策略包含两个容量提供程序,并且两个容量提供程序的权重均为 1,那么当满足基准时,这些任务将在两个容量提供程序之间均匀分配。按照相同的逻辑,如果您为 capacityProviderA 指定权重 1,并为 capacityProviderB 指定权重 4,则运行的每一个任务均使用 capacityProviderA,四个任务将使用 capacityProviderB

base

类型:整数

有效范围:介于 0 到 100000 万之间的整数。

必需:否

基准值指明在指定的容量提供程序上至少运行多少个任务。只有一个容量提供程序的容量提供程序策略可以定义基准。

任务定义

taskDefinition

类型:字符串

必需:否

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

使用滚动更新 (ECS) 部署控制器时,必须指定任务定义。

Platform Version

platformVersion

类型:字符串

必需:否

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

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

注意

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

Cluster

cluster

类型:字符串

必需:否

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

服务名称

serviceName

类型:字符串

必需:是

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

计划策略

schedulingStrategy

类型:字符串

有效值:REPLICA | DAEMON

必需:否

要使用的计划策略。如果未指定计划策略,则使用 REPLICA 策略。有关更多信息,请参阅服务计划程序概念

有两种服务计划程序策略可用:

  • REPLICA—副本计划策略在群集上放置并维护所需数量的任务。默认情况下,服务计划程序可在多个可用区之间分布任务。您可以使用任务放置策略和约束自定义任务放置决策。有关更多信息,请参阅副本

  • DAEMON—守护程序计划策略只在每个活动容器实例上部署一个任务,以满足您在群集中指定的所有任务放置约束。当使用此策略时,无需指定所需的任务数、任务放置策略,也无需使用服务 Auto Scaling 策略。有关更多信息,请参阅守护程序

    注意

    Fargate 任务不支持 DAEMON 计划策略。

预期数量

desiredCount

类型:整数

必需:否

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

如果使用 REPLICA 计划策略,则需要此参数。如果服务使用 DAEMON 计划策略,则此参数是可选的。

部署配置

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 状态后等待 40 秒,然后将任务计入最低正常运行百分比总计。

  • 如果任务具有一个或多个已定义运行状况检查的基本容器,服务计划程序将等待任务达到正常运行状态,然后将其计入最低正常运行总计百分比。当某个任务中的所有基本容器都通过了其运行状况检查时,该任务将被视为正常运行。服务计划程序可以等待的时间由容器运行状况检查设置决定。有关更多信息,请参阅 运行状况检查

对于 使用负载均衡器的服务,应注意以下事项:

  • 如果任务不包含定义了运行状况检查的基本容器,服务计划程序将等待负载均衡器目标组运行状况检查返回正常运行状态,然后将任务计入最低正常运行百分比总计。

  • 如果任务不包含定义了运行状况检查的基本容器,服务计划程序将等待任务达到正常运行状态并且负载均衡器目标组运行状况检查返回正常运行状态,然后将任务计入最低正常运行百分比总计。

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

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

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

部署控制器

deploymentController

类型:对象

必需:否

要用于该服务的部署控制器。如果未指定部署控制器,则使用 ECS 控制器。有关更多信息,请参阅Amazon ECS 部署类型

type

类型:字符串

有效值:ECS | CODE_DEPLOY | EXTERNAL

必需:是

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

ECS

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

CODE_DEPLOY

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

EXTERNAL

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

任务放置

placementConstraints

类型:对象数组

必需:否

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

type

类型:字符串

必需:否

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

expression

类型:字符串

必需:否

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

placementStrategy

类型:对象数组

必需:否

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

type

类型:字符串

有效值:random | spread | binpack

必需:否

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

field

类型:字符串

必需:否

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

Tags

tags

类型:对象数组

必需:否

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

key

类型:字符串

长度约束:最小长度为 1。长度上限为 128。

必需:否

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

value

类型:字符串

长度约束:最小长度为 0。长度上限为 256。

必需:否

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

enableECSManagedTags

类型:布尔值

有效值:true | false

必需:否

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

propagateTags

类型:字符串

有效值:TASK_DEFINITION | SERVICE

必需:否

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

网络配置

networkConfiguration

类型:对象

必需:否

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

awsvpcConfiguration

类型:对象

必需:否

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

subnets

类型:字符串数组

必需:是

与任务或服务相关联的子网。每个 awsvpcConfiguration 可以指定的子网数量限制为 16 个。

securityGroups

类型:字符串数组

必需:否

与任务或服务相关联的安全组。如果您未指定安全组,将使用 VPC 的默认安全组。每个 awsvpcConfiguration 可以指定的安全组数量限制为 5 个。

assignPublicIP

类型:字符串

有效值:ENABLED | DISABLED

必需:否

任务的弹性网络接口是否接收公有 IP 地址。如果未指定值,则使用默认值 DISABLED

healthCheckGracePeriodSeconds

类型:整数

必需:否

在任务进入 RUNNING 状态后,Amazon ECS 服务计划程序应忽略不正常的 Elastic Load Balancing 目标运行状况检查、容器运行状况检查以及 Route 53 运行状况检查的时间段(以秒为单位)。您的服务只有配置为使用负载均衡器时此设置才适用。如果您的服务定义了负载均衡器,并且您没有指定运行状况检查宽限期值,则使用默认值 0

如果您的服务的任务需要一段时间才能启动和响应运行状况检查,则您最长可以指定 2,147,483,647 秒的运行状况检查宽限期,在此期间,ECS 服务计划程序将忽略运行状况检查状态。此宽限期可防止 ECS 服务计划程序将由于时间不足尚未启动的任务标记为不正常并停止它们。

loadBalancers

类型:对象数组

必需:否

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

在创建服务后,在服务定义中指定的负载均衡器名称或目标组 ARN、容器名称和容器端口是不可变的。

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

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

targetGroupArn

类型:字符串

必需:否

与服务关联的 Elastic Load Balancing 目标组的完整 ARN。

仅在使用 应用程序负载均衡器 或 网络负载均衡器 时指定目标组 ARN。如果您使用的是 传统负载均衡器,则应忽略目标组 ARN。

loadBalancerName

类型:字符串

必需:否

要与该服务关联的负载均衡器的名称。

负载均衡器名称仅在使用 传统负载均衡器 时指定。如果您正在使用 应用程序负载均衡器 或 网络负载均衡器,则应忽略负载均衡器名称参数。

containerName

类型:字符串

必需:否

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

containerPort

类型:整数

必需:否

要与负载均衡器关联的容器上的端口。此端口必须对应于服务中的任务所使用任务定义中的 containerPort。对于使用 EC2 启动类型的任务,容器实例必须允许端口映射的 hostPort 上的入口流量。

role

类型:字符串

必需:否

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

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

重要

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

serviceRegistries

类型:对象数组

必需:否

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

registryArn

类型:字符串

必需:否

服务注册表的 ARN。当前支持的服务注册表是 AWS Cloud Map。有关更多信息,请参阅 AWS Cloud Map 开发人员指南 中的使用服务

port

类型:整数

必需:否

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

containerName

类型:字符串

必需:否

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

containerPort

类型:整数

必需:否

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

客户端令牌

clientToken

类型:字符串

必需:否

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

服务定义模板

下面显示了 Amazon ECS 服务定义的 JSON 表示形式。

{ "cluster": "", "serviceName": "", "taskDefinition": "", "loadBalancers": [ { "targetGroupArn": "", "loadBalancerName": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "desiredCount": 0, "clientToken": "", "launchType": "FARGATE", "capacityProviderStrategy": [ { "capacityProvider": "", "weight": 0, "base": 0 } ], "platformVersion": "", "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "spread", "field": "" } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "ENABLED" } }, "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "CODE_DEPLOY" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "SERVICE" }

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

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