ECSを試しに使ったとき、EC2が二つ起動されたけど、
特にこちらで台数を指定した覚えがないので、なんで二台か調べた
ECS タスク配置戦略
AWS公式サイトによると、
EC2起動タイプを使用するタスクを起動するとき、Amazon ECSではタスク定義で指定されている CPU やメモリなどの要件に基づいてタスクを配置する場所を決定する必要があります。
とのことなので、タスクが何をどうやるか(CPU・メモリ)によって、配置する場所(どのタイプのEC2、どのEC2)が変わるということかな。。。
そして、EC2を以下のように選ぶらしい
Amazon ECSがタスクを配置する際は、以下のプロセスでコンテナインスタンスを選択します。
①タスク定義の CPU、GPU、メモリ、ポートの要件を満たすインスタンスを識別します。
②タスク配置の制約事項を満たすインスタンスを識別します。
③「タスク配置戦略」を満たすインスタンスを識別します。
④タスクを配置するインスタンスを選択します。
じゃ、タスクを配置する場所について開発者は何も指定できないか? そうでもない
タスクの実行時または新しいサービスの作成時に(タスク定義作成時じゃなく)、
以下のように「タスク配置戦略」を指定することで(上の③に該当)、タスクの配置をある程度決められる。
"placementStrategy": [
{
"field": "attribute:ecs.availability-zone",
"type": "spread"
}
]
戦略タイプ
binpack
CPU またはメモリの最小利用可能量に基づいてタスクを配置
(使用中のコンテナインスタンスの数を、「最小限」に抑える)
例:メモリに基づいてタスクをビンパックする
"field"を「memory」に指定
random
タスクをランダムに配置
spread
タスクは「指定された値」に基づいて均等に配置
例:複数のアベイラビリティーゾーンでタスクを均等に分散する
"field"を「attribute:ecs.availability-zone」に指定
例:すべてのインスタンスでタスクを均等に分散する
"field"を「instanceId」に指定
参考サイト