メニュー
Amazon Elastic Container Service
開発者ガイド (API Version 2014-11-13)

サービスロードバランシング

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

Elastic Load Balancing では、3 種類のロードバランサー (Application Load Balancer、ネットワークロードバランサー、および Classic Load Balancer) を提供しています。

Application Load Balancer

Application Load Balancer では、アプリケーションレイヤー (HTTP/HTTPS) にてルーティング決定を行い、パスベースのルーティングをサポートします。また、クラスター内の各コンテナインスタンスの 1 つまたは複数のポートにリクエストをルーティングできます。Application Load Balancer では、動的ホストポートマッピングをサポートしています。たとえば、タスクコンテナ定義で NGINX コンテナポートのポート 80、ホストポートのポート 0 を指定した場合、ホストポートはコンテナインスタンスの一時ポート範囲から動的に選択されます (最新の Amazon ECS に最適化された AMI の 32768~61000 など)。タスクの起動時に、NGINX コンテナは、インスタンス ID およびポートの組み合わせとして Application Load Balancer で登録されます。トラフィックは、コンテナに対応するインスタンス ID およびポートに分散されます。この動的なマッピングにより、同じコンテナインスタンスの単一のサービスから複数のタスクを持つことができます。詳細については、「Application Load Balancer 用ユーザーガイド」を参照してください。

 Application Load Balancer

ネットワークロードバランサー

ネットワークロードバランサー により、トランスポートレイヤー (TCP/SSL) でルーティングの決定が行われます。毎秒数百万のリクエストを処理できます。ロードバランサーは、接続を受信すると、フローハッシュルーティングアルゴリズムを使用してデフォルトルールのターゲットグループからターゲットを選択します。リスナー構成で指定されたポート上の選択したターゲットへの TCP 接続を開こうとします。ヘッダーを変更せずにリクエストを転送します。ネットワークロードバランサー では、動的ホストポートマッピングをサポートしています。たとえば、タスクコンテナ定義で NGINX コンテナポートのポート 80、ホストポートのポート 0 を指定した場合、ホストポートはコンテナインスタンスの一時ポート範囲から動的に選択されます (最新の Amazon ECS に最適化された AMI の 32768~61000 など)。タスクの起動時に、NGINX コンテナは、インスタンス ID およびポートの組み合わせとして ネットワークロードバランサー で登録されます。トラフィックは、コンテナに対応するインスタンス ID およびポートに分散されます。この動的なマッピングにより、同じコンテナインスタンスの単一のサービスから複数のタスクを持つことができます。詳細については、「User Guide for ネットワークロードバランサーs」を参照してください。

 ネットワークロードバランサー

Classic Load Balancer

Classic Load Balancer では、トランスポートレイヤー (TCP/SSL) またはアプリケーションレイヤー (HTTP/HTTPS) のいずれかでルーティング決定を行います。Classic Load Balancer では現在、ロードバランサーのポートとコンテナインスタンスのポートとの間の一定の関係が必要です。たとえば、ロードバランサーのポート 80 をコンテナインスタンスのポート 3030 に、またロードバランサーのポート 4040 をコンテナインスタンスのポート 4040 にマッピングできます。ただし、ロードバランサーのポート 80 を 1 つのコンテナインスタンスのポート 3030 および別のコンテナインスタンスのポート 4040 にマッピングすることはできません。この静的マッピングでは、少なくとも Classic Load Balancer を使用する単一のサービスの必要数と同じ数のコンテナインスタンスがクラスターに存在する必要があります。詳細については、「Classic Load Balancer 用ユーザーガイド」を参照してください。

 Classic Load Balancer

Elastic Load Balancing では、次の 2 種類のロードバランサー (Application Load Balancer、ネットワークロードバランサー、および Classic Load Balancer) がサポートされます。Amazon ECS サービスではいずれのタイプのロードバランサーも使用できます。Application Load Balancer は、HTTP/HTTPS トラフィックをルーティングするために使用されます。ネットワークロードバランサー と Classic Load Balancer は、TCP またはレイヤー 7 トラフィックをルーティングするために使用されます。

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

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

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

これらの最新の機能を活用するため、Amazon ECS サービスには Application Load Balancer を使用することをお勧めします。Elastic Load Balancing およびロードバランサーの違いに関する詳細は、「Elastic Load Balancing ユーザーガイド」を参照してください。

注記

Amazon ECS サービスは現在、1 つのロードバランサーまたはターゲットグループのみを指定できます。サービスで複数のロードバランサーにアクセスする必要がある場合 (たとえば、HTTP/HTTPS サービス用のポート 80 とポート 443 など)、複数のリスナーを使用する Classic Load Balancer を使用する必要があります。Application Load Balancer を使用するには、単一の HTTP/HTTPS サービスを、それぞれ別のポートへのリクエストを処理する 2 つのサービスに分離します。こうすることで、各サービスが単一の Application Load Balancer の背後にある異なるターゲットグループを使用できます。

負荷分散の概念

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

    重要

    複数のサービスを同じ Classic Load Balancer に接続することはお勧めしません。コンテナインスタンス全体が Classic Load Balancer (ホストおよびポートの組み合わせではなく) で登録および登録解除されているため、この構成では、1 つのサービスからのタスクが停止した場合に問題が発生する場合があり、同じコンテナインスタンスで異なるサービスから別のタスクがそれを使用している間にコンテナインスタンス全体が Classic Load Balancer から登録解除されます。複数のサービスを 1 つのロードバランサーに接続する場合 (コストを節約するため、など)、Application Load Balancer を使用することをお勧めします。

  • サービスごとに 1 つのロードバランサーまたはターゲットグループに制限されます。

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

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

  • サービスのタスクがロードバランサーのヘルスチェックの基準に失敗すると、タスクは強制終了され、再起動されます。このプロセスは、サービスが実行中のタスクの必要数に達するまで続行されます。

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

このページの内容: