Elastic Load Balancing
Network Load Balancer

Network Load Balancer のターゲットグループ

ターゲットグループは、1 つ以上の登録されているターゲットにリクエストをルーティングするために使用されます。各リスナーのルールを作成するときに、ターゲットグループと条件を指定します。ルールの条件が満たされると、トラフィックが該当するターゲットグループに転送されます。さまざまなタイプのリクエストに応じて別のターゲットグループを作成できます。たとえば、一般的なリクエスト用に 1 つのターゲットグループを作成し、アプリケーションのマイクロサービスへのリクエスト用に別のターゲットグループを作成できます。詳細については、「Network Load Balancer コンポーネント」を参照してください。

ロードバランサーのヘルスチェック設定は、ターゲットグループ単位で定義します。各ターゲットグループはデフォルトのヘルスチェック設定を使用します。ただし、ターゲットグループを作成したときや、後で変更したときに上書きした場合を除きます。リスナーのルールでターゲットグループを指定すると、ロードバランサーは、ロードバランサーで有効なアベイラビリティーゾーンにある、ターゲットグループに登録されたすべてのターゲットの状態を継続的にモニタリングします。ロードバランサーは、正常な登録済みターゲットにリクエストをルーティングします。

ルーティング設定

デフォルトでは、ロードバランサーはターゲットグループの作成時に指定したプロトコルとポート番号を使用して、リクエストをターゲットにルーティングします。または、ターゲットグループへの登録時にターゲットへのトラフィックのルーティングに使用されるポートを上書きすることもできます。

Network Load Balancer のターゲットグループでは、次のプロトコルとポートがサポートされています。

  • プロトコル: TCP、TLS、UDP、TCP_UDP

  • ポート: 1 ~ 65535

次の表は、リスナープロトコルとターゲットグループの設定のサポートされている組み合わせをまとめたものです。

リスナープロトコル ターゲットグループプロトコル ターゲットグループの種類 ヘルスチェックプロトコル

TCP

TCP | TCP_UDP

インスタンス | ip

HTTP | HTTPS | TCP

TLS

TCP | TLS

インスタンス | ip

HTTP | HTTPS | TCP

UDP

UDP | TCP_UDP

インスタンス

HTTP | HTTPS | TCP

TCP_UDP

TCP_UDP

インスタンス

HTTP | HTTPS | TCP

ターゲットの種類

ターゲットグループを作成するときは、そのターゲットの種類を指定します。ターゲットの種類は、ターゲットの指定方法を決定します。ターゲットグループを作成した後で、ターゲットの種類を変更することはできません。

可能なターゲットの種類は次のとおりです。

instance

インスタンス ID で指定されたターゲット。

ip

IP アドレスで指定されたターゲット。

ターゲットの種類が ip の場合、次のいずれかの CIDR ブロックから IP アドレスを指定できます。

  • ターゲットグループの VPC のサブネット

  • 10.0.0.0/8 (RFC 1918)

  • 100.64.0.0/10 (RFC 6598)

  • 172.16.0.0/12 (RFC 1918)

  • 192.168.0.0/16 (RFC 1918)

重要

パブリックにルーティング可能な IP アドレスは指定できません。

これらのサポートされている CIDR ブロックを使用すると、ClassicLink インスタンス、IP アドレスとポート (たとえば、データベース) でアドレス指定できる AWS リソース、AWS Direct Connect を介して AWS にリンクされたオンプレミスリソース、またはソフトウェア VPN 接続をターゲットグループに登録できます。

ターゲットの種類が ip である場合、ロードバランサーは一意の各ターゲット (IP アドレスとポート) に対して 55,000 の同時接続または 1 分あたり約 55,000 の接続をサポートできます。これらの接続数を超えた場合、ポート割り当てエラーが発生する可能性が高くなります。ポート割り当てエラーが発生した場合は、ターゲットグループにさらに多くのターゲットを追加します。

ターゲットグループのプロトコルが UDP または TCP_UDP 場合、ターゲットタイプは instance である必要があります。

Network Load Balancer は lambda ターゲットタイプをサポートしていません。Application Load Balancer のみが lambda ターゲットタイプをサポートしています。詳細については、Application Load Balancer 用ユーザーガイドの「ターゲットとしての Lambda 関数」を参照してください。

リクエストのルーティングと IP アドレス

