戦略を使用して Amazon ECS タスク配置を定義する - Amazon Elastic Container Service

戦略を使用して Amazon ECS タスク配置を定義する

EC2 起動タイプを使用するタスクには、Amazon ECS ではタスク定義で指定されている CPU やメモリなどの要件に基づいてタスクを配置する場所を決定する必要があります。同様に、タスク数を減らすときも、Amazon ECS でどのタスクを終了させるか決定する必要があります。タスク配置の戦略と制約を適用することで、Amazon ECS がタスクを配置および終了する方法をカスタマイズできます。

デフォルトのタスク配置戦略は、タスクを手動 (スタンドアロンタスク) で実行するのか、それともサービス内で実行するのかによって異なります。Amazon ECS サービスの一部として実行されるタスクの場合、タスク配置戦略は attribute:ecs.availability-zone を使用した spread です。サービス内にないタスクには、デフォルトのタスク配置の制約はありません。詳細については、「Amazon ECS でコンテナをスケジュールする」を参照してください。

注記

タスク配置戦略はベストエフォートです。Amazon ECSは、最適な配置オプションが利用できない場合でも、タスクの配置を試みます。ただし、タスク配置の制約が有効な場合、タスクを配置できないことがあります。

タスク配置戦略と制約は併用できます。例えば、タスク配置戦略とタスク配置制約を使用して、アベイラビリティーゾーン間でタスクを分散し、各アベイラビリティーゾーン内のメモリに基づいてビンパックタスクを分散できます。ただし、G2 インスタンスのみです。

Amazon ECSがタスクを配置する際は、以下のプロセスでコンテナインスタンスを選択します。

  1. タスク定義の CPU、GPU、メモリ、ポートの要件を満たすコンテナインスタンスを識別します。

  2. タスク配置の制約事項を満たすコンテナインスタンスを識別します。

  3. タスク配置戦略を満たすコンテナインスタンスを識別します。

  4. タスクを配置するコンテナインスタンスを選択します。

タスク配置戦略は、サービス定義または placementStrategy パラメータを使用したタスク定義で指定できます。

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

タスクを実行するとき (RunTask)、新しいサービスを作成するとき (CreateService)、または既存のサービスを更新するとき (UpdateService) に戦略を指定できます。

次の表は利用可能なタイプとフィールドを説明しています。

type 有効なフィールド値
binpack

タスクはコンテナインスタンスに配置され、未使用の CPU またはメモリを最小にします。この戦略は、使用中のコンテナインスタンスの数を最小限に抑えます。

この戦略が使用されてスケールインアクションが実行されると、Amazon ECS はタスクを終了します。タスクが終了した後にコンテナインスタンスに残されたリソース量に基づいてこれが実行されます。タスクの終了後に利用可能なリソースが最も多く残るコンテナインスタンスが、そのタスクを終了されます。

  • cpu

  • メモリ

random

タスクはランダムに配置されます。

使用されていない
spread

タスクは指定された値に基づいて均等に配置されます。

サービスタスクはそのサービスからのタスクに基づいて分散されます。スタンドアロンタスクは、同じタスクグループからのタスクに基づいて分散されます。タスクグループの詳細については、「Amazon ECS タスクをグループ化する 」を参照してください。

spread 戦略が使用されてスケールインアクションが実行されると、Amazon ECS は、アベイラビリティーゾーン間のバランスを維持するタスクを選択して終了します。アベイラビリティーゾーン内では、タスクはランダムに選択されます。

  • instanceId (または同じ効果のある host)

  • attribute:ecs.availability-zone のようなコンテナインスタンスに適用される任意のプラットフォームまたはカスタム属性

タスク配置の戦略は、既存のサービスに対しても更新できます。詳細については、「Amazon ECS がタスクをコンテナインスタンスに配置する方法」を参照してください。

実行する順序で戦略の配列を作成することで、複数の戦略を使用するタスク配置戦略を作成できます。例えば、複数のアベイラビリティーゾーンにタスクを分散し、各アベイラビリティーゾーン内のメモリに基づいてタスクをビンパックする場合、アベイラビリティーゾーン戦略を指定し、その後にメモリ戦略を指定します。戦略の例については、「Amazon ECS タスク配置戦略の例」を参照してください。