Network Load Balancer - Elastic Load Balancing

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Network Load Balancer

ロードバランサーは、クライアントにとって単一の通信先として機能します。クライアントはロードバランサーにリクエストを送信し、ロードバランサーは 1 つ以上のアベイラビリティーゾーンにあるターゲット (EC2 インスタンスなど) にそれらのリクエストを送信します。

ロードバランサーを設定するには、ターゲットグループを作成し、ターゲットグループにターゲットを登録します。有効な各アベイラビリティーゾーンに少なくとも 1 つの登録済みターゲットがあるようにする場合、ロードバランサーが最も効果的です。さらに、リスナーを作成してクライアントからの接続リクエストがないかチェックし、リクエストをクライアントからターゲットグループ内のターゲットにルーティングします。

Network Load Balancers は VPC ピアリング、 AWSマネージド VPN、AWS Direct Connect、およびサードパーティーの VPN ソリューションを経由した接続をサポートします。

ロードバランサーの状態

ロードバランサーの状態は、次のいずれかです。

provisioning

ロードバランサーはセットアップ中です。

active

ロードバランサーは完全にセットアップされており、トラフィックをルーティングする準備ができています。

failed

ロードバランサークラウドをセットアップできませんでした。

ロードバランサーの属性

ロードバランサーには、次の属性があります。

access_logs.s3.enabled

Amazon S3 に保存されたアクセスログが有効かどうかを示します。デフォルト: false

access_logs.s3.bucket

アクセスログの Amazon S3 バケットの名前。この属性は、アクセスログが有効になっている場合は必須です。詳細については、「バケットの要件」を参照してください。

access_logs.s3.prefix

Amazon S3 バケットの場所のプレフィックス。

deletion_protection.enabled

削除保護が有効化されているかどうかを示します。デフォルト: false

ipv6.deny_all_igw_traffic

ロードバランサーへのインターネットゲートウェイ (IGW) アクセスをブロックし、インターネットゲートウェイを経由た内部ロードバランサーへの意図しないアクセスを防止します。インターネット向けロードバランサーでは false、内部ロードバランサーでは true に設定されます。この属性は、インターネットゲートウェイ (IGW) 以外のインターネットアクセス(例えば、ピアリング、Transit Gateway、AWS Direct Connect、または AWS VPN などを経由)を妨げません。

load_balancing.cross_zone.enabled

クロスゾーン負荷分散が有効かどうかを示します。デフォルト: false

dns_record.client_routing_policy

ロードバランサーのアベイラビリティーゾーン間でトラフィックがどのように分散されるかを示します。指定できる値は、ゾーンアフィニティが 100% の availability_zone_affinity、ゾーンアフィニティが 85% の partial_availability_zone_affinity、ゾーンアフィニティが 0% の any_availability_zone です。

IP アドレスタイプ

クライアントがロードバランサーで使用できる IP アドレスのタイプを設定できます。IP アドレスの種類を次に示します。

ipv4

クライアントは IPv4 アドレス (192.0.2.1 など) を使用してロードバランサーに接続する必要があります。IPv4 対応のロードバランサー (インターネット向けと内部向けの両方) では、TCP、UDP、TCP_UDP、および TLS リスナーがサポートされています。

dualstack

クライアントは、IPv4 アドレス (192.0.2.1 など) と IPv6 アドレス (たとえば、2001:0db8:85a3:0:0:8a2e:0370:7334) の両方を使用してロードバランサーに接続できます。デュアルスタック対応のロードバランサー (インターネット向けと内部向けの両方) では、TCP および TLS リスナーがサポートされています。

デュアルスタックロードバランサーに関する考慮事項
  • ロードバランサーは、ターゲットグループの IP アドレスのタイプに基づいてターゲットと通信します。

  • ロードバランサーのデュアルスタックモードを有効にすると、Elastic Load Balancing がロードバランサーの AAAA DNS レコードを提供します。IPv4 アドレスを使用してロードバランサーと通信するクライアントは、A DNS レコードを解決します。IPv6 アドレスを使用してロードバランサーと通信するクライアントは、AAAA DNS レコードを解決します。

  • インターネットゲートウェイを経由する内部デュアルスタックロードバランサーへのアクセスがブロックされ、意図しないインターネットアクセスを防止します。ただし、これはインターネットアクセス(ピアリング、Transit Gateway、AWS Direct Connect、AWS VPN などを経由)を妨げることはありません。

