はじめに
前回のブログで記載した通り、AWS Certified Advanced Networking - Specialtyに合格することが出来ました。
試験対策中は座学が中心だったのですが、一区切りついたので、勉強した内容について実際に挙動を確認してみたいと思います。
とはいえDirectConnectなどは構築のハードルが高いので、Route53の各ルーティング方式毎の挙動(クエリ応答の切り替わり)を見ていくことにしました。その中で今回は、最も基本的なシンプルルーティングの挙動を見ていきたいと思います。
Route53シンプルルーティングについて
シンプルルーティングについては以下の公式ページに説明があります。
「複数の値を 1 つのレコードに指定すると、Route 53 はすべての値をランダムな順序で再帰的リゾルバーに返し」と記載があるので、ラウンドロビンではないようです。
今回の構成
今回は図のような構成を作りました。
通常であれば、WEBサーバはプライベートサブネットに置いて、ELBをパブリックサブネットに置くのがベタな構成ですが、今回は検証目的なので直接パブリックサブネットに置いてしまいます。
2台のWEBサーバに同じホスト名を割り当て、そのホスト名に対するAレコードを、Route53パブリックホストゾーンに登録します。シンプルルーティングによって、2つのWEBページがランダムに表示されることを確認します。
WEBページについて
2つのWEBページがランダムに表示されていることを確認するために、ページの内容は若干変えました。「Hello」とだけ表示されるページとかでも良かったのですが、それだと少し寂しいので、無駄にリンクなどをつけて、以下のような感じにしました。
この時点ではIPアドレスを直接叩いてアクセスしています。
Route53作業
それでは、Route53のパブリックホストゾーンにAレコードを登録します。
まずは目的のゾーンに移動して、「レコードを作成」を選択
ルーティングポリシーで「シンプルルーティング」を選択
ホスト名を入力し、レコードタイプでAレコードを選択。値/トラフィックのルーティング先には「レコードタイプに応じたIPアドレスまたは別の値」を選択し、二つのWEBサーバのIPアドレスを登録。TTLを適当に短い時間(今回は10秒)に変更し、「シンプルなレコードの定義」を選択。
内容に問題がないことを確認して、「レコードを作成」を選択。
シンプルルーティングのAレコードが登録されたことを確認。
ページ閲覧・クエリ応答確認
ホスト名でのページ閲覧
それでは、ホスト名でWEBページにアクセスし、適当にブラウザを更新してみます。
同じホスト名で、ランダムで二つのWEBページが表示されました。
クエリ応答確認
続いて、クライアントPCからnslookupでクエリを飛ばし、応答を確認してみます。
C:\Users>echo %date% %time% 2021/09/05 16:18:12.85 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: DNS request timed out. timeout was 2 seconds. 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:02.34 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:11.60 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 54.XXX.XXX.XXX 18.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:19.88 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 54.XXX.XXX.XXX 18.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:25.38 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 54.XXX.XXX.XXX 18.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:32.73 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:39.71 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 54.XXX.XXX.XXX 18.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:47.60 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:19:53.42 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:20:04.39 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:20:10.62 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:20:17.89 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 18.XXX.XXX.XXX 54.XXX.XXX.XXX C:\Users>echo %date% %time% 2021/09/05 16:20:23.82 C:\Users>nslookup www.XXXXX.com サーバー: UnKnown Address: 2404:1a8:7f01:b::3 権限のない回答: 名前: www.XXXXX.com Addresses: 54.XXX.XXX.XXX 18.XXX.XXX.XXX C:\Users>
ラウンドロビンではなく、ランダムで応答が返ってきていることが確認できました。
おわりに
というわけで、Route53のシンプルルーティングの挙動確認でした。こんな感じで、次はフェイルオーバールーティング、加重ルーティングあたりの確認をしようかと思います。位置情報ルーティングや地理的近接性ルーティングも気になりますが、その辺はうまい確認方法があれば試してみたいと思います。
実は今回、Route53の設定と挙動確認は一瞬で終わったのですが、Route53以外の部分を慣れないCloudFormationで構築してみたところ、色々失敗してかなり手間取り、ほとんどの時間をそこに費やしました。ただ、おかげでCloudFormationの扱いには多少慣れました。
せっかくなので、CloudFormationで躓いた箇所についても、備忘として別途ブログに残したいと思います。