【レポート】名前解決はひとつの VPC にまとめよう(R53 resolver&Transit Gateway) #AWSSummit

2020.09.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いえーいみんな元気ィ!?オンジーです!

面白そうなハンズオンがあったのでレポートします。

AWS Transit Gatewayで接続された2つのVPCにおいてAmazon Route 53 Resolverを利用して、Private Hosted Zoneとの関連付けを1つのVPCに集約します。

これによって複数VPCの名前解決の管理がしやすくなりますね!やっていき!

セッション概要

スピーカー:AWSJ 菊地信明さん

タイトル:名前解決はひとつの VPC にまとめよう(R53 resolver&Transit Gateway)

複数の AWS VPC が異なる AWS アカウントで管理されている場合、VPC 間の名前解決には Amazon Route 53 Resolver が便利です。このハンズオンでは、AWS Transit Gateway で接続された 2 つの VPC 間において、プライベートホストゾーンを参照可能な環境を構築します。

対象者:複数のVPCでPrivate Hosted Zoneを利用している方

動画と資料

前提

  • Transit Gatewayのリージョン間ピアリングに対応しているリージョンの組み合わせで実施する
    • ハンズオンではバージニア(us-east-1)、オレゴン(us-west-2)

ハンズオン

1. CloudFormationを利用し、バージニア北部リージョンにVPCを一つ、オレゴンリージョンにVPCを2つ作成する。

ハンズオン資料のjsonファイルでCloudFormationを実行してVPCとTransit Gatewayと疎通確認用のEC2を作成します。

2. 各リージョンに作成したTransit Gateway間をリージョン間ピアリングで接続し、静的ルートを追加する。各VPCサブネットのルートテーブルにもルーティングを追加する。

  • オレゴンリージョン>VPC>Transit Gateway接続>Transit Gatewayルートテーブル
    • VPC-BとVPC-CへのアタッチメントはCloudFormationで作成済みです
    • ルートテーブルへの追加も済んでいます

  • Create Transit Gateway Attachmentより新しいアタッチメントを作成します(VPC-A用)

  • 少し待って作成したアタッチメントのStateがpending acceptanceになると承認待ちの状態なのでバージニアリージョンに切り替えて承認します。

  • 承認後にしばらくするとStateがpendingavailableになれば無事にアタッチメント作成完了です。
  • 次はバージニアリージョンTGWのルートテーブルにオレゴンリージョンへのルートを追加します。
    • リージョン間ピアリングの場合は静的ルートとして対向へのルートを追加します。
    • Create static routeより作成します。

  • 作成後のTGWルートテーブルは次のようになってるはずです。

  • VPCのルートテーブルについてもルートを設定しておく必要があります。

  • オレゴンリージョン側でも同様にバージニアリージョンへのルートをTGWルートテーブルとVPCルートテーブルの両方で設定します。

  • ここまでのアタッチメント作成とルーティングが正しく設定できているかpingを使って確かめてみます。

  • VPC-B上のEC2インスタンスにセッションマネージャーで接続してpingしてみます。

VPC-B → VPC-C

sh-4.2$ ping 172.16.0.10 -c 4
PING 172.16.0.10 (172.16.0.10) 56(84) bytes of data.
64 bytes from 172.16.0.10: icmp_seq=1 ttl=254 time=1.48 ms
64 bytes from 172.16.0.10: icmp_seq=2 ttl=254 time=0.877 ms
64 bytes from 172.16.0.10: icmp_seq=3 ttl=254 time=0.830 ms
64 bytes from 172.16.0.10: icmp_seq=4 ttl=254 time=0.865 ms

--- 172.16.0.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.830/1.013/1.483/0.274 ms

VPC-B → VPC-A(リージョン間ピアリング)

sh-4.2$ ping 192.168.0.10 -c 4
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=252 time=83.4 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=252 time=81.1 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=252 time=81.1 ms
64 bytes from 192.168.0.10: icmp_seq=4 ttl=252 time=81.0 ms

--- 192.168.0.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 81.072/81.705/83.445/1.044 ms
  • リージョン間ピアリングの方が時間がかかっていることが分かります。

3. Route 53 Private Hosted Zoneを作成し、オレゴンリージョンの1つのVPCへ関連付け、VPC内ホストから名前解決を可能にする。

  • Route 53 Private Hosted Zoneを作成します。

  • 作成した段階ではNSレコードとSOAレコードのみの状態なのでVPC-C上のインスタンスのIPを名前解決するAレコードを追加します。
    • ルーティングポリシーはシンプルルーティングを選択します。

  • VPC-C上インスタンスにセッションマネージャーで接続して名前解決が正しくできるか確かめておきます。
sh-4.2$ dig test.example.jp. +short
172.16.0.10

4. 同じVPCで、Route 53 Inbound Endpointを作成する。

  • Route53>インバウンドエンドポイントに進みます。
  • 「エンドポイントの設定」を選択します。
    • 基本的な設定:インバウンドのみ

  • ここで設定しているセキュリティグループのインバウンドルールは次のルールが設定されています。

  • サブネットを選択してIPアドレスを指定します。

5. オレゴンリージョンの他方のVPCでDHCPオプションセットを変更し、他のVPCに関連付けられたPrivate Hosted Zoneに対する名前解決を確認する。

  • VPC-BとVPC-AのDHCPオプションセットを新規作成&関連付けて先ほど作成したPrivate Hosted Zoneで名前解決できるようにしていきます。
  • VPC>DHCPオプションセットに進みます。
  • 「DHCPオプションセットを作成」を選択

  • 作成したら関連付けを行います。

  • 編集画面で先ほど作成したDHCPオプションセットを選択して保存します。
  • VPC-B上のインスタンスにセッションマネージャーで接続してtest.example.jpが名前解決できるかテストします。

sh-4.2$ sudo service network restart
Restarting network (via systemctl): [ OK ]

でネットワークを再起動しないとDHCP設定が反映されないことに注意。

6. バージニア北部リージョンのVPCでDHCPオプションセットを変更し、Transit Gatewayリージョン間ピアリングを経由して、Private Hosted Zoneに対する名前解決を確認する。

  • VPC-AのDHCPオプションセットを新規作成&関連付けします。
    • VPCVPC-Bのときと手順は全く同じで割愛。
  • VPC-A上のインスタンスにセッションマネージャーで接続してtest.example.jpが名前解決できるかテストします。
sh-4.2$ sudo service network restart
Restarting network (via systemctl):                        [  OK  ]
sh-4.2$ dig test.example.jp. +short
172.16.0.10

成功しました!

これでRoute 53のPrivate Hosted Zoneを一つのVPCに関連付け、他のVPCや他のリージョンのEC2インスタンスから名前解決が出来る事を体験できました。

(補足)複数のVPCでPrivate Hosted Zoneによる名前解決を集約する手法は2パターンあります。

7. 環境を削除する。

※リソースを削除し忘れると課金が継続してしまうので必ず削除しましょう。

  • リージョン間ピアリングの削除(バージニア)
  • CloudFormationスタックの削除(バージニア)
  • Route 53 Resolverの削除(オレゴン)
  • Private Hosted Zoneの削除(オレゴン)
  • CloudFormationスタックの削除(オレゴン)
  • DHCPオプションセットの削除(バージニア・オレゴン)

所感

インバウンドエンドポイントを作成することで1つのPrivate Hosted Zoneで名前解決をする設定、案外簡単にできました。

複数のVPC間での名前解決を柔軟にシンプルに管理していきたいですね!