Closed7

AWS Route53で取得したドメインのDNS管理をCloudflareに移す

sh11235sh11235

こういうインフラの作業は不慣れなので記録に残す。
AWS Route53でドメインをとったけれど、Cloudflare Workers/Pagesを触るようになったのでCloudflareにDNS移行した方が色々作業をしやすそうだと思った。

Route53でドメインを登録

欲しいドメイン名を入れて検索すると完全一致か、部分一致の結果が返って来る。
ここから選ぶ。

取得すると以下のような詳細画面を表示できる。

ネームサーバーは以下のような形式で、初期値として4つがセットされていた(以下は本物の値ではない)。

ns-2048.awsdns-64.com
ns-2049.awsdns-65.net
ns-2050.awsdns-66.org
ns-2051.awsdns-67.co.uk
sh11235sh11235

EC2で立てたWebサーバーとドメインを紐づけ

本題のDNS移行をする前の話。
EC2内には既にNginxとRustのWebアプリが入っている。

AWS Route53でドメイン登録をすると自動的に対応するホストゾーンが作成された。
このホストゾーンにはNS(ネームサーバー)レコードとSOA(Start of Authority)レコードがデフォルトで設定されていた。
EC2のインスタンスのパブリック IPv4 アドレスを確認して、Aレコードにその値を追加した(サブドメインとしてapiを使った)。
これでapi.${取得したドメイン}へのhttpアクセスがEC2のWebサーバーに向かうようになった。
フロントエンドが別(Cloudflare Pages)にあり、そちらはhttpsでアクセスするのでこのままではMixed Contentsになってしまう上、セキュリティ上のリスクもあるのでEC2のエンドポイントについて証明書を取得して設定した。
Let’s Encryptを使った。

# EC2インスタンスにSSHして作業
$ sudo certbot --nginx -d api.${取得したドメイン}
sh11235sh11235

CloudflareにDNS移管する(本題)

今時点ではDNS移行したので表示が違うが、当時は「+サイトを追加する」ボタン以外に案内文言+導線が出ていた記憶がある。Cloudflareトップに「+サイトを追加する」ボタンがあり、ここからDNS移管が出来る(と思う)。

${取得したドメイン}を入力して画面を進めるとCloudflareのNSが表示される(スクショ取り忘れ、再現する画面が設定完了後なので出せない...)。
2つのNSの値があるのでこれをAWS Route53側に設定しに行く。

https://zenn.dev/link/comments/deeb3a11fa93e8
のスクショにもあるように、ここのページの右上の「アクション」からネームサーバーの値を編集した。
初期値でセットされていた4つを削除し、Cloudflare側で表示されていた2つの値を入力した。
また、Route53のホストゾーンの設定は不要になるので削除した。
これでDNS移行の作業は概ね完了した。

sh11235sh11235

Cloudflareで管理するドメインとAWS EC2のWebサーバーを紐づける

AWS EC2のパブリックIPv4アドレスをメモする。
CloudflareのホームにDNS移行したドメインが載っており、そこをクリックするとドメインの管理画面に行ける
DNS設定ページに移動する。

「レコードの追加」から、タイプ: A、名前: api、AWS EC2のIPv4アドレスを入力した。
これでCloudflareにDNS移行後も引き続き同じドメインでAWS EC2のWebアプリにアクセスできる。

sh11235sh11235

詰まったポイント

ホストゾーンを変更したが編集するのはここではなかった

最初、AWS Route53のホストゾーン画面のNSレコードの値を変更したが、変更が適用されないまま数日が経過した(ドメイン周りの作業は24時間くらい待ちがあってもおかしくないか、くらいに思って放置していた)。
しかし、ホストゾーンの設定はRoute53内部での管理値であり、ドメイン全体のネームサーバー設定とは異なるとのこと。
変更するべきは前述のようにRoute53の登録済みドメインのページでの設定であった。

api.${取得したドメイン}へのアクセスで ERR_TOO_MANY_REDIRECTS

「Cloudflareで管理するドメインとAWS EC2のWebサーバーを紐づける」
https://zenn.dev/link/comments/be79b922bfb8d8)
の操作後、実際にAWS EC2のWebアプリにアクセスすると以下のエラーページが表示された。

このページは動作していませんapi.${取得したドメイン}でリダイレクトが繰り返し行われました。
Cookie を削除してみてください.
ERR_TOO_MANY_REDIRECTS

CloudflareのSSL/TLS設定が「フレキシブル」であることが原因だった。
この設定だとクライアントとCloudflare間の通信はHTTPSを使用するが、Cloudflareとサーバー(AWS EC2インスタンス)間の通信はHTTPを使用するらしい。
EC2インスタンスのNginxでは以下のようなHTTPSリダイレクト設定を記載していた。

server {
    listen 80;
    server_name api.example.com;
    return 301 https://$server_name$request_uri;
}

このため、ERR_TOO_MANY_REDIRECTSエラーが発生していた。

Cloudflareで管理しているドメインのSSL/TLS設定を「フレキシブル」から「フル」に変更した。

これにより、CloudflareとEC2インスタンス間もHTTPSで通信するようになり、ERR_TOO_MANY_REDIRECTSエラーが解消した。

sh11235sh11235

先人の記事があった

書き終えてから見つかった。
https://zenn.dev/a24k/articles/20220527-cloudflare-dns
これを見て始めていればもっと不毛な時間を減らせたはずだが、自分の作業記録が残せたのでよしとする。
ERR_TOO_MANY_REDIRECTSエラーについては勉強になった。

DNSの切り替えはしたがドメインの移管はしていないので、これは必要を感じたらやろうと思う。

このスクラップは2024/02/02にクローズされました