

# アベイラビリティーゾーン間での Amazon ECS サービスの調整
<a name="service-rebalancing"></a>

2025 年 9 月 5 日以降、Amazon ECS は、この機能の対象となるすべてのサービスについてアベイラビリティーゾーンの再調整を有効にします。アベイラビリティーゾーンの分散が第一優先のタスク配置戦略である場合、または配置戦略がない場合、サービスは対象になります。

アプリケーションの高可用性を実現するために、マルチタスクサービスを複数のアベイラビリティーゾーンで実行するように設定することをお勧めします。最初の配置戦略をアベイラビリティーゾーンに分散するように指定するサービスの場合、AWS は可能な限り、使用可能なアベイラビリティーゾーン間でサービスタスクを均等に分散します。

ただし、アベイラビリティーゾーンの中断後など、あるアベイラビリティーゾーンで実行されているタスク数が、他のアベイラビリティーゾーンで実行されているタスク数と同じではない場合があります。このタスクの不均衡に対処するには、アベイラビリティーゾーンの再調整機能を有効にします。

アベイラビリティーゾーンの再調整により、Amazon ECS は各サービスのアベイラビリティーゾーン間のタスクの分散を継続的にモニタリングします。Amazon ECS は、不均等なタスク分散を検出すると、アベイラビリティーゾーン間でワークロードを再調整するアクションを自動的に実行します。これには、タスクが最も少ないアベイラビリティーゾーンで新しいタスクを起動し、オーバーロードされたアベイラビリティーゾーンでタスクを終了することが含まれます。

この再分散により、単一のアベイラビリティーゾーンが障害点になることがなくなり、コンテナ化されたアプリケーションの全体的な可用性を維持できます。自動再調整プロセスにより、手動による介入が不要になり、イベント後の復旧までの時間が短縮されます。

アベイラビリティーゾーンの再調整プロセスの概要を次に示します。

1. Amazon ECS は、サービスが定常状態に達した後にモニタリングを開始し、各アベイラビリティーゾーンで実行されているタスク数を調べます。

1. Amazon ECS は、各アベイラビリティーゾーンで実行されているタスク数の不均衡を検出すると、次のオペレーションを実行します。
   + アベイラビリティーゾーンの再調整が開始されていることを示すサービスイベントを送信します。
   + 実行中のタスク数が最も少ないアベイラビリティーゾーンのタスクを開始します
   + 実行中のタスク数が最も多いアベイラビリティーゾーンのタスクを停止します。
   + スケジューラは、新しく開始されたタスクが `HEALTHY` および `RUNNING` になるのを待ってから、オーバースケーリングされたアベイラビリティーゾーンのタスクを停止します。
   + アベイラビリティーゾーンの再調整結果を含むサービスイベントを送信します。

## 不均等なタスク分散を Amazon ECS が検出する方法
<a name="service-rebalancing-imbalance"></a>

サービスの必要なタスク数を設定されたアベイラビリティーゾーンの数で割ることで、Amazon ECS は各アベイラビリティーゾーンで実行されているタスク数の不均衡を判断します。必要なタスク数を割り切れない場合、Amazon ECS は残りのタスクを設定されたアベイラビリティーゾーン間に均等に分散します。各アベイラビリティーゾーンには、少なくとも 1 つのタスクが必要です。

例えば、2 つのアベイラビリティーゾーンに対して設定されたタスクの必要数が 2 つの Amazon ECS サービスを考えてみましょう。このシナリオでは、必要なタスクの数が均等に分割されます。均等な分散では、アベイラビリティーゾーンあたり 1 つのタスクになります。アベイラビリティーゾーン 1 に 2 つのタスクがあり、アベイラビリティーゾーン 2 に 0 のタスクがある場合、Amazon ECS はアベイラビリティーゾーン 1 でタスクを停止する前に、アベイラビリティーゾーン 2 でタスクを開始して再調整を開始します。

ここで、2 つのアベイラビリティーゾーンに対して設定されたタスクの必要数が 3 つの Amazon ECS サービスを考えてみましょう。このシナリオでは、必要なタスクの数は均等に分割されません。各アベイラビリティーゾーンに少なくとも 1 つのタスクがあり、残りのタスクはアベイラビリティーゾーン 2 に配置されているため、アベイラビリティーゾーン 1 で 1 つのタスク、アベイラビリティーゾーン 2 で 2 つのタスクがバランスが取れた分散です。

