Amazon ECS 任务放置约束
任务放置约束是放置任务时会考虑的一条规则。可以在运行任务或创建新服务时指定任务放置约束。也可以针对现有服务更新任务放置约束。有关更多信息,请参阅Amazon ECS 任务放置。
约束类型
Amazon ECS 支持以下类型的任务放置约束:
distinctInstance
-
将每项任务放置在不同的容器实例中。可以在运行任务或创建新服务时指定此任务放置约束。
memberOf
-
将任务放置在满足表达式的容器实例中。有关约束表达式语法的更多信息,请参阅集群查询语言。
可以使用以下操作指定
memberOf
任务放置约束:-
运行任务
-
创建新服务
-
创建新的任务定义
-
创建现有任务定义的新修订版本
-
ecs.os-family
-
LINUX 或 WINDOWS_SERVER_<OS_Release>_<FULL or CORE>。
有效值为
LINUX
或WINDOWS_SERVER_<O
。例如:S_Release
>_<FULL or CORE
>WINDOWS_SERVER_2022_FULL
、WINDOWS_SERVER_2022_CORE
、WINDOWS_SERVER_20H2_CORE
、WINDOWS_SERVER_2019_FULL
、WINDOWS_SERVER_2019_CORE
和WINDOWS_SERVER_2016_FULL
。可以使用以下操作指定
ecs.os-family
任务放置约束:-
运行任务
-
创建新服务
-
创建新的任务定义
-
创建现有任务定义的新修订版本
-
属性
您可以将自定义元数据添加到容器实例中,称为属性。每个属性都有一个名称和一个可选字符串值。您可以使用 Amazon ECS 提供的内置属性,或自定义属性。
以下部分包含示例内置、可选属性和自定义属性。
内置属性
Amazon ECS 会自动将以下属性应用于您的容器实例。
ecs.ami-id
-
用于启动实例的 AMI 的 ID。本属性的示例值为
ami-1234abcd
。 ecs.availability-zone
-
实例所在的可用区。本属性的示例值为
us-east-1a
。 ecs.instance-type
-
实例的实例类型。本属性的示例值为
g2.2xlarge
。 ecs.os-type
-
实例的操作系统。此属性的可能值为
linux
和windows
。 ecs.cpu-architecture
-
实例的 CPU 架构。本属性的示例值为
x86_64
和arm64
。 ecs.vpc-id
-
启动实例的 VPC。本属性的示例值为
vpc-1234abcd
。 ecs.subnet-id
-
实例正在使用的子网。本属性的示例值为
subnet-1234abcd
。
可选属性
Amazon ECS 可能会将以下属性添加到您的容器实例。
ecs.awsvpc-trunk-id
-
如果此属性存在,则实例具有中继网络接口。有关更多信息,请参阅弹性网络接口中继。
ecs.outpost-arn
-
如果此属性存在,则包含 Outpost 的 Amazon Resource Name (ARN)。有关更多信息,请参阅AWS Outposts 上的 Amazon Elastic Container Service。
ecs.capability.external
-
如果此属性存在,则实例将标识为外部实例。有关更多信息,请参阅外部实例 (Amazon ECS Anywhere)。
自定义属性
您可以将自定义属性应用于您的容器实例。例如,您可以定义名为 "stack"、值为 "prod" 的属性。
指定自定义属性时,必须考虑以下内容。
-
name
必须包含 1 到 128 个字符,名称可以包含字母(大写和小写形式)、数字、连字符、下划线、正斜杠、反斜杠或句点。 -
value
必须包含 1 到 128 个字符,可以包含字母(大写和小写形式)、数字、连字符、下划线、句点、符号 (@)、正斜杠、反斜杠、冒号或空格。该值不能包含任何前导空格或尾随空格。
使用经典控制台添加属性
您可以使用 AWS Management Console,在实例注册时使用容器代理添加或手动添加自定义属性。有关使用容器代理的更多信息,请参阅 Amazon ECS 容器代理配置参数。
使用经典控制台添加自定义属性
打开 Amazon ECS 控制台:https://console.aws.amazon.com/ecs/
。 -
在导航窗格中,选择 Clusters 并选择一个集群。
-
在 ECS Instances 选项卡上,选择容器实例的复选框。
-
选择 Actions,View/Edit Attributes。
-
对于每个属性,请执行以下操作:
-
选择 Add attribute。
-
键入属性的名称和值,然后选中复选标记图标。
-
-
属性添加完毕后,选择 Close(关闭)。
使用 AWS CLI 添加自定义属性
以下示例说明了如何使用 put-attributes 命令添加自定义属性。
示例:单个属性
以下示例将自定义属性 "stack=prod" 添加到默认集群的指定容器实例中。
aws ecs put-attributes --attributes name=stack,value=prod,targetId=
arn
示例:多个属性
以下示例将自定义属性 "stack=prod" 和 "project=a" 添加到默认集群的指定容器实例中。
aws ecs put-attributes --attributes name=stack,value=prod,targetId=
arn
name=project,value=a,targetId=arn
使用控制台按属性筛选
您可以为容器实例应用筛选条件,从而能够查看自定义属性。
使用经典控制台按属性筛选容器实例
打开 Amazon ECS 控制台:https://console.aws.amazon.com/ecs/
。 -
选择具有容器实例的集群。
-
选择 ECS Instances。
-
通过选择齿轮图标并选择要显示的属性来设置列可见性首选项。此设置将在与您的账户关联的所有容器集群中保留。
-
使用 Filter by attributes(按属性筛选)文本字段,输入或选择要作为筛选条件的属性。格式必须为 AttributeName:AttributeValue。
对于 Filter by attributes(按属性筛选),输入或选择要作为筛选条件的属性。在选择属性名称后,系统会提示您提供属性值。
-
根据需要向筛选条件添加其他属性。通过选择某个属性旁的 X 可删除该属性。
使用 AWS CLI 按属性筛选容器实例
以下示例说明了如何使用 list-constainer-instances 命令按属性筛选容器实例。有关筛选语法的更多信息,请参阅集群查询语言。
示例:内置属性
以下示例使用内置属性列出 g2.2xlarge 实例。
aws ecs list-container-instances --filter "attribute:ecs.instance-type == g2.2xlarge"
示例:自定义属性
以下示例列出了具有自定义属性 "stack=prod" 的实例。
aws ecs list-container-instances --filter "attribute:stack == prod"
示例:排除属性值
以下示例列出了具有自定义属性 "stack",且其值仅为 "prod" 的实例。
aws ecs list-container-instances --filter "attribute:stack != prod"
示例:多个属性值
以下示例使用内置属性列出 t2.small
或 t2.medium
类型的实例。
aws ecs list-container-instances --filter "attribute:ecs.instance-type in [t2.small, t2.medium]"
示例:多个属性
以下示例使用内置属性列出 us-east-1a 可用区中的 T2 实例。
aws ecs list-container-instances --filter "attribute:ecs.instance-type =~ t2.* and attribute:ecs.availability-zone == us-east-1a"
约束示例
下面是一些任务放置约束示例。
此示例使用 memberOf
约束在 T2 实例上放置任务。可以使用以下操作指定此约束:CreateService、UpdateService、RegisterTaskDefinition 和 RunTask。
"placementConstraints": [ { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" } ]
该示例使用 memberOf
约束将任务放置在 databases
任务组中具有其他任务的实例上,同时考虑到也指定的任何任务放置策略。有关任务组的更多信息,请参阅 任务组。可以使用以下操作指定此约束:CreateService、UpdateService、RegisterTaskDefinition 和 RunTask。
"placementConstraints": [ { "expression": "task:group == databases", "type": "memberOf" } ]
distinctInstance
约束将组中的每项任务放置于不同实例上。可以使用以下操作指定此约束:CreateService、UpdateService 和 RunTask。
"placementConstraints": [ { "type": "distinctInstance" } ]