Network Load Balancers のターゲットグループ - Elastic Load Balancing

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

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

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

ルーティング設定

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

Network Load Balancer のターゲットグループは、次のプロトコルとポートをサポートします。

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

  • ポート: 1 ~ 65535

ターゲットグループに TLS プロトコルが設定されている場合、ロードバランサーは、ターゲットにインストールした証明書を使用して、ターゲットと TLS 接続を確立します。ロードバランサーはこれらの証明書を検証しません。したがって、自己署名証明書または期限切れの証明書を使用できます。ロードバランサーは仮想プライベートクラウド (VPC) 内にあるため、ロードバランサーとターゲット間のトラフィックはパケットレベルで認証されるため、ターゲットの証明書が有効でない場合でも、中間者攻撃やスプーフィングのリスクはありません。

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

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

TCP

TCP | TCP_UDP

インスタンス | ip

HTTP | HTTPS | TCP

TLS

TCP | TLS

インスタンス | ip

HTTP | HTTPS | TCP

UDP

UDP | TCP_UDP

インスタンス | ip

HTTP | HTTPS | TCP

TCP_UDP

TCP_UDP

インスタンス | ip

HTTP | HTTPS | TCP

[Target type (ターゲットタイプ)]

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

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

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 インスタンス

  • AWSIP アドレスとポート (例: データベース) でアドレス可能な リソース

  • AWS Direct Connect または Site-to-Site VPN 接続を介して AWS にリンクされたオンプレミスのリソース

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

Network Load Balancer は、lambda ターゲットタイプをサポートしていません。Application Load Balancer は、lambda ターゲットタイプをサポートする唯一のロードバランサーです。詳細については、Application Load Balancer ユーザーガイドターゲットとしての Lambda 関数を参照してください。

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

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

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

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

インスタンスへのトラフィックの許可の詳細については、ターゲットセキュリティグループ を参照してください。

登録済みターゲット

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

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

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

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

Requirements

  • インスタンスで使用されているインスタンスタイプが C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3、T1 のいずれかである場合、インスタンス ID でインスタンスを登録することはできません。

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

  • ターゲットを IP アドレスで登録し、その IP アドレスがロードバランサーと同じ VPC にある場合、ロードバランサーは、到達可能なサブネットからターゲットがアクセスしていることを確認します。

  • ロードバランサーは、有効になっているアベイラビリティーゾーン内のターゲットのみにトラフィックをルーティングします。有効になっていないゾーン内のターゲットは使用されません。

  • UDP および TCP_UDP ターゲットグループの場合、インスタンスがロードバランサー VPC の外部に存在するか、インスタンスタイプとして C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3、T1 のいずれかを使用しているときは、IP アドレスでインスタンスを登録しないでください。ロードバランサー VPC の外部に存在するか、サポートされていないインスタンスタイプを使用するターゲットは、ロードバランサーからのトラフィックを受信できても、応答できない場合があります。

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

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

deregistration_delay.timeout_seconds

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

deregistration_delay.connection_termination.enabled

ロードバランサーが登録解除タイムアウトの終了時に接続を終了するかどうかを示します。値は true または false です。デフォルト: false

preserve_client_ip.enabled

クライアント IP の保存が有効かどうかを示します。値は true または false です。ターゲットグループの種類が IP アドレスで、ターゲットグループプロトコルが TCP または TLS の場合、デフォルトは無効です。それ以外の場合、デフォルトは有効です。UDP および TCP_UDP ターゲットグループのクライアント IP 保存を無効にすることはできません。

proxy_protocol_v2.enabled

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

stickiness.enabled

スティッキーセッションが有効かどうかを示します。

stickiness.type

維持の種類です。有効な値は source_ip です。

クライアント IP の保存

インスタンス ID でターゲットを指定する場合、すべての受信トラフィックのクライアント IP が保持され、アプリケーションに提供されます。

