Amazon ECS 任務置放限制條件 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS 任務置放限制條件

任務置放限制條件是在任務置放時所考量的規則。可以在執行任務或建立新服務時指定任務置放條件限制。任務放置限制也可以為現有服務更新。如需詳細資訊,請參閱 Amazon ECS 任務置放

限制條件類型

Amazon ECS 支援下列類型的任務置放限制條件:

distinctInstance

將每個任務放置在不同的容器執行個體。可以在執行任務或建立新服務時指定此任務置放條件限制。

memberOf

在滿足表達式的容器執行個體上放置任務。如需條件限制的表達式語法詳細資訊,請參閱叢集查詢語言

可以使用下列動作來指定 memberOf 任務置放條件限制:

  • 執行任務

  • 建立新服務

  • 建立新任務定義

  • 建立現有任務定義的新版本

Attributes

您可以將自訂中繼資料新增至容器執行個體,稱為屬性。每個屬性都有名稱和選用字串值。您可以使用 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

執行個體的作業系統。此屬性的可能值為 linuxwindows

ecs.cpu-architecture

執行個體的 CPU 架構。此屬性的可能值為 x86_64arm64

ecs.vpc-id

執行個體啟動所在位置的 VPC。此屬性的範例值為 vpc-1234abcd

ecs.subnet-id

執行個體使用的子網路。此屬性的範例值為 subnet-1234abcd

選用屬性

Amazon ECS 可能會將下列屬性新增至您的容器執行個體。

ecs.awsvpc-trunk-id

如果此屬性存在,執行個體則具有一個幹線網路界面。如需詳細資訊,請參閱 彈性網路界面中繼

ecs.outpost-arn

如果此屬性存在,則會包含 Amazon Resource Name (ARN) 的 Outpost。如需詳細資訊,請參閱 Amazon Elastic Container Service () 位於 AWS Outposts

Custom attributes (自訂屬性)

您可以將自訂屬性套用至容器執行個體。例如,您可以定義名稱為 "stack" 且值為 "prod" 的屬性。

指定自訂屬性時,應考慮以下事項。

  • name 必須包含 1 到 128 個字元,且名稱可包含字母 (大寫和小寫)、數字、連字號、分數不足、前向斜視點、反向斜視符號或句點。

  • value 必須包含 1 到 128 個字元,而且可以包含字母 (大寫和小寫)、數字、連字號、低於分數、句號、@、前向斜切符號、後切、冒號或空格。該值不能包含任何前置或結尾空格。

新增屬性

您可以使用 AWS 管理主控台,透過容器代理或手動在執行個體註冊時間新增自訂屬性。如需使用容器代理程式的詳細資訊,請參閱 Amazon ECS 容器代理程式組態參數

使用主控台新增自訂屬性

  1. https://console.aws.amazon.com/ecs/ 開啟 Amazon ECS 主控台。

  2. 在導覽窗格中,選擇 Clusters (叢集),然後選取叢集。

  3. ECS Instances (ECS 執行個體) 標籤上,選取容器執行個體的核取方塊。

  4. 選擇 Actions (動作)、View/Edit Attributes (檢視/編輯屬性)。

  5. 針對所有屬性,執行下列操作:

    1. 選擇 Add attribute (新增屬性)。

    2. 輸入屬性的名稱和值,並選擇核取記號圖示。

  6. 當您完成新增屬性時,請選擇 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

依屬性篩選

您可以套用容器執行個體的篩選條件,讓您可以查看自訂屬性。

使用主控台依屬性篩選容器執行個體

  1. https://console.aws.amazon.com/ecs/ 開啟 Amazon ECS 主控台。

  2. 選擇具有容器執行個體的叢集。

  3. 選擇 ECS Instances (ECS 執行個體)。

  4. 藉由選擇齒輪圖示 ( ) 並選取要顯示的屬性,來設定欄位可見度偏好設定。此設定會持續保存在與您帳戶相關聯的所有容器叢集中。

  5. 使用 Filter by attributes (依屬性篩選) 文字欄位,輸入或選取您想要做為篩選依據的屬性。格式必須為 AttributeName:AttributeValue

    針對 Filter by attributes (依屬性篩選),輸入或選取做為篩選依據的屬性。在您選取屬性名稱之後,系統會提示您輸入屬性值。

  6. 視需要將其他屬性新增至篩選條件。選擇屬性旁邊的 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.smallt2.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"

任務群組

您可以將一組相關任務識別為任務群組。執行分散置放時,會將所有具有相同任務群組名稱的任務視為一組。例如,假設您在一個叢集執行不同的應用程式,例如資料庫和 Web 伺服器。為了確保您在各個可用區域中之資料庫的平衡,請將它們新增至名為 databases (資料庫) 的任務群組,然後使用此任務群組做為任務置放的限制條件。

當您使用 RunTaskStartTask 動作啟動任務時,可以指定任務的任務群組名稱。如果您未指定任務的任務群組,則預設名稱是任務定義的系列名稱 (例如 family:my-task-definition)。

針對服務排程器啟動的任務,任務群組名稱是服務的名稱 (例如 service:my-service-name)。

Limits

  • 任務群組名稱必須在 255 個字元以下。

  • 每個任務只能在一個群組中。

  • 啟動任務之後,就無法修改其任務群組。

範例限制條件

下列是任務置放條件限制的範例。

此範例使用 memberOf 條件限制在 T2 執行個體上放置任務。可以使用下列動作來指定:CreateServiceUpdateServiceRegisterTaskDefinitionRunTask

"placementConstraints": [ { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" } ]

此範例使用 memberOf 限制條件,在任務databases群組中搭配其他任務的執行個體上放置任務,遵守任何同時指定的任務置放策略。可以使用下列動作來指定:CreateServiceUpdateServiceRegisterTaskDefinitionRunTask

"placementConstraints": [ { "expression": "task:group == databases", "type": "memberOf" } ]

distinctInstance 條件限制會在不同執行個體的群組中放置每個任務。可以使用下列動作來指定:CreateServiceUpdateServiceRunTask

"placementConstraints": [ { "type": "distinctInstance" } ]