ロードバランサーの IP アドレスタイプの詳細については、アドレスタイプの更新 を参照してください。

アベイラビリティーゾーン

ロードバランサーを作成するときに、ロードバランサーの 1 つまたは複数のアベイラビリティーゾーンを有効にします。ロードバランサーで複数のアベイラビリティーゾーンを有効にすると、アプリケーションの耐障害性が向上します。Network Load Balancer の作成後にそのアベイラビリティーゾーンを無効にすることはできませんが、追加のアベイラビリティーゾーンを有効にすることはできます。

アベイラビリティーゾーンを有効にしたら、そのアベイラビリティーゾーンからサブネットを 1 つ指定します。Elastic Load Balancing はアベイラビリティーゾーンにロードバランサーノードを作成し、サブネットのネットワークインターフェイスを作成します (「ELB net」で始まり、ロードバランサーの名前を含む記述)。アベイラビリティーゾーンの各ロードバランサーノードは、このネットワークインターフェイスを使用して IPv4 アドレスを取得します。このネットワークインターフェイスは表示できますが、変更することはできません。

インターネット向けのロードバランサーを作成する場合は、必要に応じて 1 つの Elastic IP アドレスをサブネットごとに指定することができます。独自の Elastic IP アドレスのいずれも選択しない場合、Elastic Load Balancing はサブネットごとに 1 つの Elastic IP アドレスを提供します。これらの Elastic IP アドレスは、ロードバランサーの存続期間中は変更されない静的 IP アドレスをロードバランサーに提供します。ロードバランサーを作成した後で、これらの Elastic IP アドレスを変更することはできません。

内部ロードバランサーを作成する場合は、必要に応じて 1 つの プライベート IP アドレスをサブネットごとに指定することができます。サブネットから IP アドレスを指定しない場合は、Elastic Load Balancing によって選択されます。これらのプライベート IP アドレスは、ロードバランサーの存続期間中は変更されない静的 IP アドレスをロードバランサーに提供します。ロードバランサーを作成した後で、これらのプライベート IP アドレスを変更することはできません。

考慮事項
  • インターネット向けロードバランサーの場合、指定するサブネットには最低 8 個の利用可能な IP アドレスが必要です。内部ロードバランサーの場合は、 AWS がサブネットからプライベート IPv4 アドレスを選択する場合にのみ必要です。

  • 制約のあるアベイラビリティーゾーンにあるサブネットを指定することはできません。エラーメッセージは、「'network' タイプを使用したロードバランサーは az_name でサポートされていません」です。制約されていない別のアベイラビリティーゾーンにあるサブネットを指定し、クロスゾーン負荷分散を使用して、制約されているアベイラビリティーゾーンのターゲットにトラフィックを分散することはできます。

  • 自分と共有されているサブネットを指定できます。

  • ローカルゾーンでサブネットを指定することはできません。

アベイラビリティーゾーンを有効にしたら、ロードバランサーはこれらのアベイラビリティーゾーン内の登録済みターゲットにリクエストをルーティングするようになります。有効な各アベイラビリティーゾーンに少なくとも 1 つの登録済みターゲットがあるようにする場合、ロードバランサーが最も効果的です。

コンソールを使用してアベイラビリティーゾーンを追加するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[ロードバランサー] を選択します。

  3. ロードバランサーの名前を選択して、その詳細ページを開きます。

  4. [Network mapping] (ネットワークマッピング) タブで、[Edit subnets] (サブネットの編集) を選択します。

  5. アベイラビリティーゾーンを有効にするには、そのアベイラビリティーゾーンのチェックボックスをオンにします。そのアベイラビリティーゾーンに対して 1 つのサブネットがある場合、そのサブネットが選択されます。そのアベイラビリティーゾーンに複数のサブネットがある場合は、いずれかのサブネットを選択します。アベイラビリティーゾーンにつき、1 つのサブネットしか選択できないことに注意してください。

    インターネット向けロードバランサーの場合は、各アベイラビリティーゾーンに Elastic IP アドレスを選択できます。内部ロードバランサーの場合、プライベート IP アドレスを Elastic Load Balancing で割り当てるのではなく、各サブネットの IPv4 範囲から割り当てることができます。

  6. [変更の保存] をクリックします。

AWS CLI を使用してアベイラビリティーゾーンを追加するには

set-subnets コマンドを使用します。

クロスゾーン負荷分散

