

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

# Amazon ECS 如何在容器執行個體上置放任務
<a name="task-placement"></a>

您可以使用任務置放來設定 Amazon ECS，將任務置放在符合特定條件 (例如可用區域或執行個體類型) 的容器執行個體上。

下列是任務置放元件：
+ 任務置放策略 – 用於選取容器執行個體進行任務置放或選取任務進行終止的演算法。例如，Amazon ECS 可以隨機選取容器執行個體，也可以選取讓任務均勻分佈到一組執行個體的容器執行個體。
+ 任務群組 – 一組相關任務，例如資料庫任務。
+ 任務置放限制條件 – 必須符合這些規則才能在容器執行個體上置放任務。若不符合限制條件，則任務不會置放且保持 `PENDING` 狀態。例如，您可以使用限制條件，僅將任務置放在特定執行個體類型上。

Amazon ECS 針對不同容量選項有不同的演算法。

## Amazon ECS 受管執行個體
<a name="managed-instances-launch-type"></a>

對於在 Amazon ECS 受管執行個體上執行的任務，Amazon ECS 必須決定任務的置放位置，以及縮減任務計數時要終止的任務。Amazon ECS 會根據容量提供者啟動範本中指定的執行個體需求、任務定義中指定的需求 (例如 CPU 與記憶體)，以及任務置放限制條件來作出此決定。

**注意**  
Amazon ECS 受管執行個體不支援任務置放策略。Amazon ECS 將盡力將任務分散至可存取的可用區域。

Amazon ECS 放置任務時，會使用下列程序來選取容器執行個體：

1. 識別滿足任務定義中 CPU、GPU、記憶體與連接埠需求的容器執行個體。

1. 識別滿足任務置放限制條件的容器執行個體。

1. 識別滿足容量提供者啟動範本中指定執行個體需求的容器執行個體。

1. 選取容器執行個體進行任務置放。

## EC2
<a name="ec2-launch-type"></a>

對於採用 EC2 啟動類型的任務，Amazon ECS 必須根據任務定義中所指定的需求 (例如 CPU 與記憶體)，決定任務置放位置。同樣地，當您縮減任務計數時，Amazon ECS 必須判斷要終止的任務。您可以套用任務置放策略和限制條件，來自訂 Amazon ECS 如何放置和終止任務。

預設任務置放策略取決於是手動執行任務 (獨立任務) 還是在某項服務中執行任務。如果任務是作為 Amazon ECS 服務的一部分來執行，任務置放策略會是使用 `attribute:ecs.availability-zone` 來 `spread`。不在服務中的任務沒有預設任務置放限制條件。如需詳細資訊，請參閱[在 Amazon ECS 上為容器排程](scheduling_tasks.md)。

**注意**  
任務置放策略是一種最佳作法。即使最佳置放選項無法使用，Amazon ECS 仍然會嘗試放置任務。不過，任務置放限制條件具有約束性，且可能妨礙任務置放。

您可以同時使用任務置放策略和限制條件。例如，您可以使用任務放置策略和任務放置限制，根據每個可用區域內的記憶體，跨可用區域和分箱封裝任務來分配工作，但僅適用於 G2 執行個體。

Amazon ECS 放置任務時，會使用下列程序來選取容器執行個體：

1. 識別滿足任務定義中 CPU、GPU、記憶體與連接埠需求的容器執行個體。

1. 識別滿足任務置放限制條件的容器執行個體。

1. 識別滿足任務置放策略的容器執行個體。

1. 選取容器執行個體進行任務置放。

## Fargate
<a name="fargate-launch-type"></a>

使用 Fargate 的任務不支援任務置放策略與限制條件。Fargate 將盡力將任務分散至可存取的可用區域。如果容量提供者同時包含 Fargate 和 Fargate Spot，則每個容量提供者的分散行為均各自獨立。