Route53でサブドメインごとにアクセスするリージョンを振り分けてみた

Route53で管理しているドメインからサブドメインごとにアクセスするリージョンを分けてアクセスしてみました。
2021.04.22

AWSではRoute53を使ってドメインを管理をすることが多く、サブドメインで使う環境や用途ごとを分けたりすることがあると思いますが、個人的にサブドメインを分けて利用する経験があまりなかったので、無料でドメインを取得してサブドメインごとにアクセス先のリージョンを変えるということをやってみました。

やりたいこと

特定のユーザーごとにアクセスさせたいリージョンを振り分けたいとします。例えば、ユーザーAの人には東京リージョンにアクセスさせたいのでjp.xxxのURLでアクセスさせ、ユーザーBはバージニア北部リージョンへアクセスさせたいため、us.xxxのURLでアクセスさせます。

こうして書いてみると名前解決の仕組みを理解していれば当たり前だろって感じですが、DNSなんもわからんって感じだったので試してきます。以下のエントリがDNSについて初心者向けにがっつり書かれているので一読しておきましょう。

やってみる

ドメインの取得

利用したいドメインを用意します。今回は検証のため、無料ドメイン(.tk)をfreedomから取得しています。検証用に無料ドメインを利用したい方はこちらのエントリを参考にしてみて下さい。

私は今回気分でsusuzu555.tkというドメインを取得しました。

ホストゾーンの作成

まずは取得したドメインでホストゾーンを作成します。Route53のコンソールからホストゾーンの作成へ進みます。

ホストゾーンの設定には、取得したドメインを入力しましょう。

ホストゾーンの作成をクリックすると、NSレコードとSOAレコードが追加された状態でホストゾーンが作成されます。

今回のように、Route53でドメインを取得せずにfreedomのような外部サービスで取得した場合は、ネームサーバーの設定に払い出されたNSレコードを設定してあげましょう。

サブドメインのホストゾーンを作成

リージョンごとにサブドメインでアクセス先を振り分けるため、ホストゾーンを追加で作成していきます。先ほど作成した親ドメインのホストゾーンにサブドメインのレコードを追加しても良いのですが、今回はサブドメイン個別にホストゾーンを作成して権限の委任を行っていきます。

同じ手順で、東京リージョン用のjp.susuzu555.tkと、バージニア北部用のus.susuzu555.tkを作成してみました。

ここで作成されたサブドメインのNSレコードをドメインのレコードに追加します。

jp.susuzu555.tkでデフォルトで登録されている、NSレコードをコピーして下さい。

[susuzu555.tk](http://susuzu555.tk/)のホストゾーンのレコードを作成からレコードを追加します。

レコード名にはjpを入力し、レコードタイプはNS - ホストゾーンのネームサーバーを指定、値には先ほど 取得した4つのNSレコードを入力して下さい。

これで東京リージョン側の設定は完了です。同じようにバージニア北部も設定すると、以下のような形になるかと思います。

アクセスしたいリソースのレコードを登録する

ドメインの登録は完了したので、アクセスする先を登録していきましょう。今回は検証用のEC2を作成して、Aレコードを登録していきます。

東京リージョンでインターネットから到達できるEC2を作成し、パブリックIPをコピーします。

Route53に先ほどコピーしたIPを登録していきましょう。東京リージョンにアクセスさせたいサブドメインのため、jp.susuzu555.tkにAレコードを登録します。

これで東京リージョンにあるEC2へサブドメイン名でアクセスできる準備が整いました。

確認のためdigコマンドでIPが取得できるか確認してみます。

$ dig jp.susuzu555.tk

; <<>> DiG 9.10.6 <<>> jp.susuzu555.tk
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44916
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jp.susuzu555.tk.       IN  A

;; ANSWER SECTION:
jp.susuzu555.tk.    300 IN  A   52.xx.xx.xxx

;; Query time: 38 msec
;; SERVER: 218.219.82.240#53(218.219.82.240)
;; WHEN: Wed Apr 21 17:19:14 JST 2021
;; MSG SIZE  rcvd: 60

ANSWER SECTIONを確認すると、登録したAレコードのIPが返ってきたので問題なさそうです。

同様の作業をバージニア北部側も設定しましょう。

ブラウザから確認する

作成したEC2それぞれに簡単なテストページを配置し、ブラウザからアクセス先が振り分けられているかを確認します。

東京リージョンに配置したEC2へhttp://jp.susuzu555.tk/でアクセスしてみましたが、問題なく東京リージョン側を表示できました。

同じようにバージニア北部リージョンでもhttp://us.susuzu555.tk/でアクセスすればアクセスできました。

ホストゾーンは12時間以内に削除すれば無料ですが、それを超えるとホストゾーンごとに月0.50USD課金されるため、検証が終わったら削除するようにしましょう。

別アカウントへの委任する場合

今回の検証では同じアカウント内に2つのサブドメインを作成しましたが、これは別のアカウントでサブドメインのホストゾーンを作成しても同じように利用できます。

上の図でいうとAccount Aにsusuzu555.tkのホストゾーンを作成して、Account Bにはサブドメインのdev.susuzu555.tkのホストゾーンを作成します。サブドメイン側のホストゾーンで払い出されたNSレコードを親ドメイン側のホストゾーンに登録してあげればサブドメインの委任が行われてAccount Bでは自由にそのサブドメインを利用できるようになります。

開発と本番などで環境を分けている場合はサブドメインでホストゾーンを作成してあげるといい感じに管理できそうですね。

アカウントを分けた場合の手順は以下のエントリを確認してみて下さい。

まとめ

サブドメインでアクセスするリージョンを振り分けてみました。特定のユーザーに対してはサブドメインを分けて別リージョンにトラフィックを流したい場合には簡単に実装できるので良さそうですね。

今回は検証のためEC2のIPをAレコードで登録して確認しましたが、ALBなどをエイリアスで登録してももちろん利用できます。手軽に検証できるので、私のようにDNS良く分からんって人は是非ホストゾーン立ててdigコマンドで確認してみて下さい。

参考

サブドメインのトラフィックのルーティング - Amazon Route 53

無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた | DevelopersIO

Route 53でサブドメインを別のHosted Zoneに権限委譲する | DevelopersIO