デフォルトでは、各ロードバランサーノードは、アベイラビリティーゾーン内の登録済みターゲット間でのみトラフィックを分散します。クロスゾーンロードバランサーをオンにすると、各ロードバランサーノードは、有効なすべてのアベイラビリティーゾーンの登録済みターゲットにトラフィックを分散します。ターゲットグループレベルでクロスゾーンロードバランサーを有効にすることもできます。詳細については、「Elastic Load Balancing ユーザーガイド」の「ターゲットグループに対するクロスゾーン負荷分散」および「クロスゾーンロードバランサー」を参照してください。

削除保護

ロードバランサーが誤って削除されるのを防ぐため、削除保護を有効にできます。デフォルトでは、ロードバランサーで削除保護が無効になっています。

ロードバランサーの削除保護を有効にした場合、ロードバランサーを削除する前に無効にする必要があります。

コンソールを使用して削除保護を有効にするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[ロードバランサー] を選択します。

  3. ロードバランサーの名前を選択して、その詳細ページを開きます。

  4. [属性] タブで、[編集] を選択します。

  5. [構成] で、[削除保護] をオンにします。

  6. [変更の保存] をクリックします。

コンソールを使用して削除保護を無効にするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[ロードバランサー] を選択します。

  3. ロードバランサーの名前を選択して、その詳細ページを開きます。

  4. [属性] タブで、[編集] を選択します。

  5. [構成] で、[削除保護] をオンにします。

  6. [変更の保存] をクリックします。

AWS CLI を使用して削除保護を有効または無効にするには

deletion_protection.enabled 属性を指定して modify-load-balancer-attributes コマンドを使用します。

接続のアイドルタイムアウト

クライアントが Network Load Balancer を通じて行う TCP リクエストごとに、その接続の状態が追跡されます。アイドルタイムアウトよりも長い時間、クライアントからもターゲットからもその接続経由でデータが送信されない場合、接続は閉じられます。アイドルタイムアウト期間の経過後にクライアントまたはターゲットがデータを送信した場合、TCP RST パケットを受信して、接続が無効になったことを示します。

TCP フローのアイドルタイムアウト値を 350 秒に設定します。この値は変更できません。クライアントまたはターゲットは TCP キープアライブパケットを使用して、アイドルタイムアウトをリセットできます。TLS 接続を維持するために送信されるキープアライブパケットには、データまたはペイロードを含めることはできません。

TLS リスナーがクライアントまたはターゲットのいずれかから TCP キープアライブパケットを受信すると、ロードバランサーは TCP キープアライブパケットを生成し、20 秒ごとにフロントエンド接続とバックエンド接続の両方に送信します。この動作を変更することはできません。

UDP はコネクションレスですが、ロードバランサーは送信元と宛先のIPアドレスとポートに基づいて UDP フロー状態を維持します。これにより、同じフローに属するパケットが一貫して同じターゲットに一貫して同じターゲットに送信されます。アイドルタイムアウト期間が経過した後、ロードバランサーは着信 UDP パケットを新しいフローとみなし、それを新しいターゲットにルーティングします。Elastic Load Balancing は、UDP フローのアイドルタイムアウト値を 120 秒に設定します。

EC2 インスタンスは、リターンパスを確立するために、30 秒以内に新しいリクエストに応答する必要があります。

DNS 名

各 Network Load Balancer は、name-id.elb.region.amazonaws.com の構文でデフォルトのドメインネームシステム (DNS) 名を受け取ります。例えば、 my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com。

覚えやすい DNS 名を使用する場合は、カスタムドメイン名を作成し、ロードバランサーの DNS 名に関連付けることができます。このカスタムドメイン名を使用してクライアントがリクエストを生成すると、DNS サーバーがロードバランサーの DNS 名に解決します。

最初に、認定ドメイン名レジストラにドメイン名を登録します。次に、ドメインレジストラなどの DNS サービスを使用して、ロードバランサーにリクエストをルーティングするための DNS レコードを作成します。詳細については、DNS サービスのドキュメントを参照してください。例えば、DNS サービスとして Amazon Route 53 を使用する場合は、ロードバランサーをポイントするエイリアスレコードを作成します。詳細については、Amazon Route 53 デベロッパーガイド ELB ロードバランサーへのトラフィックのルーティングを参照してください。

ロードバランサーには、有効なアベイラビリティーゾーンごとに 1 つの IP アドレスがあります。これらはロードバランサーノードの IP アドレスです。ロードバランサーの DNS 名はこれらのアドレスに解決されます。たとえば、ロードバランサーのカスタムドメイン名が example.networkloadbalancer.com であるとします。以下の dig または nslookup コマンドを使用して、ロードバランサーノードの IP アドレスを調べます。

