Amazon Web Services ブログ

Network Load BalancerのターゲットグループにApplication Load Balancerを設定する

この記事は Application Load Balancer-type Target Group for Network Load Balancer(記事公開日: 2021 年 09 月 28 日) を翻訳したものです。

Application Load Balancer(ALB)は、受信したトラフィックをAmazon EC2インスタンスなどの複数のターゲットにロードバランスする、フルマネージドなレイヤ7ロードバランサーサービスです。ALBは、HTTPヘッダやメソッド、クエリ文字列、ホスト、パスベースのルーティングなどのパラメータに基づく、高度なリクエストルーティング機能をサポートしています。また、ALBは、TLSターミネーション、HTTP/2、AWS Web Application Firewall(WAF)の統合など、重要な機能をオフロードします。

Network Load Balancer(NLB)は、TCPとUDPの両方のトラフィックをロードバランスするレイヤ4のロードバランサーサービスです。AWS PrivateLinkをサポートし、ロードバランサーのフロントエンドIPアドレスとして固定IPアドレスをAZごとに提供します。Network Load Blancerは、非常に低い遅延値を維持しながら毎秒数百万のリクエストを処理することができます。

ALBが自動的にスケールアップするのに伴い、ロードバランサーのIPアドレスは動的に変わります。以前、NLBを利用してPrivateLinkの統合やALBのIPアドレスを固定するための方法を提案するブログを公開しました。このソリューションを使用すると、お客様はAWS Lambda関数を活用してALBのIPアドレスをNLBのターゲットとして登録することができます。このソリューションでは、IPアドレスが変更されるとNLBのターゲットIPを更新して、更新されたALB IPアドレスに設定します。この回避策は有効ですが、お客様が管理するコードやサービスが増えてしまいます。

新機能:Network Load Balancerのターゲットグループに、Application Load Balancerを設定できるようになりました

本日、このプロセスを簡素化するために、NLBのターゲットとしてALBを設定できるようになりました。この新機能により、お客様はALBをNLBのターゲットとして直接登録することができ、ALBのIPアドレスの変更を管理する必要がなくなります。これは、新たに導入されたALB型のNLBのターゲットグループを利用することで実現しています。これにより、PrivateLinkとの連携やAZ毎の固定IPアドレス設定などのNLBのメリットと、ALBが提供する高度なルーティングを簡単に組み合わせて、アプリケーションへのトラフィックを負荷分散することが可能になります。


図1: NLBのターゲットにALBを設定したハイレベルアーキテクチャ。PrivateLink、固定IP、マルチプロトコル接続のユースケースをカバー

この機能は、NLBがALBへのTCP接続を受け入れ、ルーティングすることを可能にします。ここでは、本機能の一般的なユースケースを紹介します。

1.AWS PrivateLink for ALB:NLB上でPrivateLinkを利用し、トラフィックをターゲットとなるALBにルーティングすることで、レイヤー7のメリットを享受できます

2.ALB用の固定 IPアドレス:NLBのアベイラビリティーゾーンごとの固定IPアドレスを使用することで、以下のような様々なユースケースで活用できます

  • ファイアウォールルールのIPアドレスの許可リスト
  • DNS Zone apexをALBがフロントとなるアプリケーションに向け、NLBのターゲットとしてALBを利用することで、DNSのAレコードを使ってZone apexをNLBの静的IPアドレスとして解決することができます
  • クライアントがDNSを利用できず、IPアドレスベースでアクセスする必要がある場合

3.Classic Load Balancer (CLB)と同様に、NLBとALBの利点を1つのロードバランシングエンドポイントにまとめることができます。例えば、シグナリングにHTTP、ストリーミングにRTPを使用するマルチメディアサービスなど、マルチプロトコル接続を使用するアプリケーションに有効です

ALBをNLBとPrivateLinkのターゲットとして展開するユースケース


図2:ALBをNLBとPrivateLinkのターゲットとして利用するアーキテクチャ

前提条件

セットアップに入る前に、以下の前提条件が満たされていることをご確認ください。

  • 内部向けまたはインターネット向けのALB
  • ALBがフォワードするターゲットグループ。ターゲットグループには、インスタンス、IP、Lambdaのいずれかのターゲットタイプを設定します
  • ALBとターゲットグループの設定をテストしてから、次のステップに進みます。「Application Load Balancerの作成」から、ALBとターゲットグループの設定方法をご確認いただけます
  • こちらのリンクを参考に、ALBのセキュリティグループの設定を行います

NLBとALB型ターゲットグループの作成

NLBやターゲットグループの作成は、AWSマネジメントコンソールやAWSコマンドラインインターフェイス(CLI)を使って行うことができます。このブログ記事では、AWS Consoleを使って行います。

1.Amazon EC2コンソール(同じリージョン内)を開き、ターゲットグループを選択し、ターゲットグループの作成をクリックして、新しいターゲットグループを作成します。下の図3に示すように、ターゲットタイプとしてApplication Load Balancerを選択します。

図3:ALB型ターゲットグループの作成

2.次に図4に示すように、ターゲットグループの名前を入力し、適切なターゲットポートを設定します。ALB タイプのターゲットグループのポートは、ALB リスナーのポートと一致させる必要があります。また、ALB と同じ VPC を選択します。


図4:ALB型ターゲットグループの詳細設定

3.図5に示すように、ヘルスチェックのプロトコルとしてHTTPまたはHTTPSを選択できます。ヘルスチェックはALBに送信され、指定されたポート、プロトコル、Pingパスを使用してターゲットに転送されます。ヘルスチェックのポートとプロトコルに一致するリスナーを用意して、ALBがこれらのヘルスチェックを受信できるようにします。ヘルスチェックの詳細設定では、非正常のしきい値、タイムアウト、成功コードは変更できません。

