Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

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

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

Amazon ECS サービスは、Application Load Balancer、Network Load Balancer、および Classic Load Balancer ロードバランサータイプをサポートします。Application Load Balancer は、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。Network Load Balancer と Classic Load Balancer は、TCP (またはレイヤー 4) トラフィックをルーティングするために使用されます。詳細については、「ロードバランサーの種類」を参照してください。

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

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

  • これらは、Fargate および 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 ユーザーガイド」を参照してください。

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

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

Application Load Balancer および Network Load Balancer に関する考慮事項

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

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

  • 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 スロースタートモードに関する考慮事項」を参照してください。スロースタートモードについては、「Application Load Balancers のターゲットグループ」を参照してください。

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

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 に関する考慮事項

以下の考慮事項は、クラシックロードバランサー を使用する Amazon ECS サービスに固有のものです。

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

  • コンテナヘルスチェックは、Classic Load Balancer を使用するように設定されたサービスの一部であるタスクではサポートされていません。

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

    重要

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