

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

# 使用策略來定義 Amazon ECS 任務置放
<a name="task-placement-strategies"></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. 選取容器執行個體進行任務置放。

您可以使用 `placementStrategy` 參數，在服務定義或任務定義中指定任務置放策略。

```
"placementStrategy": [
    {
        "field": "The field to apply the placement strategy against",
        "type": "The placement strategy to use"
    }
]
```

您可以在執行任務 ([RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html))、建立新服務 ([CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)) 或更新現有服務 ([UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)) 時指定策略。

下表說明可用的類型與欄位。


| type | 有效欄位值 | 
| --- | --- | 
| binpack 任務會放置於容器執行個體上，以便保留最少量的未使用 CPU 或記憶體。此策略會將使用中的容器執行個體數量減至最少。 當使用此策略並採取縮減動作時，Amazon ECS 會終止任務。此策略根據任務終止後保留在容器執行個體上的資源量來執行此操作。在任務終止後保留最多可用資源的容器執行個體，會終止該任務。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/task-placement-strategies.html)  | 
| random 隨機放置任務。 | 未使用 | 
| spread根據指定的值平均放置任務。 服務任務會根據該服務的任務進行散佈。獨立的任務會以同一任務群組的任務為基礎分配。如需有關任務群組的詳細資訊，請參閱 [將相關的 Amazon ECS 任務分在同一組](task-groups.md)。當使用 `spread` 策略並執行縮減動作時，Amazon ECS 會選擇個在可用區域之間保持平衡的任務進行終止。在一個可用區域內，任務會被隨機選取。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/task-placement-strategies.html)  | 

任務放置策略也可以為現有服務更新。如需詳細資訊，請參閱[Amazon ECS 如何在容器執行個體上置放任務](task-placement.md)。

您可以透過依照您希望執行的順序建立策略陣列來建立使用多個策略的任務放置策略。例如，如果您想要跨可用區域分散任務，然後在每個可用區域內根據記憶體對任務進行分箱封裝，請指定可用區域策略，然後指定記憶體策略。如需策略範例，請參閱 [Amazon ECS 任務置放策略範例](strategy-examples.md)。