アベイラビリティーゾーン間での Amazon ECS サービスのバランシング
アプリケーションの高可用性を実現するために、マルチタスクサービスを複数のアベイラビリティーゾーンで実行するように設定することをお勧めします。最初の配置戦略をアベイラビリティーゾーンに分散するように指定するサービスの場合、AWS は可能な限り、使用可能なアベイラビリティーゾーン間でサービスタスクを均等に分散します。ただし、アベイラビリティーゾーンの中断後など、あるアベイラビリティーゾーンで実行されているタスク数が、他のアベイラビリティーゾーンで実行されているタスク数と同じではない場合があります。このタスクの不均衡に対処するには、アベイラビリティーゾーンの再調整機能を有効にします。アベイラビリティーゾーンの再調整により、Amazon ECS は各サービスのアベイラビリティーゾーン間のタスクの分散を継続的にモニタリングします。Amazon ECS は、不均等なタスク分散を検出すると、アベイラビリティーゾーン間でワークロードを再調整するアクションを自動的に実行します。これには、タスクが最も少ないアベイラビリティーゾーンで新しいタスクを起動し、オーバーロードされたアベイラビリティーゾーンでタスクを終了することが含まれます。この再分散により、単一のアベイラビリティーゾーンが障害点になることがなくなり、コンテナ化されたアプリケーションの全体的な可用性を維持できます。自動再調整プロセスにより、手動による介入が不要になり、イベント後の復旧までの時間が短縮されます。
アベイラビリティーゾーンの再調整プロセスの概要を次に示します。
-
Amazon ECS は、サービスが定常状態に達した後にモニタリングを開始し、各アベイラビリティーゾーンで実行されているタスク数を調べます。
-
Amazon ECS は、各アベイラビリティーゾーンで実行されているタスク数の不均衡を検出すると、次のオペレーションを実行します。
-
アベイラビリティーゾーンの再調整が開始されていることを示すサービスイベントを送信します。
-
実行中のタスク数が最も少ないアベイラビリティーゾーンのタスクを開始します
-
実行中のタスク数が最も多いアベイラビリティーゾーンのタスクを停止します。
-
スケジューラは、新しく開始されたタスクが
HEALTHY
およびRUNNING
になるのを待ってから、オーバースケーリングされたアベイラビリティーゾーンのタスクを停止します。 -
アベイラビリティーゾーンの再調整結果を含むサービスイベントを送信します。
-
アベイラビリティーゾーンの再調整は、Fargate および EC2 起動タイプをサポートします。Fargate の場合、Amazon ECS はバランスを維持するために、使用可能なアベイラビリティーゾーン間でタスクを自動的に再分散します。EC2 起動タイプの場合、Amazon ECS は、定義された配置戦略と制約を考慮して、ベストエフォートベースで既存のコンテナインスタンス間でタスクを再調整します。ただし、ECS は再調整プロセスの一環として使用率の低いアベイラビリティーゾーンに新しいインスタンスをプロビジョニングすることができないため、再調整は既存のコンテナインスタンスに制限されます。
アベイラビリティーゾーンの再調整は、次の設定で機能します。
-
Replica
戦略を使用するサービス -
アベイラビリティーゾーン分散を最初のタスク配置戦略として指定するサービス、または配置戦略を指定しないサービス。
アベイラビリティーゾーンの再調整は、次のいずれかの条件を満たすサービスでは使用できません。
-
Daemon
戦略を使用する -
EXTERNAL
起動タイプ (ECS Anywhere) を使用する -
maximumPercent
値に 100% を使用する -
Classic Load Balancer を使用する
-
attribute:ecs.availability-zone
をタスク配置の制約として使用する
アベイラビリティーゾーンの再調整による配置戦略と配置制約
配置戦略により、Amazon ECS がタスク配置を終了するためのコンテナインスタンスとアベイラビリティーゾーンを選択する方法が決まります。タスク配置の制約は、タスクを特定のコンテナインスタンスで実行できるかどうかを決定するルールです。EC2 起動タイプでは、アベイラビリティーゾーンの再調整と組み合わせて配置戦略と配置制約を使用できます。ただし、アベイラビリティーゾーンの再調整が機能するには、アベイラビリティーゾーン分散配置戦略が最初に指定される戦略である必要があります。アベイラビリティーゾーンの再調整は、さまざまな配置戦略の組み合わせと互換性があります。例えば、最初にタスクをアベイラビリティーゾーン間で均等に分散し、次に各アベイラビリティーゾーン内のメモリに基づいてタスクをビンパックする戦略を作成できます。この場合、アベイラビリティーゾーンの分散戦略が最初に指定されているため、アベイラビリティーゾーンの再調整は機能します。配置戦略配列の最初の戦略がアベイラビリティーゾーン分散コンポーネントではない場合、アベイラビリティーゾーンの再調整は機能しないことに注意してください。この要件により、タスク分散の主な焦点は、高可用性にとって重要なアベイラビリティーゾーン間のバランスを維持することです。タスク配置の戦略と制約の詳細については、「Amazon ECS がタスクをコンテナインスタンスに配置する方法」を参照してください。
次の戦略例は、アベイラビリティーゾーン間でタスクを均等に分散し、次に各アベイラビリティーゾーン内でメモリに基づいてタスクをビンパックします。spread
戦略が最初に行われるため、アベイラビリティーゾーンの再調整はサービスと互換性があります。
"placementStrategy": [ { "field": "attribute:ecs.availability-zone", "type": "spread" }, { "field": "memory", "type": "binpack" } ]
アベイラビリティーゾーンの再調整を有効にする
新規および既存のサービスに対してアベイラビリティーゾーンの再調整を有効にする必要があります。
コンソール、API、または AWS CLI を使用して、アベイラビリティーゾーンの再調整を有効または無効にできます。
サービスタイプ | API | コンソール | CLI |
---|---|---|---|
既存 | UpdateService | コンソールを使用した Amazon ECS サービスの更新 | update-service |
New | CreateService | コンソールを使用した Amazon ECS サービスの作成 | サービスの作成 |