

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

# 定義 Amazon ECS 用於任務的容器執行個體
<a name="task-placement-constraints"></a>

任務置放限制條件是有關容器執行個體的規則，Amazon ECS 透過其判斷是否允許任務在該執行個體上執行。至少有一個容器執行個體必須符合限制條件。如果沒有符合條件限制的執行個體，則任務將會保持 `PENDING` 狀態。當您建立新服務或更新現有服務時，您可以為服務的任務指定任務放置限制條件。

您可以使用 `placementConstraint` 參數，在服務定義、任務定義或任務中指定任務置放限制條件。

```
"placementConstraints": [
    {
        "expression": "The expression that defines the task placement constraints",
        "type": "The placement constraint type to use"
    }
]
```

下表說明如何使用這些參數。


| Constraint type (限制條件類型) | 可指定的時機 | 
| --- | --- | 
| distinctInstance將每個作用中任務置放在不同的容器執行個體上。Amazon ECS 會查看任務置放所需的任務狀態。例如，如果現有任務的所需狀態為 `STOPPED` (但上次狀態不是)，則儘管存在 `distinctInstance` 置放限制條件，新的傳入任務仍可置放於同一執行個體上。因此，您可能會在同一執行個體上看到 2 項上次狀態為 `RUNNING` 的任務。 建議需要為任務實現嚴格隔離的客戶採用 Fargate。Fargate 會在硬體虛擬化環境中執行每個任務。此舉可確保這些容器化工作負載，不會與其他任務共用網路介面、Fargate 暫時性儲存、CPU 或記憶體。如需詳細資訊，請參閱 [的安全概觀 AWS Fargate](https://d1.awsstatic.com/whitepapers/AWS_Fargate_Security_Overview_Whitepaper.pdf)。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/task-placement-constraints.html)  | 
| memberOf在滿足運算式的容器執行個體上放置任務。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/task-placement-constraints.html) | 

使用 `memberOf` 限制條件類型時，可以使用叢集查詢語言來建立表達式，該語言定義了 Amazon ECS 可以置放任務的容器執行個體。表達式可讓您依屬性將容器執行個體分組。表達式位於 `placementConstraint` 的 `expression ` 參數中。

## Amazon ECS 容器執行個體屬性
<a name="attributes"></a>

您可以將自訂中繼資料新增至容器執行個體，稱為*屬性*。每個屬性都有名稱和選用字串值。您可以使用 Amazon ECS 所提供的內建屬性，或定義自訂屬性。

以下章節包含範例內建屬性、選擇性屬性和自訂屬性。

### 內建屬性
<a name="ecs-automatic-attributes"></a>

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.os-family`  
執行個體的作業系統版本。  
若為 Linux 執行個體，有效值為 `LINUX`。若為 Windows 執行個體，ECS 會以 `WINDOWS_SERVER_<OS_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`。  
這對 Windows 容器很重要， Windows containers on AWS Fargate 因為每個 Windows 容器的作業系統版本必須符合主機的作業系統版本。如果容器映像的 Windows 版本與主機不同，則容器不會啟動。如需詳細資訊，請參閱 Microsoft 文件網站上的 [Windows 容器版本相容性](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-11)。  
如果您的叢集執行多個 Windows 版本，您可以使用置放條件限制：`memberOf(attribute:ecs.os-family == WINDOWS_SERVER_<OS_Release>_<FULL or CORE>)`，確保將任務置放在執行相同版本的 EC2 執行個體上。如需詳細資訊，請參閱[擷取 Amazon ECS 最佳化 Windows AMI 中繼資料](retrieve-ecs-optimized_windows_AMI.md)。

`ecs.cpu-architecture`  
執行個體的 CPU 架構。此屬性的範例值為 `x86_64` 和 `arm64`。

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

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

**注意**  
Amazon ECS 受管執行個體支援下列屬性子集：  
`ecs.subnet-id`
`ecs.availability-zone`
`ecs.instance-type`
`ecs.cpu-architecture`

### 選擇性屬性
<a name="ecs-optional-attributes"></a>

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

`ecs.awsvpc-trunk-id`  
如果此屬性存在，執行個體則具有一個幹線網路界面。如需詳細資訊，請參閱[增加 Amazon ECS Linux 容器執行個體網路介面數量](container-instance-eni.md)。

`ecs.outpost-arn`  
如果此屬性存在，它會包含 Outpost 的 Amazon Resource Name (ARN)。如需詳細資訊，請參閱[上的 Amazon Elastic Container Service AWS Outposts](using-outposts.md)。

`ecs.capability.external`  
若存在此屬性，執行個體將被識別為外部執行個體。如需詳細資訊，請參閱[外部執行個體的 Amazon ECS 叢集](ecs-anywhere.md)。

### 自訂屬性
<a name="ecs-custom-attributes"></a>

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

在指定自訂屬性時，必須考慮下列事項。
+ `name` 必須包含 1 至 128 個字元，而名稱可能包含字母 (大小寫)、數字、連字號、底線、正斜線、反斜線或句號。
+ `value` 必須包含 1 至 128 個字元，而且可能包含字母 (大小寫)、數字、連字號、底線、句號、@ 符號、正斜線、反斜線、冒號或空格。值不得包含任何前置或結尾空格。