図5:ALB型ターゲットグループのヘルスチェック設定

4.図6のドロップダウンメニューから、対象のALBを選択します。ALBタイプのターゲットグループとALBリスナーポートが一致していることを確認してください。設定したら、「ターゲットグループの作成」をクリックします。

図6:ターゲットとなるALBの登録

5.Amazon EC2コンソールを開き、「ロードバランサー」を選択し、「ロードバランサーの作成」をクリックして、NLBを作成します。

6.Network Load Balancerを選択し、「作成」をクリックして、図7のように詳細を入力します。NLB の名前を入力し、ALB と同じ VPC を選択し、NLB のサブネットが ALB と一致することを確認します。任意のリスナーポートでTCPリスナーを選択し、先に作成したALBタイプのターゲットグループへの転送を選択します。

図7.NLBの作成

作成したロードバランサーの状態は、「プロビジョニング」から始まり、「アクティブ」に切り替わります。

PrivateLinkの有効化

NLBの作成に成功し、ALBをターゲットとして登録すると、AWS PrivateLinkを介したNLBへのリクエストがALBに転送されるようになります。それでは、NLBでPrivateLinkを有効にしてみましょう。

1.Amazon EC2コンソールを開き、ナビゲーションペインの「ロードバランシング」で「ロードバランサー」を選択します。
2.図8に示すように、NLBを選択し、「統合サービス」タブを選択します。

3.「エンドポイント サービスの作成」をクリックし、手順に従ってNLB用のエンドポイントサービスを設定します。詳細については、ドキュメントをご覧ください。

4.PrivateLinkのエンドポイントサービスの利用者は、作成したサービスのインタフェース型VPCエンドポイントを作成することができます。詳細については、ドキュメントをご覧ください。

スケーリング、パフォーマンステスト、モニタリング

Elastic Load Balancingは、入力されるトラフィックの負荷に応じて自動的にスケールアップします。積極的にスケールアップし、保守的にスケールダウンします。長年にわたり、私たちはALBのスケーリングを最適化し、数分でスケーリングできるようにしてきました。ブログ記事「Network Load Balancer – Effortless Scaling to Millions of Requests per Second」にあるように、NLBはスピードを重視して構築されており、構築後すぐに毎秒数百万のリクエストを処理することができます。

バックエンドアプリケーションについては、AWS Auto Scaling グループを使用し、各AZに十分なリソースをプロビジョニングすることで、AZに障害が発生しても一貫したユーザーエクスペリエンスが得られるようにすることをお勧めします。Elastic Load BalancingはDNSを使用してクライアントのトラフィック送信先を決定するため、IPアドレス対し直接トラフィックを送信したり、DNSのTTLを無視したりすると、エラーが発生する可能性があります。お客様には、Amazon Route 53のAliasレコードタイプを使用して、ロードバランサーのDNS名にCNAMEを作成するか、Route 53を利用できないDNS zone apexの場合は、NLB上の固定IPアドレスにDNSのAレコードを作成することをお勧めします。

また、この新機能を本番環境に導入する前に、パフォーマンステストを行うことをお勧めします。デフォルトではNLBALBはロードバランサーとターゲットの応答時間を分析するためにAmazon CloudWatchメトリクスを公開しています。負荷テストを実行するために、AWS Solutions LibraryDistributed Load Testing on AWS Solutionをチェックアウトすることができます。これは、AWS CloudFormationテンプレートを使用してデプロイされ、ロードテストを構成するためにAmazon CloudFrontにホストされたシンプルなUIを作成します。

留意事項

この機能を利用する際には、いくつかの注意点があります。

  1. NLBのTLSリスナーは、ALBタイプのターゲットグループに転送できません。TLSを終端させるユースケースがある場合は、ALB上のHTTPSリスナーを使用することをお勧めします
  2. NLBのALBタイプのターゲットグループには、1つのALBしか設定できません
  3. NLBとALBの通信はIPv4でしか行われませんが、ALBにデュアルスタックを設定することができます
  4. NLB の背後に登録されている ALB を削除することはできません。依存関係を解消するためには、まずALBターゲットグループからALBを削除する必要があります
  5. アベイラビリティ、スケーリング、パフォーマンスを最適化するために、ALBターゲットのAZをNLBで有効になっているものと一致させることを強く推奨します

まとめ

このブログ記事では、AWSのお客様が新しいALBタイプのターゲットグループを利用して、NLBの背後にALBを登録できる新機能や設定方法、様々なユースケースを紹介しました。この新機能により、お客様がNLBの重要な機能をALBに拡張することができるようになると期待しています。この機能を利用するには、このページをご覧ください。

Elastic Load Balancingの詳細については、ドキュメントを参照してください。この投稿についてご質問がある場合は、Amazon EC2フォーラムに新しいスレッドを立てるか、AWSサポートにお問い合わせください。

Rohit Aswani

Rohitは、AWSのネットワーキングに特化したスペシャリスト・ソリューション・アーキテクト
として、拡張性、可用性、安全性、耐障害性、コスト効率に優れたネットワークの構築・設計
を支援しています。ノースイースタン大学でコンピュータ・ネットワーキングを専攻し、
テレコミュニケーション・システム・マネジメントの修士号を取得しています。

Eugene Wiehahn

Eugeneは、シカゴを拠点とするAWSのシニアソリューションアーキテクトです。南アフリカの
ケープタウン出身で、AWSのお客様と協力して、お客様が求めるビジネス成果を達成するための
ソリューションを構築しています。余暇は、妻と娘と過ごしています。

本ブログは、ネットワークソリューションアーキテクトの奥村が翻訳しました。原文はこちらです