IP アドレスでターゲットを指定する場合、次の条件が適用されます。

  • ターゲットグループプロトコルが TCP または TLS の場合、クライアント IP 保存はデフォルトで無効です。

  • ターゲットグループプロトコルが UDP および TCP_UDP の場合、クライアント IP 保存はデフォルトで有効です。

TCP および TLS ターゲットグループのクライアント IP 保存を有効または無効にできます。クライアント IP 保存が無効の場合、Network Load Balancer のプライベート IP アドレスは、すべての受信トラフィックのクライアント IP になります。サービスコンシューマーの IP アドレスが必要な場合、ロードバランサーで Proxy Protocol を有効にします。

制約事項と考慮事項

  • クライアント IP 保存が有効の場合、ターゲットは Network Load Balancer と同じ VPC にある必要があります。

  • クライアント IP 保存は、VPC 内の EC2 コンピューティングリソースに指定されたトラフィックに対してのみサポートされます。ただし、C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3、および T1 は除きます。クライアント IP 保存を無効にして、これらのインスタンスタイプを IP アドレスとして登録することをお勧めします。

  • クライアント IP の保存は、 AWS PrivateLink トラフィックには影響しません。 AWS PrivateLink トラフィックの送信元 IP は、常に Network Load Balancer のプライベート IP アドレスです。

  • クライアント IP 保存は、IPv6 から IPv4 に変換されたトラフィックには影響しません。このタイプのトラフィックの送信元 IP は、常に Network Load Balancer のプライベート IP アドレスです。

  • クライアント IP 保存の変更は、新しい TCP 接続に対してのみ有効です。

インスタンス ID でターゲットを指定する場合、ターゲットで確認されたソケットの再利用に関連する TCP/IP 接続の制限が発生することがあります。これらの接続制限が発生する可能性があるのは、クライアント、またはクライアントの前面にある NAT デバイスが、複数のロードバランサーノードに同時に接続する際に、同じ送信元 IP アドレスと送信元ポートを使用する場合です。ロードバランサーがこれらの接続を同じターゲットにルーティングする場合、接続は同じ送信元ソケットからの接続のようにターゲットに表示され、それにより接続エラーが発生します。この場合、クライアントは再試行 (接続が失敗した場合)、または再接続 (接続が中断した場合) できます。このタイプの接続エラーは、送信元の一時ポートの数を増やすか、ロードバランサーのターゲット数を増やすことによって減らすことができます。IP アドレスでターゲットを指定するか、クロスゾーン負荷分散を無効にすると、このタイプの接続エラーを防ぐことができます。

New console

新しいコンソールを使用してクライアント IP 保存を設定するには

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

  2. ナビゲーションペインの [ Load Balancing (ロードバランシング) ] で [ Target Groups (ターゲットグループ) ] を選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [グループの詳細] ページの [属性] セクションで、[編集] を選択します。

  5. クライアント IP 保存を有効にするには、[ クライアントIPアドレスの保持 ]を選択します。クライアント IP 保存を無効にするには、[ クライアント IP アドレスの保持 ] をオフにします。

  6. [Save changes] を選択します。

Old console

古いコンソールを使用してクライアント IP 保存を設定するには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループを選択し、[ 説明 ]、[ 属性の編集] の順に選択します。

  4. クライアント IP 保存を有効にするには、[ クライアントIPアドレスの保持 ]を選択します。クライアント IP 保存を無効にするには、[ クライアント IP アドレスの保持 ] をオフにします。

  5. [Save] を選択します。

AWS CLI を使用してクライアント IP 保存を有効または無効にするには

preserve_client_ip.enabled 属性で modify-target-group-attributes コマンドを使用します 。

たとえば、次のコマンドを使用して、クライアント IP 保存を無効にします。

aws elbv2 modify-target-group-attributes --attributes Key=preserve_client_ip.enabled,Value=false --target-group-arn ARN

出力は次の例のようになります。