インスタンス ID を使用してターゲットを指定すると、トラフィックはインスタンスのプライマリネットワークインターフェイスで指定されたプライマリプライベート IP アドレスを使用して、インスタンスにルーティングされます。ロードバランサーは、データパケットの宛先 IP アドレスを書き換えてから、ターゲットインスタンスに転送します。

IP アドレスを使用してターゲットを指定する場合は、1 つまたは複数のネットワークインターフェイスからのプライベート IP アドレスを使用して、トラフィックをインスタンスにルーティングできます。これにより、インスタンスの複数のアプリケーションが同じポートを使用できるようになります。各ネットワークインターフェイスはそれぞれ独自のセキュリティグループを割り当てることができます。ロードバランサーは、宛先 IP アドレスを書き換えてから、ターゲットに転送します。

送信元 IP の保持

インスタンス ID を使用してターゲットを指定すると、クライアントの送信元 IP アドレスが保持され、アプリケーションに提供されます。

ターゲットを IP アドレスで指定する場合、送信元 IP アドレスはロードーバランサノードのプライベート IP アドレスとなります。クライアントの IP アドレスが必要な場合は、Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得します。

Network Load Balancer に登録されているインスタンスでマイクロサービスを使用している場合、ロードバランサーを使用してインスタンス間の通信を提供することはできません。ただし、ロードバランサーがインターネット向けであるか、インスタンスが IP アドレスによって登録されている場合は除きます。詳細については、「ターゲットからそのロードバランサーへのリクエストが接続タイムアウトになる」を参照してください。

登録済みターゲット

ロードバランサーは、クライアントにとって単一の通信先として機能し、正常な登録済みターゲットに受信トラフィックを分散します。各ターゲットグループでは、ロードバランサーが有効になっている各アベイラビリティーゾーンで少なくとも 1 つのターゲットが登録されている必要があります。各ターゲットは、1 つ以上のターゲットグループに登録できます。異なるポートを使用して、各 EC2 インスタンスまたは IP アドレスを同じターゲットグループに複数回登録できます。これにより、ロードバランサーはリクエストをマイクロサービスにルーティングできます。

アプリケーションの需要が高まった場合、需要に対処するため、1 つまたは複数のターゲット グループに追加のターゲットを登録できます。ロードバランサーは、登録プロセスが完了するとすぐに、新しく登録したターゲットへのトラフィックのルーティングを開始します。

アプリケーションの需要が低下した場合や、ターゲットを保守する必要がある場合、ターゲットグループからターゲットを登録解除することができます。ターゲットを登録解除するとターゲットグループから削除されますが、ターゲットにそれ以外の影響は及びません。登録解除するとすぐに、ロードバランサーはターゲットへのトラフィックのルーティングを停止します。ターゲットは、未処理のリクエストが完了するまで draining 状態になります。トラフィックの受信を再開する準備ができると、ターゲットをターゲットグループに再度登録することができます。

インスタンス ID でターゲットを登録する場合は、Auto Scaling グループでロードバランサーを使用できます。Auto Scaling グループにターゲットグループをアタッチすると、ターゲットの起動時に Auto Scaling によりターゲットグループにターゲットが登録されます。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「Auto Scaling グループにロードバランサーをアタッチする」を参照してください。

制限

  • インスタンス ID がC1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3、および T1 のインスタンス ID でインスタンスを登録することはできません。これらの種類のインスタンスは IP アドレスで登録できます。

  • ロードバランサー VPC とピア接続されている VPC にインスタンスがある場合、そのインスタンスをインスタンス ID で登録することはできません。このようなインスタンスは IP アドレスで登録できます。

ターゲットグループの属性

ターゲット グループの属性は次のとおりです。

deregistration_delay.timeout_seconds

登録解除するターゲットの状態が draining から unused に変わるのを Elastic Load Balancing が待機する時間の長さです。範囲は 0 ~ 3600 秒です。デフォルト値は 300 秒です。

proxy_protocol_v2.enabled

Proxy Protocol バージョン 2 が有効になっているかどうかを示します。Proxy Protocol は、デフォルトで無効になっています。

登録解除の遅延