3 つのアベイラビリティーゾーンに対して設定されたタスクの必要数が 5 つの Amazon ECS サービスを考えてみましょう。このシナリオでは、必要なタスクの数は均等に分割されません。バランスが取れた分散は、アベイラビリティーゾーン 1 で 1 つのタスク、アベイラビリティーゾーン 2 と 3 でそれぞれ 2 つのタスクになります。各アベイラビリティーゾーンに 1 つのタスクがあることを考慮した後、残り 2 つのタスクはアベイラビリティーゾーン全体に均等に分散されます。

## アベイラビリティーゾーンの再調整の設定に関する考慮事項
<a name="service-rebalancing-configurations"></a>

アベイラビリティーゾーンの再調整を設定したい場合は、次の点を考慮してください。
+ アベイラビリティーゾーンの再調整は、Fargate および EC2 のキャパシティプロバイダーをサポートし、Amazon ECS マネージドインスタンスでサポートされています。Fargate の場合、Amazon ECS はバランスを維持するために、使用可能なアベイラビリティーゾーン間でタスクを自動的に再分散します。EC2 キャパシティプロバイダーの場合、Amazon ECS は、定義された配置に関する戦略と制約を考慮して、ベストエフォートベースで既存のコンテナインスタンス間でタスクを再調整します。ただし、Amazon ECS は再調整プロセスの一環として使用率の低いアベイラビリティーゾーンで新しいインスタンスを起動することができないため、再調整は既存のコンテナインスタンスに制限されます。
+ アベイラビリティーゾーンの再調整は、次の設定で機能します。
  + `Replica` 戦略を使用するサービス
  + アベイラビリティーゾーン分散を最初のタスク配置戦略として指定するサービス、または配置戦略を指定しないサービス。
+ アベイラビリティーゾーンの再調整は、次のいずれかの条件を満たすサービスでは使用できません。
  + `Daemon` 戦略を使用する
  + `EXTERNAL` 起動タイプ (ECS Anywhere) を使用する
  + `maximumPercent` 値に 100% を使用する
  + Classic Load Balancer を使用する
  + `attribute:ecs.availability-zone` をタスク配置の制約として使用する

## アベイラビリティーゾーンの再調整による配置戦略と配置制約
<a name="service-rebalancing-placement-constraints"></a>

配置戦略により、Amazon ECS がタスク配置を終了するためのコンテナインスタンスとアベイラビリティーゾーンを選択する方法が決まります。タスク配置の制約は、タスクを特定のコンテナインスタンスで実行できるかどうかを決定するルールです。

EC2 では、アベイラビリティーゾーンの再調整と組み合わせて配置戦略と配置制約を使用できます。ただし、アベイラビリティーゾーンの再調整が機能するには、アベイラビリティーゾーン分散配置戦略が最初に指定される戦略である必要があります。

アベイラビリティーゾーンの再調整は、さまざまな配置戦略の組み合わせと互換性があります。例えば、最初にタスクをアベイラビリティーゾーン間で均等に分散し、次に各アベイラビリティーゾーン内のメモリに基づいてタスクをビンパックする戦略を作成できます。この場合、アベイラビリティーゾーンの分散戦略が最初に指定されているため、アベイラビリティーゾーンの再調整は機能します。

配置戦略配列の最初の戦略がアベイラビリティーゾーン分散コンポーネントではない場合、アベイラビリティーゾーンの再調整は機能しないことに注意してください。この要件により、タスク分散の主な焦点は、高可用性にとって重要なアベイラビリティーゾーン間のバランスを維持することです。

タスク配置の戦略と制約の詳細については、「[Amazon ECS がタスクをコンテナインスタンスに配置する方法](task-placement.md)」を参照してください。

タスクの配置戦略および制約事項は、Fargate を使用しているタスクをサポートしていません。Fargate は、アクセス可能なアベイラビリティーゾーンにタスクを分散するよう最善を尽くします。キャパシティープロバイダーに Fargate と Fargate Spot の両方が含まれている場合、スプレッドの動作はキャパシティープロバイダーごとに異なります。