{ "Attributes": [ { "Key": "proxy_protocol_v2.enabled", "Value": "false" }, { "Key": "preserve_client_ip.enabled", "Value": "false" }, { "Key": "deregistration_delay.timeout_seconds", "Value": "300" } ]

登録解除の遅延

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

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

接続終了のターゲットグループ属性を有効にすると、登録解除されたターゲットへの接続は、登録解除タイムアウトの終了直後に閉じられます。

New console

新しいコンソールを使用して登録解除属性を更新するには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [グループの詳細] ページの [属性] セクションで、[編集] を選択します。

  5. 登録解除タイムアウトを変更するには、[登録解除の遅延 ] に新しい値を入力します。ターゲットの登録解除後に既存の接続が閉じられるようにするには、「登録解除時に接続終了」を選択します。

  6. [Save changes] を選択します。

Old console

古いコンソールを使用して登録解除属性を更新するには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループを選択し、[ 説明 ]、[ 属性の編集] の順に選択します。

  4. 登録解除タイムアウトを変更するには、[登録解除の遅延 ] に新しい値を入力します。ターゲットの登録解除後に既存の接続が閉じられるようにするには、「登録解除時に接続終了」を選択します。

  5. [Save] を選択します。

AWS CLI を使用して登録解除属性を更新するには

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

Proxy Protocol

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

IP アドレスでターゲットを指定すると、アプリケーションに提供される送信元 IP アドレスは、ターゲットグループのプロトコルに応じて次のように異なります。

  • TCP および TLS: 送信元 IP アドレスは、ロードバランサーノードのプライベート IP アドレスです。クライアントの IP アドレスが必要な場合は、Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得します。

  • UDP および TCP_UDP: 送信元 IP アドレスは、クライアントの 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」を参照してください。

New console

新しいコンソールを使用してプロキシプロトコル v2 を有効にするには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [グループの詳細] ページの [属性] セクションで、[編集] を選択します。

  5. [属性の編集] ページで、[プロキシプロトコル v2] を選択します。

  6. [Save changes] を選択します。

Old console

古いコンソールを使用してプロキシプロトコル v2 を有効にするには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

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

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

  5. [Proxy Protocol v2] で、[有効] を選択します。

  6. [Save] を選択します。

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

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

スティッキーセッション

スティッキーセッションは、クライアントトラフィックをターゲットグループ内の同じターゲットにルーティングするためのメカニズムです。これは、クライアントに連続したエクスペリエンスを提供するために状態情報を維持するサーバーに役立ちます。

Considerations

  • スティッキーセッションを使用すると、接続とフローの分散が不均一になり、ターゲットの可用性に影響する場合があります。たとえば、同じ NAT デバイスの背後にあるすべてのクライアントの送信元 IP アドレスは同じです。したがって、これらのクライアントからのすべてのトラフィックは、同じターゲットにルーティングされます。

  • いずれかのターゲットのヘルス状態が変更されたり、ターゲットグループに対してターゲットを登録または登録解除したりすると、ロードバランサーによってターゲットグループのスティッキーセッションがリセットされる場合があります。

  • スティッキーセッションは、TLS リスナーおよび TLS ターゲットグループではサポートされません。

New console

新しいコンソールを使用してスティッキーセッションを有効にするには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

  3. ターゲットグループの名前を選択して、その詳細ページを開きます。

  4. [グループの詳細] ページの [属性] セクションで、[編集] を選択します。

  5. [属性の編集] ページで、[維持設定] を選択します。

  6. [Save changes] を選択します。

Old console

古いコンソールを使用してスティッキーセッションを有効にするには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ターゲットグループ] を選択します。

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

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

  5. [維持設定] で、[有効化] を選択します。

  6. [Save] を選択します。

AWS CLI を使用してスティッキーセッションを有効にするには

stickiness.enabled 属性を指定して modify-target-group-attributes コマンドを使用します。