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

サービスの負荷分散

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

注記

タスクセットを使用するとき、セット内のすべてのタスクが Elastic Load Balancing を使用するように設定、または 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)トラフィックをルーティングするために使用されます。クラシックロードバランサは、TCP トラフィックをルーティングするために使用されます。詳細については、「ロードバランサーの種類」を参照してください。

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

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

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

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

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

サービスで Network 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 または Network Load Balancer を使用する Amazon ECS サービスに固有のものです。

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

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

  • ネットワークモードを使用するタスクを含むサービスの場合、サービスのターゲットグループを作成するときに、 ではなく、awsvpc をターゲットタイプとして選択ipする必要がありますinstanceこれは、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、ロードバランサー名、コンテナ名、コンテナポートはイミュータブルです。既存のサービスのロードバランサー設定を追加、削除、または変更することはできません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。

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

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

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

  • クライアントアプリケーションのエラーを最小限に抑えるには、タスク定義の StopTimeout でターゲットグループの登録解除遅延より長く設定し、クライアントの接続タイムアウトよりも長くする必要があります。推奨されるクライアント設定の詳細については、「こちらの」 Builders Library を参照してください。

    また、接続終了における Network Load Balancer ターゲットグループ属性は、登録解除時間後に残ったすべての接続を閉じます。これにより、クライアントが処理しない場合、クライアントに望ましくないエラーメッセージを表示する恐れがあります。

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

Classic Load Balancer に関する考慮事項

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

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

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

    重要

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

  • サービスに Classic Load Balancer を使用する場合、キャパシティープロバイダーの使用はサポートされません。