インスタンスを登録解除すると、ロードバランサーがインスタンスへの新しい接続の作成を停止します。ロードバランサーは Connection Draining を使用して、既存の接続での処理中のトラフィックを完了させます。登録解除されたインスタンスが正常であり、既存の接続がアイドル状態でない場合、ロードバランサーはそのインスタンスへのトラフィックの送信を継続することができます。既存の接続が確実に終了されるようにするには、インスタンスの登録を解除する前に、インスタンスが異常であることを確認するか、クライアント接続を定期的に閉じることができます。

登録解除するターゲットの初期状態は draining です。デフォルトでは、ロードバランサーは登録解除するターゲットの状態を 300 秒後に unused に変更します。登録解除するターゲットの状態が unused に変わるのをロードバランサーが待機する時間の長さを変更するには、登録解除の遅延値を更新します。リクエストを確実に完了するには、120 秒以上の値を指定することをお勧めします。

コンソールを使用して登録解除の遅延値を更新するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [Target Groups] を選択します。

  3. ターゲットグループを選択します。

  4. [Description]、[Edit attributes] を選択します。

  5. 必要に応じて [Deregistration delay] の値を変更し、[Save] を選択します。

AWS CLI を使用して登録解除の遅延値を更新するには

modify-target-group-attributes コマンドを使用します。

Proxy Protocol

Network Load Balancer は、Proxy Protocol バージョン 2 を使用して、送信元と送信先などの追加の接続情報を送信します。Proxy Protocol バージョン 2 は、Proxy Protocol ヘッダーのバイナリエンコードを提供します。ロードバランサーは TCP データにプロキシプロトコルヘッダーを付加します。既存のデータは破棄または上書きされません。これには、ネットワークパスのクライアントまたは他のプロキシ、ロードバランサー、またはサーバーによって送信されたプロキシプロトコルヘッダーが含まれます。したがって、複数のプロキシプロトコルヘッダーを受け取ることができます。また、Network Load Balancer の外部のターゲットへの別のネットワークパスが存在する場合、最初のプロキシプロトコルヘッダーは、Network Load Balancer からのものでない可能性があります。

ターゲットを IP アドレスで指定する場合、アプリケーションに提供される送信元 IP アドレスはロードバランサーノードのプライベート IP アドレスとなります。アプリケーションでクライアントの IP アドレスが必要な場合は、Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得します。

インスタンス ID でターゲットを指定すると、アプリケーションに提供される送信元 IP アドレスは、クライアントの IP アドレスになります。ただし、必要に応じて Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得できます。

ヘルスチェックの接続

Proxy Protocol を有効にした後、Proxy Protocol ヘッダーも、ロードバランサーからのヘルスチェック接続に含まれます。ただし、ヘルスチェック接続では、クライアント接続情報は Proxy Protocol ヘッダーでは送信されません。

VPC エンドポイントサービス

VPC エンドポイントを通じたサービスコンシューマーからのトラフィックの場合、アプリケーションに提供される送信元の IP アドレスは、ロードバランサーノードのプライベート IP アドレスです。アプリケーションでサービスコンシューマーの IP アドレスが必要な場合は、Proxy Protocol を有効にし、Proxy Protocol ヘッダーからその IP アドレスを取得します。

Proxy Protocol ヘッダーには、エンドポイントの ID も含まれています。この情報は、次のようにカスタム Type-Length-Value (TLV) ベクトルを使用してエンコードされます。

フィールド 長さ (オクテット単位) 説明

タイプ

1

PP2_TYPE_AWS (0xEA)

長さ。

2

値の長さ

1

PP2_SUBTYPE_AWS_VPCE_ID (0x01)

変数 (値の長さから 1 を引いた値) エンドポイントの ID

TLV タイプ 0xEA を解析する例については、https://github.com/aws/elastic-load-balancing-tools/tree/master/proprot を参照してください。

Proxy Protocol の有効化

ターゲットグループで Proxy Protocol を有効にする前に、アプリケーションが Proxy Protocol v2 ヘッダーを予期し、解析できることを確認します。それ以外の場合、アプリケーションは失敗する可能性があります。詳細については、「Proxy Protocol バージョン 1 および 2」を参照してください。

コンソールを使用して Proxy Protocol を有効化するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [Target Groups] を選択します。

  3. ターゲットグループを選択します。

  4. [Description]、[Edit attributes] を選択します。

  5. [Enable proxy protocol v2] を選択し、[Save] を選択します。

AWS CLI を使用して Proxy Protocol を有効化するには

modify-target-group-attributes コマンドを使用します。