Linux または Mac

$ dig +short example.networkloadbalancer.com

Windows

C:\> nslookup example.networkloadbalancer.com

ロードバランサーには、ロードバランサーノードの DNS レコードがあります。次の構文の DNS 名 (az.name-id.elb.region.amazonaws.com) を使用して、ロードバランサーノードの IP アドレスを調べることができます。

Linux または Mac

$ dig +short us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com

Windows

C:\> nslookup us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com

アベイラビリティゾーン DNS アフィニティー

デフォルトのクライアントルーティングポリシーを使用すると、Network Load Balancer DNS 名に送信されたリクエストには、正常なロードバランサーの IP アドレスがすべて届きます。これにより、ロードバランサーのアベイラビリティーゾーン全体にクライアント接続が分散されます。アベイラビリティーゾーンのアフィニティールーティングポリシーでは、クライアント DNS クエリは自身のアベイラビリティーゾーン内のロードバランサー IP アドレスを優先します。これにより、クライアントがターゲットに接続する際にアベイラビリティーゾーンの境界を越える必要がなくなるため、レイテンシーと回復性の両方が向上します。

Route 53 リゾルバーを使用してネットワークロードバランサーで使用できるクライアントルーティングポリシー:
  • アベイラビリティーゾーンのアフィニティ — 100% のゾーンアフィニティ

    クライアントの DNS クエリでは、自身のアベイラビリティーゾーンのロードバランサーの IP アドレスが優先されます。自身のゾーンに正常なロードバランサー IP アドレスがない場合、クエリは他のゾーンで解決される可能性があります。

  • 部分的アベイラビリティーゾーンのアフィニティ — 85% のゾーンアフィニティ

    クライアントの DNS クエリの 85% は自身のアベイラビリティーゾーンにあるロードバランサーの IP アドレスを優先し、残りのクエリは正常な任意のゾーンで解決されます。自身のゾーンに正常な IP がない場合、クエリは他の正常なゾーンで解決される可能性があります。どのゾーンにも正常な IP がない場合、クエリは任意のゾーンで解決されます。

  • 任意のアベイラビリティーゾーンのアフィニティ — 0% のゾーンアフィニティ

    クライアント DNS クエリは、すべてのロードバランサーアベイラビリティーゾーンの正常なロードバランサー IP アドレスで解決されます。

注記

アベイラビリティーゾーンのアフィニティールーティングポリシーは、Route 53 Resolver を使用してネットワークロードバランサーの DNS 名を解決するクライアントにのみ適用されます。Route 53 リゾルバーの詳細については、「Amazon Route 53 デベロッパーガイド」の「Amazon Route 53 Resolver とは?」を参照してください。

アベイラビリティーゾーンのアフィニティはクライアントからロードバランサーにリクエストをルーティングするのに役立ち、クロスゾーン負荷分散はロードバランサーからターゲットにリクエストをルーティングするのに役立ちます。アベイラビリティーゾーンのアフィニティを使用する場合、クロスゾーン負荷分散をオフにする必要があります。これにより、クライアントからターゲットへのロードバランサートラフィックは同じアベイラビリティーゾーン内に留まります。この設定では、クライアントトラフィックは同じ Network Load Balancer アベイラビリティーゾーンに送信されるため、各アベイラビリティーゾーンで個別にスケーリングするようにアプリケーションを設定することをお勧めします。これは、アベイラビリティーゾーンあたりのクライアント数、またはアベイラビリティーゾーンあたりのトラフィックが同じでない場合の重要な考慮事項です。詳細については、「ターゲットグループに対するクロスゾーン負荷分散」を参照してください。

アベイラビリティーゾーンに異常があると見なされた場合や、ゾーンシフトが開始された場合は、フェールオープンが有効でない限り、ゾーン IP アドレスは異常と見なされ、クライアントには返されません。DNS レコードがオープンに失敗しても、アベイラビリティーゾーンのアフィニティは維持されます。これにより、アベイラビリティーゾーンの独立性が保たれ、ゾーン間で発生する可能性のある障害を防ぐことができます。

アベイラビリティーゾーンのアフィニティを使用すると、アベイラビリティーゾーン間でバランスが崩れることが予想されます。各アベイラビリティーゾーンのワークロードをサポートするために、ターゲットがゾーンレベルでスケーリングされていることを確認することをお勧めします。これらの不均衡が著しい場合は、アベイラビリティーゾーンのアフィニティをオフにすることをお勧めします。これにより、60 秒以内、つまり DNS TTL の範囲内で、すべてのロードバランサーのアベイラビリティーゾーン間でクライアント接続を均等に分散できます。

