[アップデート] Amazon Route 53のPrivate Hosted Zoneで位置情報とレイテンシーベースのルーティングができるようになりました

Private Hosted ZoneがPublic Hosted Zoneと同様のルーティングポリシーを使えるようになりました。
2022.04.14

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

Private Hosted Zoneのルーティングポリシーに仲間が増えた

こんにちは、のんピ(@non____97)です。

皆さんはPrivate Hosted Zoneでいろんなルーティングをしたいと思ったことはありますか? 私はあります。

今回、Amazon Route 53のPrivate Hosted Zoneで位置情報とレイテンシーベースのルーティングができるようになりました。

これにより、インターネットに公開していないのリソースに対しても、名前解決を行う環境によって異なる値を返却できるようになります。

例えば、グローバルに展開している企業の社内ポータルサイトにレコードに利用すれば、アクセス元によって表示する言語を変えるといったことができます。

各トラフィックルーティングの詳細は以下記事やAWS公式ドキュメントをご覧ください。

実際に、Private Hosted Zoneで位置情報とレイテンシーベースのルーティングの動作を確認したいと思います。

やってみた

Private Hosted Zoneの作成

それでは、Private Hosted Zoneの作成からやっていきます。

Route 53のコンソールからホストゾーン-ホストゾーンの作成をクリックします。

ホストゾーンの作成

ドメイン名を適当に入力し、タイプはプライベートホストゾーンを選択します。プライベートホストゾーンを選択した場合は、Private Hosted Zoneを関連付けるVPCを指定する必要があります。今回はus-east-1とap-northeast-1のVPCを指定しました。

プライベートホストゾーンの作成

Private Hosted Zoneの作成が完了すると、以下のように表示されます。

Private Hosted Zoneの作成確認

位置情報ルーティング

位置情報ルーティングの検証から行います。

先ほど作成したPrivate Hosted Zoneの画面からレコードを作成をクリックします。

レコード名はgeolocation.corp.non-97.netで、ルーティングポリシーは位置情報、場所は1つは米国、もう1つは日本を指定します。値は10.0.0.410.0.0.12をそれぞれ指定しました。また、レコードIDはレコードを一意に識別できるようにgeolocation-usgeolocation-jpとしました。

位置情報ルーティングのレコードの追加

レコードの作成をクリックすると、以下のように2つレコードが作成されていることを確認できました。

位置情報ルーティングのレコードの追加確認

それでは動作確認をします。

us-east-1のEC2インスタンスでgeolocation.corp.non-97.netを名前解決すると、確かに場所を米国にしたレコードの値である10.0.0.4が返ってきました。10回名前解決しましたが同じ結果でした。

# EC2インスタンスのリージョン確認
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'
us-east-1

# 名前解決
$ dig geolocation.corp.non-97.net

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> geolocation.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30787
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;geolocation.corp.non-97.net.   IN      A

;; ANSWER SECTION:
geolocation.corp.non-97.net. 300 IN     A       10.0.0.4

;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Thu Apr 14 08:37:29 UTC 2022
;; MSG SIZE  rcvd: 72

# 名前解決10連続
$ for i in {1..10} ; do
>   dig geolocation.corp.non-97.net +short
> done
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4

ap-northeast-1のEC2インスタンスでgeolocation.corp.non-97.netを名前解決すると、場所を日本にしたレコードの値である10.0.0.12が返ってきました。こちらも10回名前解決しましたが同じ結果でした。

# EC2インスタンスのリージョン確認
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'
ap-northeast-1

# 名前解決
$ dig geolocation.corp.non-97.net

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> geolocation.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32295
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;geolocation.corp.non-97.net.   IN      A

;; ANSWER SECTION:
geolocation.corp.non-97.net. 300 IN     A       10.0.0.12

;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Thu Apr 14 08:42:18 UTC 2022
;; MSG SIZE  rcvd: 72

# 名前解決10連続
$ for i in {1..10} ; do
>   dig geolocation.corp.non-97.net +short
> done
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12

最後に場所が米国のレコードを削除した状態で名前解決を試してみます。

場所が米国のレコードを削除した後、us-east-1のEC2インスタンスでgeolocation.corp.non-97.netを名前解決すると、ANSWER SECTIONが0になりました。

# EC2インスタンスのリージョン確認
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'
us-east-1

# 名前解決
$ dig geolocation.corp.non-97.net

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> geolocation.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3429
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;geolocation.corp.non-97.net.   IN      A

;; AUTHORITY SECTION:
corp.non-97.net.        900     IN      SOA     ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Thu Apr 14 09:19:37 UTC 2022
;; MSG SIZE  rcvd: 143

名前解決を行う場所によって返してくるIPアドレスが変わることを確認できました。

レイテンシールーティング

続いて、レイテンシールーティングの検証も行います。

位置情報ルーティングの検証と同様に、まず、作成したPrivate Hosted Zoneの画面からレコードを作成をクリックします。

レコード名はlatency.corp.non-97.netで、ルーティングポリシーは位置情報、リージョンは1つはus-east-1、もう1つはap-northeast-1を指定します。値は10.0.0.410.0.0.12をそれぞれ指定しました。また、レコードIDはレコードを一意に識別できるようにlatency-uslatency-jpとしました。

レイテンシールーティングのレコードの追加

レコードの作成をクリックすると、以下のように2つレコードが作成されていることを確認できました。

レイテンシールーティングのレコードの追加確認

それでは動作確認をします。

us-east-1のEC2インスタンスでlatency.corp.non-97.netを名前解決すると、確かにリージョンをus-east-1にしたレコードの値である10.0.0.4が返ってきました。

# EC2インスタンスのリージョン確認
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'
us-east-1

# 名前解決10連続
$ for i in {1..10} ; do
>   dig latency.corp.non-97.net +short
> done
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.4

ap-northeast-1のEC2インスタンスでgeolocation.corp.non-97.netを名前解決すると、リージョンをap-northeast-1にしたレコードの値である10.0.0.12が返ってきました。

# EC2インスタンスのリージョン確認
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'
ap-northeast-1

# 名前解決10連続
$ for i in {1..10} ; do
>   dig latency.corp.non-97.net +short
> done
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12
10.0.0.12

最後にリージョンがus-east-1のレコードを削除した状態で名前解決を試してみます。

リージョンがus-east-1のしたレコードを削除した後、us-east-1のEC2インスタンスでlatency.corp.non-97.netを名前解決すると、リージョンがap-northeast-1のレコードの値である10.0.0.12が返ってきました。

# EC2インスタンスのリージョン確認
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'
us-east-1

# 名前解決
$ dig latency.corp.non-97.net

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> latency.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15042
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;latency.corp.non-97.net.       IN      A

;; ANSWER SECTION:
latency.corp.non-97.net. 300    IN      A       10.0.0.12

;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Thu Apr 14 09:35:05 UTC 2022
;; MSG SIZE  rcvd: 68

名前解決のレイテンシーによって返してくるIPアドレスが変わることを確認できました。

名前解決、自由自在

Amazon Route 53のPrivate Hosted Zoneで位置情報とレイテンシーベースのルーティングができるようになったアップデートを紹介しました。

Public Hosted Zoneと同様のルーティングポリシーが使えるのはかなり嬉しいですよね。

上手く使えば、見せたいコンテンツを自由自在にコントロールすることができます。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!