次の戦略例は、アベイラビリティーゾーン間でタスクを均等に分散し、次に各アベイラビリティーゾーン内でメモリに基づいてタスクをビンパックします。`spread` 戦略が最初に行われるため、アベイラビリティーゾーンの再調整はサービスと互換性があります。

```
"placementStrategy": [
    {
        "field": "attribute:ecs.availability-zone",
        "type": "spread"
    },
    {
        "field": "memory",
        "type": "binpack"
    }
]
```

## アベイラビリティーゾーンの再調整を有効にする
<a name="service-rebalancing-use"></a>

新規および既存のサービスに対してアベイラビリティーゾーンの再調整を有効にする必要があります。

コンソール、API、AWS CLI、および CloudFormation を使用して、アベイラビリティーゾーンの再調整を有効または無効にできます。

`AvailabilityZoneRebalancing` のデフォルトの動作は、作成リクエストと更新リクエストで異なります。
+ サービスリクエスト作成の場合、`AvailabilityZoneRebalancing` に値が指定されていない場合、Amazon ECS はデフォルトで値を `ENABLED` に設定します。
+ サービスリクエスト更新の場合、`AvailabilityZoneRebalancing` に値が指定されていない場合、Amazon ECS はデフォルトでサービスのこれまでの `AvailabilityZoneRebalancing` の値に設定します。サービスに `AvailabilityZoneRebalancing` 値が設定されたことがない場合、Amazon ECS はこれを `DISABLED` として扱います。


| サービスタイプ | API | コンソール | CLI | 
| --- | --- | --- | --- | 
| 既存 | [UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html) |  [Amazon ECS サービスを更新する](update-service-console-v2.md)  | [update-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html) | 
| 新 | [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html) |  [Amazon ECS のローリング更新デプロイの作成](create-service-console-v2.md)  | [サービスの作成](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html) | 

次の例は、新しいサービスの作成時にサービスの再調整を有効にする方法を示しています。

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-definition:1 \
    --desired-count 6 \
    --availability-zone-rebalancing ENABLED
```

## サービス再調整のトラブルシューティング
<a name="service-rebalancing-troubleshooting"></a>

サービス再調整で問題が発生した場合、次のトラブルシューティングステップを検討してください。

再調整が開始されない  
以下を確認してください。  
+ サービスにサービス再調整が有効になっている
+ サービスでサポートされている設定が使用される (「[アベイラビリティーゾーンの再調整の設定に関する考慮事項](#service-rebalancing-configurations)」を参照)
+ サービスが定常状態になった

再調整中のタスク配置の失敗  
`SERVICE_TASK_PLACEMENT_FAILURE` イベントが表示された場合  
+ EC2 の場合: ターゲットのアベイラビリティーゾーンで利用可能なコンテナインスタンスがあるかどうかを確認します。
+ Fargate の場合: タスク配置を制限するリソース制約または Service Quotas があるかどうかを確認します。
+ タスク配置の制約を確認し、適切なタスク分散が妨げられていないことを確認します。

予期せずに再調整が停止する  
`SERVICE_REBALANCING_STOPPED` イベントが表示された場合  
+ オペレーションをブロックしている可能性のあるタスク保護を確認します
+ 再調整を中断する可能性のある同時サービスデプロイを探します
+ 再調整が停止した原因に関する追加情報については、サービスイベントを確認してください。

## サービス再調整のベストプラクティス
<a name="service-rebalancing-best-practices"></a>

サービス再調整を最大限に活用するには、次のベストプラクティスに従ってください。
+ **再調整オペレーションのモニタリング** – 問題を迅速に特定するため、CloudWatch アラームを設定して、再調整に関連するサービスイベントをモニタリングします。
+ **パフォーマンスへの影響の考慮** – 古いタスクが停止される前に新しいタスクが開始されると、再調整オペレーションによって一時的にリソース使用量が増加する可能性があるので注意してください。
+ **タスク保護の戦略的な使用** – 再調整中に終了すべきではない重要なタスクがある場合は、タスク保護の使用を検討してください。
+ **EC2 キャパシティの計画** – EC2 の場合は、効果的な再調整をサポートするため、すべてのアベイラビリティーゾーン間に十分なコンテナインスタンスがあることを確認します。
+ **再調整動作のテスト** – 本番で再調整に依存する前に、非本番環境で再調整オペレーション中にサービスがどのように動作するかをテストします。