Network Load Balancer のターゲットグループ属性を編集する
Network Load Balancer のターゲットグループを作成したら、そのターゲットグループ属性を編集できます。
クライアント IP の保存
Network Load Balancer は、リクエストをバックエンドターゲットにルーティングするときに、クライアントのソース IP アドレスを保持できます。クライアント IP 保存を無効にした場合、Network Load Balancer のプライベート IP アドレスが送信元 IP アドレスになります。
デフォルトでは、UDP プロトコルと TCP_UDP プロトコルを使用するインスタンスおよび IP タイプのターゲットグループに対して、クライアント IP の保存が有効になっています (無効にすることはできません)。ただし、preserve_client_ip.enabled
ターゲットグループ属性を使用して、TCP および TLS ターゲットグループのクライアント IP の保存を有効または無効にできます。
デフォルト設定
-
インスタンスタイプのターゲットグループ: 有効
-
IP タイプのターゲットグループ (UDP、TCP_UDP): 有効
-
IP タイプのターゲットグループ (TCP、TLS): 無効
要件と考慮事項
-
クライアント IP 保存を有効にした場合、トラフィックは Network Load Balancer からターゲットに直接フローする必要があります。ターゲットは、Network Load Balancer と同じ VPC 内、または同じリージョン内のピア接続 VPC 内に配置されている必要があります。
-
ターゲットが Network Load Balancer と同じ Amazon VPC にあっても、ゲートウェイロード バランサーエンドポイントを使用して Network Load Balancer とターゲット (インスタンスまたは IP) の間のトラフィックを検査する場合、クライアント IP の保持はサポートされません。
-
インスタンスタイプが C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3、T1である場合、クライアント IP 保存をサポートしません。クライアント IP 保存を無効にして、これらのインスタンスタイプを IP アドレスとして登録することをお勧めします。
-
クライアント IP の保存は、AWS PrivateLink からのインバウンドトラフィックには影響しません。AWS PrivateLinkトラフィックの送信元 IP は、常に Network Load Balancer のプライベート IP アドレスです。
-
ターゲットグループに、AWS PrivateLink ENI または別のNetwork Load Balancer の ENI が含まれている場合、クライアント IP の保存はサポートされません。これにより、それらのターゲットとの通信が失われます。
-
クライアント IP 保存は、IPv6 から IPv4 に変換されたトラフィックには影響しません。このタイプのトラフィックの送信元 IP は、常に Network Load Balancer のプライベート IP アドレスです。
-
Application Load Balancer タイプでターゲットを指定すると、すべての着信トラフィックのクライアント IP が Network Load Balancer によって保存され、Application Load Balancer に送信されます。次に、Application Load Balancer は、それをターゲットに送信する前にクライアント IP を
X-Forwarded-For
リクエストに追加します。 -
クライアント IP 保存の変更は、新しい TCP 接続に対してのみ有効です。
-
NAT ループバック(ヘアピニングとも呼ばれる)は、クライアント IP 保存が有効になっている場合はサポートされません。有効な場合、ターゲットで確認されたソケットの再利用に関連する TCP/IP 接続の制限が発生することがあります。これらの接続制限が発生する可能性があるのは、クライアント、またはクライアントの前面にある NAT デバイスが、複数のロードバランサーノードに同時に接続する際に、同じ送信元 IP アドレスと送信元ポートを使用する場合です。ロードバランサーがこれらの接続を同じターゲットにルーティングする場合、接続は同じ送信元ソケットからの接続のようにターゲットに表示され、それにより接続エラーが発生します。この場合、クライアントは再試行 (接続が失敗した場合)、または再接続 (接続が中断した場合) できます。このタイプの接続エラーは、送信元の一時ポートの数を増やすか、ロードバランサーのターゲット数を増やすことによって減らすことができます。このタイプの接続エラーは、クライアント IP の保存を無効にするか、クロスゾーン負荷分散を無効にすることで防止できます。
-
クライアント IP の保存が無効な場合、Network Load Balancer は一意の各ターゲット (IP アドレスとポート) に対して 55,000 の同時接続または 1 分あたり約 55,000 の接続をサポートします。これらの接続数を超えた場合、ポート割り当てエラーが発生する可能性が高くなり、新しい接続を確立できなくなることがあります。ポート割り当てエラーは、
PortAllocationErrorCount
メトリクスを使用して追跡できます。ポート割り当てエラーを修正するには、ターゲットグループにさらに多くのターゲットを追加します。詳細については、「Network Load Balancer の CloudWatch メトリクス」を参照してください。
コンソールを使用してクライアント IP 保存を設定するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ Load Balancing (ロードバランシング) ] で [ Target Groups (ターゲットグループ) ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[Attributes] タブで、[Edit] を選択します。
-
クライアント IP 保存を有効にするには、[Preserve client IP addresses] (クライアント IP アドレスの保持) をオンにします。クライアント IP 保存を無効にするには、[Preserve client IP addresses] (クライアント IP アドレスの保持) をオフにします。
-
[Save changes] (変更の保存) をクリックします。
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-arnARN
出力は次の例のようになります。
{
"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 秒以上の値を指定することをお勧めします。
接続終了のターゲットグループ属性を有効にすると、登録解除されたターゲットへの接続は、登録解除タイムアウトの終了直後に閉じられます。
コンソールを使用して登録解除属性を更新するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ Load Balancing (ロードバランシング) ] で [ Target Groups (ターゲットグループ) ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[Attributes] タブで、[Edit] を選択します。
-
登録解除タイムアウトを変更するには、[登録解除の遅延 ] に新しい値を入力します。ターゲットの登録解除後に既存の接続が閉じられるようにするには、[Terminate connections on deregistration] (登録解除時に接続終了) を選択します。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用して登録解除属性を更新するには
modify-target-group-attributes コマンドを使用します。
Proxy Protocol
Network Load Balancer は、プロキシプロトコルバージョン 2 を使用して、送信元と送信先などの追加の接続情報を送信します。Proxy Protocol バージョン 2 は、Proxy Protocol ヘッダーのバイナリエンコードを提供します。ロードバランサーは、TCP リスナーを使用して TCP データにプロキシプロトコルヘッダーを付加します。既存のデータは破棄または上書きされません。これには、ネットワークパスのクライアントまたは他のプロキシ、ロードバランサー、またはサーバーによって送信された受信プロキシプロトコルヘッダーが含まれます。したがって、複数のプロキシプロトコルヘッダーを受け取ることができます。また、Network Load Balancer の外部のターゲットへの別のネットワークパスが存在する場合、最初のプロキシプロトコルヘッダーは、Network Load Balancer からのものでない可能性があります。
IP アドレスでターゲットを指定すると、アプリケーションに提供される送信元 IP アドレスは、ターゲットグループのプロトコルに応じて次のように異なります。
-
TCP と TLS: デフォルトでは、クライアント IP 保存は無効になっており、アプリケーションに提供される送信元 IP アドレスはロードバランサーノードのプライベート IP アドレスです。クライアントの IP アドレスを保存するには、ターゲットが同じ VPC 内またはピア接続 VPC 内にあり、クライアント IP 保存が有効になっていることを確認します。クライアントの IP アドレスが必要で、これらの条件が満たされていない場合は、プロキシプロトコルを有効にし、プロキシプロトコルヘッダーからクライアント IP アドレスを取得します。
-
UDP と TCP_UDP: クライアント IP 保存はこれらのプロトコルではデフォルトで有効になっており、無効にすることはできないため、送信元 IP アドレスはクライアントの IP アドレスです。インスタンス ID でターゲットを指定すると、アプリケーションに提供される送信元 IP アドレスは、クライアントの IP アドレスになります。ただし、必要に応じて Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得できます。
インスタンス ID でターゲットを指定すると、アプリケーションに提供される送信元 IP アドレスは、クライアントの IP アドレスになります。ただし、必要に応じて Proxy Protocol を有効にし、Proxy Protocol ヘッダーからクライアント IP アドレスを取得できます。
注記
TLS リスナーは、クライアントまたはその他のプロキシから送信されたプロキシプロトコルヘッダーを含む受信接続をサポートしていません。
ヘルスチェックの接続
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
コンソールを使用してプロキシプロトコル v2 を有効にするには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ Load Balancing (ロードバランシング) ] で [ Target Groups (ターゲットグループ) ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[Attributes] タブで、[Edit] を選択します。
-
[属性の編集] ページで、[プロキシプロトコル v2] を選択します。
-
[Save changes] を選択します。
AWS CLI を使用して Proxy Protocol v2 を有効化するには
modify-target-group-attributes コマンドを使用します。
スティッキーセッション
スティッキーセッションは、クライアントトラフィックをターゲットグループ内の同じターゲットにルーティングするためのメカニズムです。これは、クライアントに連続したエクスペリエンスを提供するために状態情報を維持するサーバーに役立ちます。
考慮事項
-
スティッキーセッションを使用すると、接続とフローの分散が不均一になり、ターゲットの可用性に影響する場合があります。たとえば、同じ NAT デバイスの背後にあるすべてのクライアントの送信元 IP アドレスは同じです。したがって、これらのクライアントからのすべてのトラフィックは、同じターゲットにルーティングされます。
-
いずれかのターゲットのヘルス状態が変更されたり、ターゲットグループに対してターゲットを登録または登録解除したりすると、ロードバランサーによってターゲットグループのスティッキーセッションがリセットされる場合があります。
-
ターゲットグループに対して維持属性が有効になっている場合、パッシブヘルスチェックはサポートされません。詳細については、「ターゲットグループのヘルスチェック」を参照してください。
-
スティッキーセッションは、 TLS リスナーでサポートされません。
コンソールを使用してスティッキーセッションを有効にするには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ Load Balancing (ロードバランシング) ] で [ Target Groups (ターゲットグループ) ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[Attributes] タブで、[Edit] を選択します。
-
[Target selection configuration] (ターゲット選択設定) で、[Stickiness] (スティッキネス) をオンにします。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用してスティッキーセッションを有効にするには
stickiness.enabled
属性を指定して modify-target-group-attributes コマンドを使用します。
ターゲットグループに対するクロスゾーン負荷分散
ロードバランサーのノードは、クライアントからのリクエストを登録済みターゲットに分散させます。クロスゾーンロードバランサーがオンの場合、各ロードバランサーノードは、すべての登録済みアベイラビリティーゾーンの登録済みターゲットにトラフィックを分散します。クロスゾーンロードバランサーがオフの場合、各ロードバランサーノードは、そのアベイラビリティーゾーンの登録済みターゲットのみにトラフィックを分散します。これは、ゾーンの障害ドメインがリージョナルドメインよりも優先される場合に使用できます。これにより、正常なゾーンが異常なゾーンの影響を受けないようにしたり、全体的なレイテンシーを改善したりすることができます。
Network Load Balancer では、クロスゾーンロードバランサーは、ロードバランサーレベルでのデフォルトでオフになっていますが、いつでもオンにすることができます。ターゲットグループの場合、デフォルトではロードバランサー設定を使用しますが、ターゲットグループレベルでクロスゾーンロードバランサーを明示的にオンまたはオフにすることでデフォルトを上書きできます。
考慮事項
-
Network Load Balancer のクロスゾーン負荷分散を有効にする場合、EC2 データ転送料金が適用されます。詳細については、「AWS Data Exports ユーザーガイド」の「データ転送料金について」を参照してください。
-
ターゲットグループ設定によって、ターゲットグループのロードバランサー動作が決まります。たとえば、クロスゾーンロードバランサーがロードバランサーレベルで有効で、ターゲットグループレベルで無効になっている場合、ターゲットグループに送信されるトラフィックはアベイラビリティーゾーン間でルーティングされません。
-
クロスゾーンロードバランサーがオフの場合は、各ゾーンが関連するワークロードを処理できるように、各ロードバランサーのアベイラビリティーゾーンに十分なターゲット容量があることを確認してください。
-
クロスゾーンロードバランサーがオフになっている場合は、すべてのターゲットグループが同じアベイラビリティーゾーンの参加になっていることを確認してください。空のアベイラビリティーゾーンは異常であるとみなされます。
ロードバランサーに関連するクロスゾーンロードバランサーを変更する
クロスゾーンロードバランサーは、いつでもロードバランサーレベルでオンまたはオフにすることができます。
コンソールを使用してロードバランサーに関連するクロスゾーンロードバランサーを変更するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [Load Balancing] で、[Load Balancers] を選択します。
-
ロードバランサーの名前を選択して、その詳細ページを開きます。
-
[属性] タブで、[編集] を選択します。
-
[Edit load balancer attributes] (ロードバランサー属性の編集) ページで、[Cross-zone load balancing] (クロスゾーンロードバランサー) をオンまたはオフにします。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用してロードバランサーに関連するクロスゾーンロードバランサーを変更するには
load_balancing.cross_zone.enabled
属性を指定して modify-load-balancer-attributes コマンドを使用します。
ターゲットグループのクロスゾーンロードバランサーを変更する
ターゲットグループレベルに対する、クロスゾーン負荷分散の設定は、ロードバランサーレベルの設定よりも優先されます。
ターゲットグループタイプが instance
または ip
の場合、ターゲットグループレベルでクロスゾーンロードバランシングをオンまたはオフにすることができます。ターゲットグループタイプが alb
の場合、ターゲットグループは常にロードバランサーからクロスゾーンロードバランシング設定を継承します。
コンソールを使用してターゲットグループのクロスゾーンロードバランサーを変更するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [Load Balancing] (ロードバランサー) で [Target Groups] (ターゲットグループ) を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[属性] タブで、[編集] を選択します。
-
[Edit target group attributes] (ターゲットグループ属性の編集) ページで、[Cross-zone load balancing] (クロスゾーンロードバランサー) で [On] (オン) を選択します。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用してターゲットグループのクロスゾーンロードバランサーを変更するには
load_balancing.cross_zone.enabled
属性を指定して modify-target-group-attributes コマンドを使用します。
異常のあるターゲットの接続終了
接続の終了はデフォルトで有効になっています。Network Load Balancer のターゲットが設定されたヘルスチェックに失敗し、正常でないと見なされると、ロードバランサーは確立された接続を終了し、ターゲットへの新しい接続のルーティングを停止します。接続終了を無効にしても、ターゲットは異常と見なされて新しい接続を受信しませんが、確立された接続はアクティブなままなので、正常に閉じることができます。
異常のあるターゲットの接続終了は、ターゲットグループごとに個別に設定できます。
コンソールを使用して接続終了設定を変更するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ロードバランシング] で [ターゲットグループ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[Attributes] タブで、[Edit] を選択します。
-
[Target unhealthy state management] の下で、[Terminate connections when targets become unhealthy] を有効にするか無効にするかを選択します。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用して接続終了設定を変更するには
target_health_state.unhealthy.connection_termination.enabled
属性を指定して modify-target-group-attributes コマンドを使用します。
異常なドレイニング間隔
重要
異常なドレイニング間隔を有効にする前に、接続の終了を無効にする必要があります。
unhealthy.draining
状態のターゲットは異常と見なされ、新しい接続を受信しませんが、設定された間隔の間は確立された接続が保持されます。異常な接続間隔によって、ターゲットが unhealthy
状態になるまで unhealthy.draining
状態のまま維持する時間が決まります。異常な接続間隔の間にターゲットがヘルスチェックに合格すると、その状態は再び healthy
になります。登録解除がトリガーされると、ターゲットの状態が draining
になり、登録解除遅延タイムアウトが開始されます。
異常なドレイニング間隔は、ターゲットグループごとに個別に設定できます。
コンソールを使用して異常なドレイニング間隔を変更するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ロードバランシング] で [ターゲットグループ] を選択します。
-
ターゲットグループの名前を選択して、その詳細ページを開きます。
-
[Attributes] タブで、[Edit] を選択します。
-
[Target unhealthy state management] (ターゲットの異常状態の管理) で、[Terminate connections when targets become unhealthy] (ターゲットが異常になったら接続を終了する) がオフになっていることを確認します。
-
[異常なドレイニング間隔] の値を入力します。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用して異常なドレイニング間隔を変更するには
target_health_state.unhealthy.draining_interval_seconds
属性を指定して modify-target-group-attributes コマンドを使用します。