Amazon Web Services ブログ
AWS PrivateLink とデュアルスタック Network Load Balancer の UDP サポートにより IPv6 アプリケーションへの移行を加速
本稿では、AWS PrivateLink の User Datagram Protocol (UDP) サービスサポートを活用し、デュアルスタック Network Load Balancer (NLB) の UDP サポートにより Internet Protocol version 6 (IPv6) への移行を加速する方法について解説します。2つの新機能の設定手順やユースケース、既存環境に統合するためのベストプラクティスを解説します。
PrivateLink の UDP サポートが追加されたことで、AWS PrivateLink を使用して Amazon Virtual Private Cloud (VPC) を、PrivateLink エンドポイントを通じて公開される UDP ベースのサービスへプライベートに接続できるようになりました。サービスは、複数の VPC に跨る AWS 環境にデプロイでき、またはパートナーや Software as a Service (SaaS) プロバイダーがお客様の AWS アカウントと共有することができます。Transmission Control Protocol (TCP) ベースのサービスにアクセスする際と同様に、UDP ベースの VPC エンドポイントサービスにアクセスするための VPC エンドポイントを作成できるようになりました。
IPv6 導入の加速を支援するため、AWS では現在デュアルスタック NLB の UDP リスナーをサポートしています。これにより、リアルタイムゲームや Voice over IP (VoIP)、メディアストリーミングなどの UDP ベースのアプリケーションへの着信トラフィックを自動的に分散し、高可用性とスケーラビリティを確保することができます。デュアルスタック NLB は、IPv4 / IPv6 両方のクライアントがアプリケーションのエンドポイントにアクセスできるようにし、AWS 上での IPv6 の導入を加速させます。デュアルスタック NLB の UDP サポートにより、TCP リスナーで利用可能な機能 (ヘルスチェック、自動スケーリング、透過的アップグレードなど) を、カスタムロードバランシングソリューションを維持する必要なく利用できます。
前提条件
本稿では、Amazon VPC や Elastic Load Balancing、NLB、AWS PrivateLink、Amazon CloudWatch など、AWS の基本的なネットワーキング構成に精通していることを前提としています。また、IPv4 や IPv6、TCP、UDP にも精通していることを想定しています。これらのサービスや概念の定義に焦点を当てるのではなく、2つの新機能のユースケースと設定手順を示すために使用します。AWS 上での IPv6 導入リソースの詳細は、AWS re:Postの記事「Get started with IPv6 on AWS – Resources & Content」を参照してください。
デュアルスタック NLB と AWS PrivateLink の UDP サポート
デュアルスタック NLB の UDP サポートにより、クライアントは IPv4 / IPv6 の両方を使用して UDP サービスに接続できます。この機能を使用するには、デュアルスタック NLB の UDP リスナーに対して IPv6 タイプのターゲットグループを作成する必要があります。NLB は IPv6 を使用して UDP トラフィックをターゲットに送信します。
クライアントは、関連する Fully Qualified Domain Name (FQDN) を解決することで、UDP リスナーを持つデュアルスタック NLB に直接アクセスできます。また、UDP リスナーを持つデュアルスタック NLB を使用して AWS PrivateLink サービス (VPC エンドポイントサービス) を構成することもできます。クライアントは IPv4 または IPv6 を使用して、UDP ベースのサービスにアクセスするために、VPC 内に AWS PrivateLink エンドポイント (VPC エンドポイント) を作成することができます。
図1 は、クライアントが IPv4 または IPv6 を使用して UDP 経由で VPC エンドポイントサービスに接続するアーキテクチャです。NLB はデュアルスタックで、サービス用の UDP リスナーを持っています。サービスプロバイダーのサービスのターゲットグループは、IPv6 を使用する必要があります。クライアントには、IPv4、IPv6、またはデュアルスタック VPC エンドポイントをデプロイし、トラフィックを送信するオプションがあります。クライアントは、VPC エンドポイントに接続することで、UDP ベースのサービスを利用できます。
デュアルスタック NLB の 送信元 IP アドレスの保持
TCP および TLS リスナー
IPv4 クライアントが IPv6 ターゲットを持つデュアルスタック NLB に直接接続する場合、NLB はクライアントの IPv4 アドレスを保持できません。IPv6 が IPv4 との下位互換性を持たないためです。IPv6 ターゲットはクライアントの IPv4 アドレスを処理できないため、NLB はクライアントの IPv4 送信元アドレスを自身の IPv6 アドレスに変換し、ターゲットの IP バージョンに合わせます。
同様に、IPv4 および IPv6 クライアントが VPC エンドポイントに接続する場合、NLB はプロトコルバージョンに関係なく、クライアントの IP アドレスを保持しません。NLB では IP NAT が行われるため、クライアント VPC とサービスプロバイダー VPC 間で IP アドレスが重複していても AWS PrivateLink を使用できます。NAT の結果、ターゲットアプリケーションはクライアントの IP アドレスを認識しません。ターゲットアプリケーションにクライアント IP アドレスを知らせるために、ターゲットグループで Proxy Protocol version 2 (PPv2) を有効にすることができます。これにより、NLB はクライアント IP アドレスを Type-Length-Value (TLV) としてパケットヘッダーに追加できます。この機能は、IPv4 および IPv6 の両方のタイプのターゲットグループで有効にできます。
UDP および TCP_UDP リスナー
UDP はコネクションレスプロトコルであるため、デュアルスタック NLB の UDP サポートにおいて送信元 NAT には異なる実装が必要です。TCP と比較して2つの主要な違いがあります。
- UDP は TCP と異なりコネクションの概念がないため、ポートを使用して NLB を通過するセッションを追跡することができません。そのため、NLB は IPv6 アドレスを使用して UDP リスナーの各クライアントを一意に識別します。
- TCP トラフィックの場合、NLB はコネクションが確立されたときに最初のパケットにのみ PPv2 ヘッダーを追加します。UDP では、コネクションが確立されることはなく、各パケットが独立したものとして扱われます。その結果、UDP ターゲットグループで PPv2 が有効になっている場合、NLB はすべてのパケットに PPv2 ヘッダーを追加します。
デュアルスタック NLB の UDP リスナーと、UDP ベースの VPC エンドポイントサービスの設定手順を見ていきましょう。
デュアルスタック Network Load Balancers の UDP リスナーの設定
始める前に、以下の前提条件を満たしていることを確認してください。
- VPC IP 設定の確認:VPC に IPv6 プレフィックスが関連付けられていることを確認してください。VPC における IPv6 の設定に関する詳細については、Amazon VPC ユーザーガイドの「VPC の IPv6 サポートを追加する」を参照してください。
- サブネット IP 設定の確認:NLB のサブネットはデュアルスタックである必要があります。ターゲットグループのサブネットはデュアルスタックまたは IPv6 のみのいずれかです。
- Amazon Elastic Compute Cloud (Amazon EC2) インスタンス設定の確認:各インスタンスにはプライマリ IPv6 アドレスが設定されている必要があります。プライマリ IPv6 アドレスの設定に関する詳細については、Amazon EC2 ユーザーガイドの「ネットワークインターフェイスの IP アドレスを管理する」を参照してください。
- NLB と ターゲットのセキュリティグループインバウンドルールの作成:セキュリティグループのインバウンドルールで、NLB の UDP リスナーとターゲットがトラフィックを受信するように、設定されているポートで UDP を許可する必要があります。
- アプリケーションが IPv6 トラフィックを許可していることの確認:アプリケーションが IPv6 トラフィックを処理でき、IPv6 をサポートするソケットライブラリを使用していることを確認してください。
次の手順は、新規および既存のデュアルスタック NLB に対して UDP リスナーを構成する方法を示しています。
ステップ1 (任意):既存の NLB を変更してデュアルスタックとソース NATを使用する
IP アドレスタイプをデュアルスタックに変更するには、既存の UDP および TCP_UDP リスナーを削除し、図 2 に示すように NLB サブネットがデュアルスタックであることを確認する必要があります。
既存の NLB の IP アドレスタイプを更新する場合、Amazon EC2 コンソールのロードバランサーに移動し、対象の NLB を選択します。図3 のように、アクションを選択し、IP アドレスタイプの編集を選択します。
NLB を変更し、ロードバランサーの IP アドレスタイプをデュアルスタックに変更する際、IPv6 ソース NATのプレフィックスを有効にするをオン (サブネットごとのソース NAT プレフィックス) に設定し、サブネットを選択し、ソース NAT IPv6 アドレスを割り当てます。図4 に例を示しています。
ステップ2:新しいデュアルスタック UDP NLB を作成する
UDP リスナーを持つ新しいデュアルスタック NLB を作成するには、Amazon EC2 コンソールのロードバランサーに移動し、ロードバランサーの作成を選択します。Network Load Balancer を選択し、作成を選択します。基本的な設定で、NLB に一意の名前を付け、スキーム (内部またはインターネット向け) を選択します。ロードバランサーの IP アドレスタイプでは、デュアルスタックを選択します。図5 に例を示しています。
ステップ3:NLB サブネットとソース NAT 設定を構成する
図6 に示されているように、NLB をデプロイする VPC を選択してください。
図7 に示すように、IPv6 ソース NATのプレフィックスを有効にするをオンに設定します。
図8 に示すように、ソース NAT IPv6 プレフィックスの割り当て方法を選択してください。
NLB のアベイラビリティゾーンのマッピング、サブネット、セキュリティグループを選択し、設定を確認してロードバランサーの作成を選択してください。
ステップ4:Amazon EC2 インスタンスをターゲットとして登録する
前提条件にて、プライマリ IPv6 アドレスを持つように IPv6 ターゲットを登録することを言及しました。図9 に示すように、IPv6 ターゲットをターゲットグループに登録するために必要となります。
ステップ5:UDP リスナーを設定する
リスナーのプロトコルを UDP または TCP_UDP に設定し、リスナーのポートを選択する必要があります。図の例では、UDP とポート 53 を選択しています。ターゲットグループの IP アドレスタイプの値は IPv6 に設定する必要があります。ターゲットグループの IP アドレスタイプを確認するには、Amazon EC2 コンソールのターゲットグループを参照してください。ターゲットグループの IP アドレスタイプは作成後に変更できません。図10 は、上記例における IPv6 ターゲットグループの UDP リスナー設定を示しています。
AWS PrivateLink を使用している場合は、以下の手順に進んでください。
デュアルスタック UDP の AWS PrivateLink サービスを作成する
AWS PrivateLink サービスを作成する (サービスプロバイダー側)
サービスプロバイダーであれば、AWS PrivateLink を使用して UDP サービスをクライアントと共有できるようになりました。サービスプロバイダーには、組織内のチームや Independent Software Vendors (ISV) などのパートナー、規制当局などの関連組織が含まれます。
1 つの手順だけで、VPC エンドポイントサービスを作成できます。Amazon VPC コンソールのエンドポイントサービスに移動し、図11 に示すようにエンドポイントサービスの作成を選択します。
図12 に示すように、以下のオプションを設定してください。
- (任意) エンドポイントサービスに名前を付けます。
- ロードバランサーの種類をネットワークに選択します。
- 前もって設定した UDP リスナーを持つ NLB を選択します。
- (任意) 承認が必要を選択します。この設定の詳細については、AWS PrivateLink ユーザーガイドの接続リクエストを承諾または拒否するを参照してください。
- (任意) プライベート DNS 名を有効化を有効にします。エンドポイントサービスのプライベート DNS 名の詳細については、AWS PrivateLink ユーザーガイドのVPC エンドポイントサービス DNS の名前を管理するを参照してください。
- VPC エンドポイントサービスが提供する IP アドレスタイプを選択します。今回の例では、クライアントが IPv4 や IPv6、またはデュアルスタックの VPC エンドポイントを作成できるように、IPv4 と IPv6 の両方を選択します。
- (任意) エンドポイントサービスにタグを設定します。
UDP の AWS PrivateLink エンドポイントを作成する (クライアント側)
AWS PrivateLink サービスにアクセスするには、クライアント VPC に VPC エンドポイントを作成する必要があります。このセクションでは、本記事の構成前提条件セクションでネットワーク構成手順に従ったことを前提としています。
ステップ1:サービスプロバイダーがサポートしている IP バージョンを特定する
VPC エンドポイントで IPv6 を有効にするには、サービスが SupportedIpAddressType として IPv6 を持っている必要があります。サービスが IPv6 をサポートしているかどうかは、以下のコマンドを実行して確認できます。レスポンスの中で、SupportedIpAddressTypes が VPC エンドポイントサービスで有効になっている IP バージョンを示します。
ステップ2:AWS PrivateLink エンドポイントを作成する
VPC エンドポイントを作成するには、図13 に示すように、以下の設定を行います。
- (任意) VPC エンドポイントに名前タグを付けます。
- 適切な VPC エンドポイントサービスをサービス名として選択します。
- VPC エンドポイントをデプロイする VPC を選択します。IPv4、IPv6、またはデュアルスタックのエンドポイントを設定することができます。この設定は VPC エンドポイントサービスの SupportedIpAddressTypes 値とクライアントの機能に依存します。
- (任意) 追加設定で、DNS 名を有効化を有効にすることができます。この設定の詳細については、AWS PrivateLink ユーザーガイドのプライベートDNS名を有効にするを参照してください。
- VPC エンドポイントのサブネットとセキュリティグループを選択します。
新しく作成されたエンドポイント接続は、VPC エンドポイントサービスに対して承認が必要な場合、AWS PrivateLink サービスプロバイダーによって承認される必要があります。
Amazon CloudWatch を使用して UDP ベースのサービスを監視する
この設定を完了すると、カスタマーは UDP ベースのサービスにトラフィックを送信できるようになります。サービスプロバイダーは、以下のような Amazon CloudWatch メトリクスを使用して、健全性とパフォーマンスを監視できます。
- NewConnectionCount:NLB を通過する新しい UDP フローの数を測定します。
- PacketsOutToTarget:NLB から登録されたターゲットに送信された UDP パケットの数を測定します。
- HealthyHostCount:ターゲットグループ内の健全なターゲット数を測定します。
これらの CloudWatch メトリクスは、UDP ベースのサービスが期待通りにトラフィックを処理していることを確認し、潜在的な問題を特定するのに役立ちます。詳細については、AWS PrivateLink ユーザーガイド AWS PrivateLink の CloudWatch メトリクスを参照してください。
考慮事項
デュアルスタック UDP NLB は既存の機能を維持します。多数の NLB を持つ 1 つの VPC エンドポイントサービスをサポートします。これにはオンプレミスのターゲットにトラフィックを送信する機能も含まれます。UDP リスナーを持つデュアルスタック NLB を提供する VPC エンドポイントサービスは、エンドポイントポリシー、プライベート DNS 名、セキュリティグループをサポートします。UDP サポートのリリースでも、AWS PrivateLink のスループット、サービスクォータ、送信元 IP の保持は変更ありません。
まとめ
本稿では、UDP サービスで AWS PrivateLink のサポートを活用する方法と、デュアルスタック NLB の UDP サポートを使用して IPv6 への移行を加速する方法について説明しました。2つの新機能の設定手順、ユースケース、既存の環境に2つの新機能を統合するためのベストプラクティスを概説しました。これらの機能は、IPv6 の採用と UDP ベースのサービスの AWS への移行を加速し、リアルタイムゲーム、Voice over IP (VoIP)、メディアストリーミングなどの UDP ベースのアプリケーションへのインバウンドトラフィックを自動的に分散するのに役立ちます。デュアルスタック NLB の UDP サポートにより、カスタムロードバランシングソリューションを維持する必要なく、ヘルスチェック、自動スケーリング、透過的なアップグレードなど、TCP リスナーで利用可能な同じ機能の恩恵を受けることができます。
VPC コンソールのエンドポイントサービスとエンドポイントのオプションを使用して、AWS PrivateLink の使用を開始してください。詳細については、AWS PrivateLink および VPC エンドポイントのユーザーガイドを参照してください。
本稿は、2024年10月31日に Networking & Content Delivery で公開された “Accelerate IPv6 application migration with AWS PrivateLink and dual stack Network Load Balancers UDP support” を翻訳したものです。翻訳は Solutions Architect の武松が担当しました。