Amazon ECS タスク配置戦略
タスク配置戦略は、タスク配置またはタスクの終了でインスタンスを選択するためのアルゴリズムです。タスクの実行時または新しいサービスの作成時に、タスク配置戦略を指定できます。タスク配置の戦略は、既存のサービスに対しても更新できます。詳細については、「Amazon ECS タスクの配置」を参照してください。
Amazon ECS サービスの一部として実行されるタスクの場合、タスク配置戦略は attribute:ecs.availability-zone
を使用した spread
です。サービス内のタスクには、デフォルトのタスク配置の制約はありません。詳細については、「Amazon ECS タスクスケジューリング」を参照してください。
実行する順序で戦略の配列を作成することで、複数の戦略を使用するタスク配置戦略を作成できます。例えば、複数のアベイラビリティーゾーンにタスクを分散し、各アベイラビリティーゾーン内のメモリに基づいてタスクをビンパックする場合、アベイラビリティーゾーン戦略を指定し、その後にメモリ戦略を指定します。戦略の例については、「戦略の例」を参照してください。
戦略タイプ
Amazon ECSでは、以下のタスク配置戦略をサポートします。
binpack
-
タスクはコンテナインスタンスに配置され、未使用の CPU またはメモリを最小にします。この戦略は、使用中のコンテナインスタンスの数を最小限に抑えます。
この戦略が使用されてスケールインアクションが実行されると、Amazon ECS はタスクを終了します。タスクが終了した後にコンテナインスタンスに残されたリソース量に基づいてこれが実行されます。タスクの終了後に利用可能なリソースが最も多く残るコンテナインスタンスが、そのタスクを終了されます。
random
-
タスクはランダムに配置されます。
spread
-
タスクは指定された値に基づいて均等に配置されます。有効な値は
instanceId
(または同じ効果を持つhost
)、またはattribute:ecs.availability-zone
などのコンテナインスタンスに適用される任意のプラットフォームまたはカスタム属性です。サービスタスクはそのサービスからのタスクに基づいて分散されます。スタンドアロンタスクは、同じタスクグループからのタスクに基づいて分散されます。タスクグループの詳細については、「タスクグループ」を参照してください。
spread
戦略が使用されてスケールインアクションが実行されると、Amazon ECS は、アベイラビリティーゾーン間のバランスを維持するタスクを選択して終了します。アベイラビリティーゾーン内では、タスクはランダムに選択されます。
戦略の例
次のアクションを使用してタスク配置戦略を指定できます。CreateService、UpdateService、および RunTask。
例
複数のアベイラビリティーゾーンでタスクを均等に分散する
次の戦略は、アベイラビリティーゾーン間でタスクを均等に分散します。
"placementStrategy": [ { "field": "attribute:ecs.availability-zone", "type": "spread" } ]
すべてのインスタンスでタスクを均等に分散する
次の戦略は、すべてのインスタンス間でタスクを均等に分散します。
"placementStrategy": [ { "field": "instanceId", "type": "spread" } ]
メモリに基づいてタスクをビンパックする
次の戦略はメモリに基づいてタスクをビンパックします。
"placementStrategy": [ { "field": "memory", "type": "binpack" } ]
タスクをランダムに配置します。
次の戦略はタスクをランダムに配置します。
"placementStrategy": [ { "type": "random" } ]
複数のアベイラビリティーゾーンでタスクを均等に分散し、各アベイラビリティーゾーン内で複数のインスタンスでタスクを均等に分散する
次の戦略は、アベイラビリティーゾーン間でタスクを均等に分散し、次に各アベイラビリティーゾーン内でインスタンスを均等に分散します。
"placementStrategy": [ { "field": "attribute:ecs.availability-zone", "type": "spread" }, { "field": "instanceId", "type": "spread" } ]
複数のアベイラビリティーゾーンでタスクを均等に分散し、各アベイラビリティーゾーン内でメモリに基づいてタスクをビンパックする
次の戦略は、アベイラビリティーゾーン間でタスクを均等に分散し、次に各アベイラビリティーゾーン内でメモリに基づいてタスクをビンパックします。
"placementStrategy": [ { "field": "attribute:ecs.availability-zone", "type": "spread" }, { "field": "memory", "type": "binpack" } ]
複数のインスタンスでタスクを均等に分散し、メモリに基づいてタスクをビンパックする
次の戦略は、すべてのインスタンスでタスクを均等に分散し、各インスタンス内のメモリに基づいてタスクをビンパックします。
"placementStrategy": [ { "field": "instanceId", "type": "spread" }, { "field": "memory", "type": "binpack" } ]