サービスの負荷分散 - Amazon Elastic Container Service

サービスの負荷分散

サービスのタスク間でトラフィックを均等に分散するように、オプションで Amazon ECS の Elastic Load Balancing サービスを設定できます。

Amazon EC2 インスタンスでホストされる Amazon ECS サービスは、Application Load Balancer、Network Load Balancer、Classic Load Balancer といったタイプをサポートします。AWS Fargateでホストされている Amazon ECS サービスは、Application Load Balancer とNetwork Load Balancer のみをサポートします。アプリケーションロードバランサーは、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。ネットワークロードバランサーは、TCP または UDP (またはレイヤー 4)トラフィックをルーティングするために使用されます。Classic Load Balancer は、TCP トラフィックをルーティングするために使用されます。詳細については、「ロードバランサーの種類」を参照してください。

Amazon Load Balancer は Amazon ECS サービスでの使用に便利な複数の機能を提供しています。

  • 各サービスは、複数のロードバランサーからトラフィックを送信し、複数のターゲットグループを指定することにより複数のロードバランシングポートを公開できます。

  • これらは、Fargate と EC2 インスタンスの両方でホストされているタスクでサポートされています。

  • Application Load Balancer により、コンテナが動的ホストポートマッピングを使用できるようになります (同じサービスから複数のタスクがコンテナインスタンスごとに許可するため)。

  • Application Load Balancer では、パスベースのルーティングと優先ルールをサポートしています (複数のサービスが 1 つの Application Load Balancer で同じリスナーポートを使用するため)。

サービスで ネットワークロードバランサ― および Classic Load Balancer でのみ使用できる機能が必要な場合を除き、最新の機能を利用できるように、Amazon ECS サービスで Application Load Balancer を使用することをお勧めします。これらのロードバランサーの違いについては、「Elastic Load Balancing ユーザーガイド」の「Elastic Load Balancing とは」を参照してください。

ロードバランサーについては、お客様が利用された分のみのお支払いとなります。詳細については、Elastic Load Balancing の料金表を参照してください。

サービスの負荷分散に関する考慮事項

サービス負荷分散を使用する場合は、次の点を考慮してください。

Application Load Balancer とNetwork Load Balancer に関する考慮事項

以下の考慮事項は、Application Load Balancer またはネットワークロードバランサ―を使用する Amazon ECS サービスに固有のものです。

  • Amazon ECS には、タスクの作成時および停止時に、ロードバランサーへのコンテナインスタンスの登録および登録解除に必要なアクセス許可を提供するサービスリンク IAM ロールが必要です。詳細については、「Amazon ECS のサービスにリンクされたロール」を参照してください。

  • Application Load Balancer または Network Load Balancer を使用するサービスの場合、6 個以上のターゲットグループはアタッチできません。

  • awsvpcネットワークモードを使用するタスクを含むサービスの場合、instance ではなく、ip をターゲットタイプとして選択する必要があります 。これは、awsvpcネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

  • サービスが Application Load Balancer を使用しており、HTTP/HTTPS サービスのポート 80 やポート 443 など、複数の負荷分散されたポートにアクセスする必要がある場合は、2 つのリスナーを設定できます。1 つのリスナーは、リクエストをサービスに転送する HTTPS を担当し、別のリスナーは HTTP リクエストを適切な HTTPS ポートへのリダイレクトを担当します。詳細については、Application Load Balancer ユーザーガイドの「Application Load Balancer のリスナーを作成する」を参照してください。

  • ロードバランサーのサブネット設定には、コンテナインスタンスが存在するアベイラビリティーゾーンすべてを含める必要があります。

  • サービスを作成した後、サービス定義で指定されているターゲットグループ ARN、ロードバランサー名、コンテナ名、コンテナポートはイミュータブルです。既存のサービスのロードバランサー設定を追加、削除、または変更することはできません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。

  • サービスのタスクがロードバランサーのヘルスチェック条件を満たさない場合、タスクは停止され、再起動されます。このプロセスは、サービスが実行中のタスクの必要数に達するまで続行されます。

  • Application Load Balancer スロースタートモードがサポートされています。詳細については、「Application Load Balancer のスロースタートモードに関する考慮事項」を参照してください。

  • IP アドレスがターゲットとして設定されているNetwork Load Balancer を使用する場合、リクエストは Network Load Balancer プライベート IP アドレスから送信されたとみなされます。つまり、ターゲットのセキュリティグループで受信リクエストとヘルスチェックを許可すると、Network Load Balancer の背後にあるサービスが世界中からアクセス可能になります。

  • Network Load Balancer を使用して UDP トラフィックを Fargate の Amazon ECS タスクにルーティングするには、タスクでプラットフォームバージョン 1.4.0 を使用する必要があります。

  • ロードバランサーで有効にされているサービスに問題がある場合は、「サービスロードバランサーのトラブルシューティング」を参照してください。

Application Load Balancer のスロースタートモードに関する考慮事項

