Amazon ECS 服务定义参数
服务定义用于定义如何运行您的 Amazon ECS 服务。可以在服务定义中指定以下参数。
启动类型
launchType
-
类型:字符串
有效值:
EC2
|FARGATE
|EXTERNAL
必需:否
运行您的服务的启动类型。如果没有指定启动类型,将默认使用默认的
capacityProviderStrategy
。有关更多信息,请参阅 Amazon ECS 启动类型。如果指定
launchType
,必须省略capacityProviderStrategy
参数。
容量提供程序策略
capacityProviderStrategy
-
类型: 对象数组
必需:否
要用于服务的容量提供程序策略。
容量提供程序策略由一个或多个容量提供程序以及要分配给它们的
base
和weight
组成。容量提供程序必须与要在容量提供程序策略中使用的集群相关联。PutClusterCapacityProviders API 用于将容量提供程序与集群相关联。只能使用具有ACTIVE
或UPDATING
状态的容量提供程序。如果指定
capacityProviderStrategy
,必须省略launchType
参数。如果没有指定capacityProviderStrategy
或launchType
,将使用集群的defaultCapacityProviderStrategy
。如果要指定使用自动扩缩组的容量提供程序,则必须先创建该容量提供程序。可以通过 CreateCapacityProvider API 操作创建新的容量提供程序。
要使用 Amazon Fargate 容量提供程序,请指定
FARGATE
或FARGATE_SPOT
容量提供程序。Amazon Fargate 容量提供程序对所有账户都可用,只需要与要使用的集群相关联。PutClusterCapacityProviders API 操作用于在创建集群后更新集群的可用容量提供程序列表。
capacityProvider
-
类型:字符串
必需:是
容量提供程序的短名称或完整的 Amazon 资源名称(ARN)。
weight
-
类型:整数
有效范围:介于 0 到 1000 之间的整数。
必需:否
权重值指明使用指定容量提供程序的已启动任务总数的相对百分比。
例如,假定您的策略包含两个容量提供程序,并且两个容量提供程序的权重均为 1。当满足基准时,任务会在两个容量提供程序之间均匀分配。按照相同的逻辑,假定您指定 capacityProviderA 的权重为 1,并指定 capacityProviderB 的权重为 4,那么,对于使用 capacityProviderA 运行的每个任务,都会有四个任务使用 capacityProviderB。
base
-
类型:整数
有效范围:介于 0 到 100000 万之间的整数。
必需:否
基准值指明在指定的容量提供程序上至少运行多少个任务。在一个容量提供程序策略中,只能有一个容量提供程序策略定义了基准。
任务定义
taskDefinition
-
类型:字符串
必需:否
要在您的服务中运行的任务定义的
family
和revision
(family:revision
) 或完整 Amazon Resource Name (ARN)。如果未指定revision
,则会使用指定系列的最新ACTIVE
版本。使用滚动更新 (
ECS
) 部署控制器时,必须指定任务定义。
平台操作系统
platformFamily
-
类型:字符串
必需:条件
原定设置:Linux
对于在 Fargate 上托管的 Amazon ECS 服务,此参数是必需的。
对于在 Amazon EC2 上托管的 Amazon ECS 服务,可忽略此参数。
运行服务的容器上的操作系统。有效值为
LINUX
、WINDOWS_SERVER_2019_FULL
、WINDOWS_SERVER_2019_CORE
、WINDOWS_SERVER_2022_FULL
和WINDOWS_SERVER_2022_CORE
。为服务指定的每个任务的
platformFamily
值都必须与服务platformFamily
值匹配。例如,如果您将platformFamily
设置为WINDOWS_SERVER_2019_FULL
,则所有任务的platformFamily
值必须是WINDOWS_SERVER_2019_FULL
。
平台版本
platformVersion
-
类型:字符串
必需:否
正在运行服务中任务的平台版本。仅为使用 Fargate 启动类型的任务指定平台版本。如果没有指定任何版本,将默认使用最新版本 (
LATEST
)。Amazon Fargate 平台版本用于指代 任务基础设施的特定运行时环境。在运行任务或创建服务的过程中指定
LATEST
平台版本时,您将获得可用于任务的最新平台版本。当您扩展服务时,这些任务将收到在服务的当前部署中指定的平台版本。有关更多信息,请参阅 适用于 Amazon ECS 的 Fargate 平台版本。注意
不会使用 EC2 启动类型为任务指定平台版本。
集群
cluster
-
类型:字符串
必需:否
要在其上运行您的服务的集群的短名称或完整 Amazon Resource Name (ARN)。如果您未指定集群,则采用
default
集群。
服务名称
serviceName
-
类型:字符串
必需:是
您的服务的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。一个集群中的服务名称必须唯一,但是您可以为一个区域或多个区域中多个集群中的服务提供相似的名称。
计划策略
schedulingStrategy
-
类型:字符串
有效值:
REPLICA
|DAEMON
必需:否
要使用的计划策略。如果未指定计划策略,则使用
REPLICA
策略。有关更多信息,请参阅 Amazon ECS 服务。有两种服务计划程序策略可用:
预期数量
desiredCount
-
类型:整数
必需:否
要在您的服务中放置并保持运行的指定任务定义的实例化数量。
如果使用
REPLICA
计划策略,则需要此参数。如果服务使用DAEMON
计划策略,则此参数是可选的。
部署配置
deploymentConfiguration
-
类型:对象
必需:否
可选部署参数,用于控制部署期间运行的任务数以及停止和开始任务的顺序。
maximumPercent
-
类型:整数
必需:否
如果服务使用滚动更新 (
ECS
) 部署类型,maximumPercent
参数表示在部署期间允许处于RUNNING
、STOPPING
或PENDING
状态的服务任务数上限。其表示为向下取整到最近整数的desiredCount
的百分比。您可以使用此参数定义部署批次大小。例如,如果服务使用REPLICA
服务调度器且任务的desiredCount
为 4,maximumPercent
值为 200%,则调度器会在停止 4 个旧任务之前开始 4 个新任务。这样做的前提是具有执行此操作所需的集群资源。使用REPLICA
服务计划程序的服务的默认maximumPercent
值为 200%。如果服务使用的是
DAEMON
服务调度器类型,则maximumPercent
应保持在 100%。这是默认值。部署期间的最大任务数为
desiredCount
乘以maximumPercent
/100(向下取整到最近的整数值)。如果服务使用蓝/绿 (
CODE_DEPLOY
) 或EXTERNAL
部署类型,并且具有使用 EC2 启动类型的任务,则最大百分比值将设置为默认值。该值用于定义当容器实例处于DRAINING
状态时该服务中仍保持在RUNNING
状态的任务数上限。注意
如果服务使用蓝/绿 (
CODE_DEPLOY
) 或EXTERNAL
部署类型并且具有使用 EC2 启动类型的任务,您无法为该服务指定自定义maximumPercent
值。如果服务中的任务使用 Fargate 启动类型,则不会使用最大百分比值,但会在描述服务时返回该值。
minimumHealthyPercent
-
类型:整数
必需:否
如果服务使用滚动更新(
ECS
)部署类型,minimumHealthyPercent
则表示在部署期间必须处于RUNNING
状态的服务任务数下限。其表示为向上取整到最近整数的desiredCount
的百分比。您可以使用此参数进行部署,而无需使用额外的集群容量。例如,如果服务的任务desiredCount
为 4,minimumHealthyPercent
为 50%,则该服务计划程序可能会在开始 2 个新任务之前停止 2 个现有任务以释放集群容量。对于不使用负载均衡器的服务,请注意以下事项:
-
如果某个服务中任务内的所有基本容器都通过了运行状况检查,则该服务将被视为正常运行。
-
如果任务没有已定义运行状况检查的基本容器,服务调度器会在任务达到
RUNNING
状态后等待 40 秒,然后将其计入最低正常运行百分比总计。 -
如果任务具有一个或多个已定义运行状况检查的基本容器,服务计划程序会等待任务达到正常运行状态,然后将其计入最低正常运行百分比总计。当某个任务中的所有基本容器都通过了其运行状况检查时,该任务将被视为正常运行。服务计划程序可以等待的时间由容器运行状况检查设置决定。有关更多信息,请参阅 运行状况检查。
对于确实使用负载均衡器的服务,请注意以下事项:
-
如果任务不包含已定义运行状况检查的基本容器,服务计划程序会等待负载均衡器目标组运行状况检查返回正常运行状态,然后将任务计入最低正常运行百分比总计。
-
如果任务具有一个已定义运行状况检查的基本容器,服务计划程序会等待任务达到正常运行状态且负载均衡器目标组运行状况检查返回正常运行状态,然后将任务计入最低正常运行百分比总计。
minimumHealthyPercent
的副本服务的默认值为 100%。使用DAEMON
服务调度的原定设置minimumHealthyPercent
值对于 Amazon CLI、Amazon 开发工具包和 API 为 0%,对于 Amazon Web Services Management Console 为 50%。部署期间的最小正常任务数为
desiredCount
乘以minimumHealthyPercent
/100(向上取整到最近的整数值)。如果服务使用蓝/绿 (
CODE_DEPLOY
) 或EXTERNAL
部署类型,并且正在运行使用 EC2 启动类型的任务,则最小正常运行百分比值将设置为默认值。该值用于定义当容器实例处于DRAINING
状态时该服务中仍保持在RUNNING
状态的任务数下限。注意
如果服务使用蓝/绿 (
CODE_DEPLOY
) 或EXTERNAL
部署类型并且具有使用 EC2 启动类型的任务,您无法为该服务指定自定义maximumPercent
值。如果服务使用蓝色/绿色 (
CODE_DEPLOY
) 或EXTERNAL
部署类型,并且正在运行使用 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
,则不能指定表达式。有关更多信息,请参阅 创建表达式,以为 Amazon ECS 任务定义容器实例。
placementStrategy
-
类型: 对象数组
必需:否
您的服务中的任务所用的放置策略对象。对于每项服务,您最多可以指定 4 种策略。
type
-
类型:字符串
有效值:
random
|spread
|binpack
必需:否
放置策略的类型。
random
放置策略将任务随机放置在可用的候选上。spread
放置策略基于field
参数将任务均匀地放置在可用候选上。binpack
策略将任务放置在可用资源数量最少(使用field
参数指定)的可用候选上。例如,如果对内存使用装填,则会将任务放置到剩余内存最少但足以运行该任务的实例上。 field
-
类型:字符串
必需:否
应用放置策略的字段。对于
spread
放置策略,有效值为instanceId
(或具有相同效果的host
)或应用于容器实例的任何平台或自定义属性,例如attribute:ecs.availability-zone
。对于binpack
放置策略,有效值为cpu
和memory
。对于random
放置策略,该字段未用。
标签
-
类型: 对象数组
必需:否
您应用于服务以帮助您对其进行分类和组织的元数据。每个标签都包含您定义的一个键和一个可选值。在服务被删除时,标签也会随之被删除。该服务最多可应用 50 个标签。有关更多信息,请参阅 为 Amazon ECS 资源添加标签。
key
-
类型:字符串
长度限制:长度下限为 1。长度上限为 128。
必需:否
构成标签的键-值对的一个部分。键是一种常见的标签,行为类似于更具体的标签值的类别。
value
-
类型:字符串
长度约束:最小长度为 0。长度上限为 256。
必需:否
构成标签的键-值对的可选部分。值充当标签类别(键)中的描述符。
-
类型:布尔值
有效值:
true
|false
必需:否
指定是否要为该服务内的任务使用 Amazon ECS 托管标签。如果未指定值,则默认值为
false
。有关更多信息,请参阅 使用标签记账。 propagateTags
-
类型:字符串
有效值:
TASK_DEFINITION
|SERVICE
必需:否
指定是否要将标签从任务定义或服务复制到服务中的任务。如果未指定值,则不会复制标签。只能在创建服务的过程中将标签复制到服务中的任务。要在创建服务或任务以后将标签添加到任务,请使用
TagResource
API 操作。
网络配置
networkConfiguration
-
类型:对象
必需:否
服务的网络配置。对于使用
awsvpc
网络模式接收其自己的弹性网络接口的任务定义,此参数是必需的,但其他网络模式不支持该参数。如果使用 Fargate 启动类型,则需要awsvpc
网络模式。有关 Amazon EC2 启动类型联网的更多信息,请参阅EC2 启动类型的 Amazon ECS 任务联网选项。有关 Fargate 启动类型联网的更多信息,请参阅 Fargate 任务联网。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 服务计划程序将由于时间不足尚未启动的任务标记为不正常并停止它们。
如果您不使用 Elastic Load Balancing,我们建议您在任务定义运行状况检查参数中使用
startPeriod
。有关更多信息,请参阅使用容器运行状况检查确定 Amazon ECS 任务运行状况。 loadBalancers
-
类型: 对象数组
必需:否
表示要用于您的服务的负载均衡器的负载均衡器对象。对于使用 Application Load Balancer 或 Network Load Balancer 的服务,最多可将 5 个目标组附加到服务。
创建服务后,无法从 Amazon Web Services Management Console 更改负载均衡器配置。您只能使用 Amazon Copilot、Amazon CloudFormation、Amazon CLI 或 SDK 来修改
ECS
滚动部署控制器的负载均衡器配置,而不是 Amazon CodeDeploy 蓝/绿或外部控制器。当您添加、更新或删除负载均衡器配置时,Amazon ECS 会使用更新后的 Elastic Load Balancing 配置启动新部署。这将导致任务注册到负载均衡器或从负载均衡器取消注册。我们建议您在更新 Elastic Load Balancing 配置之前在测试环境中对此进行验证。有关如何修改配置的信息,请参阅 Amazon Elastic Container Service API 参考中的 UpdateService。对于 Application Load Balancers 和 Network Load Balancers,此对象必须包含负载平衡器目标组ARN、容器名称(如容器定义中所示)以及要从负载平衡器访问的容器端口。将此服务中的任务放置于容器实例之后,容器实例和端口组合会注册为指定目标组中的目标。
targetGroupArn
-
类型:字符串
必需:否
与服务关联的 Elastic Load Balancing 目标组的完整 Amazon 资源名称(ARN)。
目标组 ARN 仅在使用 Application Load Balancer 或 Network Load Balancer时指定。
loadBalancerName
-
类型:字符串
必需:否
要与该服务关联的负载均衡器的名称。
如果您使用的是 Application Load Balancer 或 Network Load Balancer,则会省略负载均衡器名称参数。
containerName
-
类型:字符串
必需:否
要与负载均衡器关联的容器的名称(与在容器定义中显示的相同)。
containerPort
-
类型:整数
必需:否
要与负载均衡器关联的容器上的端口。此端口必须对应于服务中的任务所使用任务定义中的
containerPort
。对于使用 EC2 启动类型的任务,容器实例必须允许端口映射的hostPort
上的入站流量。
role
-
类型:字符串
必需:否
允许 Amazon ECS 代表您调用负载均衡器的 IAM 角色的名称或完整 ARN 。仅当为服务使用具有单个目标组的负载平衡器,并且任务定义不使用
awsvpc
网络模式时,才允许使用此参数。如果您指定role
参数,则还必须指定具有loadBalancers
参数的负载均衡器对象。如果您的指定角色的路径并非
/
,则必须指定完整角色 ARN(推荐)或将此路径作为角色名称的前缀。例如,如果名称为bar
的角色的路径为/foo/
,您应指定/foo/bar
作为角色名称。有关更多信息,请参阅 IAM 用户指南中的友好名称和路径。重要
如果您的账户已创建 Amazon ECS 服务相关角色,则默认情况下会为您的服务使用该角色,除非您在此处指定一个角色。如果您的任务定义使用 awsvpc 网络模式(在这种情况下,您不应在此处指定角色),则需要服务相关角色。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色。
serviceConnectConfiguration
-
类型:对象
必需:否
此服务的配置用于发现和连接到服务,以及由命名空间内的其他服务发现和连接。
有关更多信息,请参阅 使用 Service Connect 连接具有短名称的 Amazon ECS 服务。
enabled
-
类型:布尔值
必需:是
指定是否将 Service Connect 与此服务结合使用。
namespace
-
类型:字符串
必需:否
与 Service Connect 结合使用的 Amazon Cloud Map 命名空间的 Amazon 资源名称(ARN)短名称或全称。命名空间必须与 Amazon ECS 服务和集群在同一个 Amazon Web Services 区域 内。命名空间的类型不影响 Service Connect。有关 Amazon Cloud Map 的更多信息,请参阅《Amazon Cloud Map 开发人员指南》中的使用服务。
services
-
类型: 对象数组
必需:否
一组 Service Connect 服务对象。这些是其他 Amazon ECS 服务用来连接到此服务的名称和别名(也称为端点)。
对于作为命名空间成员的“客户端”Amazon ECS 服务,只有连接到命名空间内的其他服务时,才需要此字段。例如,接受来自附加到服务的负载均衡器或通过其他方式所传入请求的前端应用程序。
对象从任务定义中选择一个端口,为 Amazon Cloud Map 服务分配一个名称,并为客户端应用程序分配别名(也称为端点)数组和端口,以供客户端应用程序引用此服务。
portName
-
类型:字符串
必需:是
portName
必须与该 Amazon ECS 服务的任务定义中所有容器中的portMappings
的其中一个的name
相匹配。 discoveryName
-
类型:字符串
必需:否
discoveryName
是 Amazon ECS 为该 Amazon ECS 服务创建的新 Amazon Cloud Map 服务的名称。此名称在 Amazon Cloud Map 命名空间内必须是唯一的。如果未指定此字段,则使用
portName
。 clientAliases
-
类型: 对象数组
必需:否
此 Service Connect 服务的客户端别名列表。您可以使用这些列表来分配供客户端应用程序使用的名称。您可以在此列表中包含的最大客户端别名数为 1。
每个别名(“端点”)都是 DNS 名称和端口号,其他 Amazon ECS 服务(“客户端”)可以使用该 DNS 名称和端口号连接到此服务。
每个名称和端口组合在命名空间内必须是唯一的。
这些名称是在客户端服务的每项任务中配置的,而不是在 Amazon Cloud Map 中配置的。解析这些名称的 DNS 请求不会离开任务,也不会计入每个弹性网络接口每秒的 DNS 请求的配额。
port
-
类型:整数
必需:是
Service Connect 代理的侦听端口号。此端口在同一个命名空间内的所有任务中都可用。
为避免更改客户端 Amazon ECS 服务中的应用程序,请将其设置为客户端应用程序默认使用的同一个端口。
dnsName
-
类型:字符串
必需:否
dnsName
是您在客户端任务的应用程序中用来连接到此服务的名称。该名称必须是有效的 DNS 标签。如果未指定该字段,则值默认为
discoveryName.namespace
。如果未指定discoveryName
,则使用任务定义中的portName
。为避免更改客户端 Amazon ECS 服务中的应用程序,请将其设置为客户端应用程序默认使用的同一个名称。例如,一些常用名称是
database
、db
或数据库的小写名称,例如mysql
或redis
。
ingressPortOverride
-
类型:整数
必需:否
(可选)Service Connect 代理侦听的端口号。
使用此字段的值绕过此应用程序的任务定义中的已命名
portMapping
中指定的端口号上的流量代理,然后在 Amazon VPC 安全组中使用该代理,以允许流量进入该 Amazon ECS 服务的代理。在
awsvpc
模式下,默认值是容器端口号,该端口号在此应用程序的任务定义的已命名portMapping
中指定。在bridge
模式下,默认值是 Service Connect 代理的动态临时端口。 logConfiguration
-
类型:LogConfiguration 对象
必需:否
这定义了 Service Connect 代理日志的发布位置。在意外事件期间使用日志进行调试。此配置在此 Amazon ECS 服务的每个任务的 Service Connect 代理容器中设置
logConfiguration
参数。没有在任务定义中指定代理容器。我们建议您使用与该 Amazon ECS 服务任务定义的应用程序容器相同的日志配置。对于 FireLens,这是应用程序容器的日志配置。使用
fluent-bit
或fluentd
容器映像的不是 FireLens 日志路由器容器。
serviceRegistries
-
类型: 对象数组
必需:否
服务的服务发现配置的详细信息。有关更多信息,请参阅 使用服务发现连接具有 DNS 名称的 Amazon ECS 服务。
registryArn
-
类型:字符串
必需:否
服务注册表的 Amazon 资源名称(ARN)。当前支持的服务注册表是 Amazon Cloud Map。有关更多信息,请参阅 Amazon Cloud Map 开发人员指南中的使用服务。
port
-
类型:整数
必需:否
在服务发现服务指定 SRV 记录时使用的端口值。如果使用
awsvpc
网络模式和 SRV 记录,则需要此字段。 containerName
-
类型:字符串
必需:否
用于服务发现服务的容器名称值。此值可在任务定义中指定。如果服务任务指定的任务定义使用
bridge
或host
网络模式,则必须从任务定义中指定containerName
和containerPort
组合。如果服务任务指定的任务定义使用awsvpc
网络模式,并且使用类型 SRV DNS 记录,则必须指定containerName
和containerPort
组合或port
值,但不能同时指定二者。 containerPort
-
类型:整数
必需:否
用于服务发现服务的端口值。此值可在任务定义中指定。如果服务任务指定的任务定义使用
bridge
或host
网络模式,则必须从任务定义中指定containerName
和containerPort
组合。如果服务任务指定的任务定义使用awsvpc
网络模式,并且使用类型 SRV DNS 记录,则必须指定containerName
和containerPort
组合或port
值,但不能同时指定二者。
客户端令牌
clientToken
-
类型:字符串
必需:否
用于确保请求的幂等性而提供的唯一、区分大小写的标识符。最长可为 32 个 ASCII 字符。
卷配置
volumeConfigurations
-
类型:对象
必需:否
用于为服务管理的任务而创建卷的配置。为服务中的每项任务创建卷。只有在任务定义中标记为
configuredAtLaunch
的卷才能使用此对象进行配置。此对象是将 Amazon EBS 数据卷附加到服务管理的任务所必需的。有关更多信息,请参阅 Amazon EBS 卷。name
-
类型:字符串
必需:是
创建或更新服务时配置的卷的名称。最多可允许 255 个字母(大写和小写字母)、数字、下划线(
_
)和连字符(-
)。此值必须与任务定义中指定的卷名称相匹配。 managedEBSVolume
-
类型:对象
必需:否
创建或更新服务时附加到服务管理的任务的 Amazon EBS 卷的卷配置。
encrypted
-
类型:布尔值
必需:否
有效值:
true
|false
指定是否对附加到服务管理的任务的 Amazon EBS 卷进行加密。如果您在默认情况下为账户开启了 Amazon EBS 加密,则此设置将被覆盖,且卷将被加密。有关默认 EBS 加密的更多信息,请参阅《Amazon EBS 用户指南》中的 Enable Amazon EBS encryption by default。
kmsKeyId
-
类型:字符串
必需:否
用于 Amazon EBS 加密的 Amazon Key Management Service(Amazon KMS)密钥的标识符。如果未指定此参数,则使用 Amazon EBS 的 Amazon KMS key。如果指定了
KmsKeyId
,加密状态必须为true
。您可以使用以下任一项指定 KMS 密钥:
-
密钥 ID – 例如
1234abcd-12ab-34cd-56ef-1234567890ab
。 -
密钥别名 – 例如
alias/ExampleAlias
。 -
密钥 ARN – 例如
arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab
。 -
别名 ARN – 例如
arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias
。
重要
Amazon 异步验证 KMS 密钥的身份。因此,如果您指定了无效的 ID、别名或 ARN,则操作可能会显示成功,但最终会失败。有关更多信息,请参阅排查 Amazon EBS 卷附加问题。
-
volumeType
-
类型:字符串
必需:否
有效值:
gp2
|gp3
|io1
|io2
|sc1
|st1
|standard
EBS 卷的类型。有关卷类型的更多信息,请参阅《Amazon EBS 用户指南》中的 Amazon EBS volume types。默认卷类型为
gp3
。注意
配置为附加到 Fargate 任务的 Amazon EBS 卷不支持
standard
卷类型。 sizeInGiB
-
类型:整数
必需:否
有效范围:介于 1 到 16384 之间的整数
EBS 卷的大小,以吉字节(GiB)为单位。如果您没有提供快照 ID 来配置要附加的卷,则必须提供大小值。如果使用快照配置卷以进行附加,则默认值为快照大小。然后,您可以指定大于或等于快照大小的大小。
对于
gp2
和gp3
卷类型,有效范围为 1-16384。对于
io1
和io2
卷类型,有效范围为 4-16384。对于
st1
和sc1
卷类型,有效范围为 125-16384。对于
standard
卷类型,有效范围为 1-1024。 snapshotId
-
类型:字符串
必需:否
用于创建附加到 ECS 任务的新卷的现有 EBS 卷的快照 ID。
iops
-
类型:整数
必需:否
每秒 I/O 操作数 (IOPS)。对于
gp3
、io1
和io2
卷,这代表为卷预置的 IOPS 数。对于gp2
卷,此值表示卷的基准性能和卷积累用于突增情况的 I/O 积分的速度。此参数是io1
和io2
卷的必需参数。gp2
、st1
、sc1
或standard
卷不支持此参数。对于
gp3
卷,值的有效范围为 3000 到 16000。对于
io1
卷,值的有效范围为 100 到 64000。对于
io2
卷,值的有效范围为 100 到 64000。 throughput
-
类型:整数
必需:否
为附加到服务管理的任务的卷预调配的吞吐量。
重要
仅
gp3
卷支持此参数。 roleArn
-
类型:字符串
必需:是
基础设施 Amazon Identity and Access Management(IAM)角色的 Amazon 资源 ARN(ARN),它为您的任务提供 Amazon ECS 管理 Amazon EBS 资源的权限。有关更多信息,请参阅 Amazon ECS 基础设施 IAM 角色。
tagSpecifications
-
类型:对象
必需:否
应用于 Amazon EBS 卷管理的服务的标签规范。
resourceType
-
类型:字符串
必需:是
有效值:
volume
要在创建时标记的资源类型。
-
类型: 对象数组
必需:否
您应用于卷以帮助您对其进行分类和组织的元数据。每个标签都包含您定义的一个键和一个可选值。
AmazonECSCreated
和AmazonECSManaged
是 Amazon ECS 代表您添加的保留标签,因此您最多可以自己指定 48 个标签。在卷被删除时,标签也会随之被删除。有关更多信息,请参阅 为 Amazon ECS 资源添加标签。key
-
类型:字符串
长度限制:长度下限为 1。长度上限为 128。
必需:否
构成标签的键-值对的一个部分。键是一种常见的标签,行为类似于更具体的标签值的类别。
value
-
类型:字符串
长度约束:最小长度为 0。长度上限为 256。
必需:否
构成标签的键-值对的可选部分。值充当标签类别(键)中的描述符。
propagateTags
-
类型:字符串
有效值:
TASK_DEFINITION
|SERVICE
|NONE
必需:否
指定是否要将标签从任务定义或服务复制到卷中。如果指定
NONE
或未指定任何值,则不会复制标签。
fileSystemType
-
类型:字符串
必需:否
有效值:
xfs
|ext3
|ext4
|NTFS
卷上的文件系统的类型。卷的文件系统类型会决定在卷中存储和检索数据的方式。对于从快照创建的卷,必须指定创建快照时卷使用的相同文件系统类型。如果文件系统类型不匹配,则任务将无法启动。
Linux 的有效值为
xfs
、ext3, and ext4
。附加到 Linux 任务的卷的默认值为XFS
。Windows 的有效值为
NTFS
。对于挂载到 Windows 任务的卷,默认值为NTFS
。
服务定义模板
下面显示了 Amazon ECS 服务定义的 JSON 表示形式。
Amazon EC2 启动类型
{ "cluster": "", "serviceName": "", "taskDefinition": "", "loadBalancers": [ { "targetGroupArn": "", "loadBalancerName": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "desiredCount": 0, "clientToken": "", "launchType": "EC2", "capacityProviderStrategy": [ { "capacityProvider": "", "weight": 0, "base": 0 } ], "platformVersion": "", "role": "", "deploymentConfiguration": { "deploymentCircuitBreaker": { "enable": true, "rollback": true }, "maximumPercent": 0, "minimumHealthyPercent": 0, "alarms": { "alarmNames": [ "" ], "enable": true, "rollback": true } }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "DISABLED" } }, "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION", "enableExecuteCommand": true, "serviceConnectConfiguration": { "enabled": true, "namespace": "", "services": [ { "portName": "", "discoveryName": "", "clientAliases": [ { "port": 0, "dnsName": "" } ], "ingressPortOverride": 0 } ], "logConfiguration": { "logDriver": "journald", "options": { "KeyName": "" }, "secretOptions": [ { "name": "", "valueFrom": "" } ] } }, "volumeConfigurations": [ { "name": "", "managedEBSVolume": { "encrypted": true, "kmsKeyId": "", "volumeType": "", "sizeInGiB": 0, "snapshotId": "", "iops": 0, "throughput": 0, "tagSpecifications": [ { "resourceType": "volume", "tags": [ { "key": "", "value": "" } ], "propagateTags": "NONE" } ], "roleArn": "", "filesystemType": "" } } ] }
Fargate 启动类型
{ "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": "", "platformFamily": "", "role": "", "deploymentConfiguration": { "deploymentCircuitBreaker": { "enable": true, "rollback": true }, "maximumPercent": 0, "minimumHealthyPercent": 0, "alarms": { "alarmNames": [ "" ], "enable": true, "rollback": true } }, "placementStrategy": [ { "type": "binpack", "field": "" } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "DISABLED" } }, "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION", "enableExecuteCommand": true, "serviceConnectConfiguration": { "enabled": true, "namespace": "", "services": [ { "portName": "", "discoveryName": "", "clientAliases": [ { "port": 0, "dnsName": "" } ], "ingressPortOverride": 0 } ], "logConfiguration": { "logDriver": "journald", "options": { "KeyName": "" }, "secretOptions": [ { "name": "", "valueFrom": "" } ] } }, "volumeConfigurations": [ { "name": "", "managedEBSVolume": { "encrypted": true, "kmsKeyId": "", "volumeType": "", "sizeInGiB": 0, "snapshotId": "", "iops": 0, "throughput": 0, "tagSpecifications": [ { "resourceType": "volume", "tags": [ { "key": "", "value": "" } ], "propagateTags": "NONE" } ], "roleArn": "", "filesystemType": "" } } ] }
您可以使用以下 Amazon CLI 命令创建此服务定义模板。
aws ecs create-service --generate-cli-skeleton