

# 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 の両方が含まれている場合、スプレッドの動作はキャパシティープロバイダーごとに異なります。