アベイラビリティゾーンアフィニティを使用する前に、以下の点を考慮してください。
  • アベイラビリティーゾーンのアフィニティにより、Route 53 Resolver を使用しているすべての Network Load Balancer クライアントに変化が生じます。

    • クライアントは、ゾーンローカル DNS 解決とマルチゾーン DNS 解決を区別できません。アベイラビリティーゾーンのアフィニティが判断します。

    • アベイラビリティーゾーンのアフィニティの影響を受けるタイミングや、どの IP アドレスがどのアベイラビリティーゾーンにあるかを知る信頼できる方法がクライアントには提供されません。

  • DNS ヘルスチェックにより完全に異常であると判断され、DNS から削除されるまで、クライアントはゾーンローカル IP アドレスに割り当てられたままになります。

  • クロスゾーン負荷分散がオンになっているアベイラビリティーゾーンのアフィニティを使用すると、アベイラビリティーゾーン間のクライアント接続の分散が不均衡になる可能性があります。各アベイラビリティーゾーンで個別にスケールするようにアプリケーションスタックを設定し、アプリケーションスタックがゾーンクライアントのトラフィックをサポートできるようにすることをお勧めします。

  • クロスゾーン負荷分散がオンになっている場合、Network Load Balancer はクロスゾーンの影響を受けます。

  • Network Load Balancer の各アベイラビリティーゾーンの負荷は、クライアントのリクエストのゾーンロケーションに比例します。どのアベイラビリティーゾーンで、いくつのクライアントを実行するかを設定しない場合は、各アベイラビリティーゾーンを事後的に個別にスケーリングする必要があります。

モニタリング

ゾーンロードバランサーメトリクスを使用して、アベイラビリティーゾーン間の接続の分散を追跡することをお勧めします。メトリクスを使用して、ゾーンごとの新規接続数およびアクティブ接続数を表示できます。

次の点を追跡することをおすすめします。

  • ActiveFlowCount – クライアントからターゲットへの同時フロー (または接続) の合計数。

  • NewFlowCount – 期間内にクライアントからターゲットに確立された新しいフロー (または接続) の合計数。

  • HealthyHostCount – 正常と見なされるターゲットの数。

  • UnHealthyHostCount – 異常とみなされるターゲットの数。

詳細については、「CloudWatch Network Load Balancer の メトリクス」を参照してください。

アベイラビリティーゾーンのアフィニティをオンにする

この手順のステップでは、Amazon EC2 コンソールでアベイラビリティーゾーンのアフィニティをオンにする方法について説明します。

コンソールを使用してアベイラビリティゾーンのアフィニティを有効にするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[ロードバランサー] を選択します。

  3. ロードバランサーの名前を選択して、その詳細ページを開きます。

  4. [属性] タブで、[編集] を選択します。

  5. [アベイラビリティーゾーンのルーティング設定] の [クライアントルーティングポリシー (DNS レコード)] で、[アベイラビリティーゾーンのアフィニティ] または [Partial Availability Zone affinity] (部分的アベイラビリティーゾーンのアフィニティ) を選択します。

  6. [変更の保存] をクリックします。

AWS CLI を使用してアベイラビリティーゾーンのアフィニティを有効にするには

dns_record.client_routing_policy 属性を指定して modify-load-balancer-attributes コマンドを使用します。

アベイラビリティーゾーンのアフィニティをオフにする

この手順のステップでは、Amazon EC2 コンソールでアベイラビリティーゾーンのアフィニティをオフにする方法について説明します。

コンソールを使用してアベイラビリティゾーンのアフィニティをオフにするには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[ロードバランサー] を選択します。

  3. ロードバランサーの名前を選択して、その詳細ページを開きます。

  4. [属性] タブで、[編集] を選択します。

  5. [アベイラビリティーゾーンのルーティング設定] の [クライアントルーティングポリシー (DNS レコード)] で、[Any Availability Zone] (任意のアベイラビリティーゾーン) を選択します。

  6. [変更の保存] をクリックします。

AWS CLI を使用してアベイラビリティーゾーンのアフィニティをオフにするには

dns_record.client_routing_policy 属性を指定して modify-load-balancer-attributes コマンドを使用します。