スロースタートモードが有効な Application Load Balancer は、Amazon ECS サービスでサポートされています。スロースタートモードの詳細については、「Application Load Balancer のターゲットグループ」を参照してください。

タスクがウォームアップしてトラフィックを受信する準備ができるまで、サービススケジューラが異常なコンテナヘルスチェックを無視するようにするには、以下の設定が必要です。

  • スロースタート期間が終了するまで UNHEALTHY ステータスを返すように、コンテナのヘルスチェックを設定する必要があります。

  • Amazon ECS サービスのヘルスチェックの猶予期間の値は、スロースタートモードの期間と同じ期間に設定する必要があります。

Application Load Balancer スロースタートモードで異なるタスクネットワークモードを使用する場合は、次の点を考慮してください。

  • awsvpc ネットワークモードを使用する場合、各タスクには独自の Elastic Network Interface (ENI) と IP アドレスが割り当てられます。これにより、Application Load Balancer は各タスクをターゲットグループのターゲットとして登録できます。これにより、新しく登録された各ターゲットでスロースタートモードが有効になります。

  • host ネットワークモードを使用する場合、タスクは Docker ネットワーキング構造をバイパスし、コンテナポートを Amazon EC2 インスタンスのネットワークインターフェイスまたはインターフェイスに直接マッピングします。タスクの IP アドレスではなく、コンテナインスタンスを Application Load Balancer ターゲットとして登録します。つまり、スロースタートモードを効果的に機能させる場合、インスタンスごとに 1 つのタスクしか実行できません。既存のタスクまたはサービスを更新するか、コンテナインスタンスを再起動する場合、コンテナインスタンスが Application Load Balancer ターゲットとして再登録されず、スロースタート期間が開始されません。

  • bridge ネットワークモードを使用するときは、host ネットワークモードを使用する場合と同様に、コンテナインスタンスを Amazon ECS タスクではなく Application Load Balancer ターゲットとして登録します。そのため、上記と同じ考慮事項が適用されます。

さらに、以下の考慮事項は、Application Load Balancer スロースタートモードの使用とターゲットとしての Amazon ECS タスクの追加に固有のものです。

  • ターゲットグループでスロースタートを有効にする場合、既にそのターゲットグループに登録済みのターゲットをスロースタートモードに入りません。

  • 空のターゲットグループでスロースタートを有効にし、その後、単一登録オペレーションを使用して 1 つ以上のターゲットを登録すると、それらのターゲットはスロースタートモードに入りません。新しく登録されたターゲットは、スロースタートモードになっていない登録済みターゲットが 1 つ以上ある場合にのみスロースタートモードに入ります。

  • スロースタートモードのターゲットを登録解除すると、そのターゲットはスロースタートモードを終了します。同じターゲットを再度登録すると、再度スロースタートモードに入ります。

  • スロースタートモードのターゲットに異常が発生してから、期間が経過する前に正常に戻った場合、そのターゲットはスロースタートモードを維持し、期間の残りが経過してからスロースタートモードを終了します。スロースタートモードではないターゲットが異常な状態から正常に変わった場合は、スロースタートモードに入りません。

Classic Load Balancer に関する考慮事項

以下の考慮事項は、Classic Load Balancer を使用する Amazon ECS サービスに固有のものです。

  • Fargate 起動タイプを使用するなど、awsvpc ネットワークモードを使用するタスクを含むサービスは、Classic Load Balancer をサポートしていません。

  • 1 つのタスク定義で起動されたすべてのコンテナは、常に同じコンテナインスタンスに配置されます。Classic Load balancer では、サービス定義で複数のホストポートを定義し、それらのリスナーポートをロードバランサーに追加することによって、同じロードバランサーの背後に複数のコンテナ (同じタスク定義内) を配置できます。たとえば、タスク定義がコンテナインスタンスのポート 3030 を使用する OpenSearch Service で構成され、コンテナインスタンスのポート 4040 を使用する Logstash と OpenSearch ダッシュボードで構成されている場合は、同じロードバランサーが 2 つのリスナーを通して OpenSearch Service と OpenSearch ダッシュボードにトラフィックをルーティングできます。詳細については、『Classic Load Balancer のユーザーガイド』の「Classic Load Balancer のリスナー」を参照してください。

    重要

    複数のサービスを同じ Classic Load Balancer に接続することはお勧めしません。コンテナインスタンス全体がホストとポートの組み合わせではなく Classic Load Balancer で登録および登録解除されるため、この設定により、1 つのサービスからのタスクが停止すると、問題が発生する可能性があります。このシナリオでは、1 つのサービスの停止からのタスクによって、コンテナインスタンス全体が Classic Load Balancer から登録解除され、同じコンテナインスタンス上の別のサービスの別のタスクは引き続きそれを使用します。複数のサービスを 1 つのロードバランサーに接続する場合は、Application Load Balancer を使用することをお勧めします。