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

こういうインフラの作業は不慣れなので記録に残す。
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

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.${取得したドメイン}

CloudflareにDNS移管する(本題)
今時点ではDNS移行したので表示が違うが、当時は「+サイトを追加する」ボタン以外に案内文言+導線が出ていた記憶がある。Cloudflareトップに「+サイトを追加する」ボタンがあり、ここからDNS移管が出来る(と思う)。
${取得したドメイン}
を入力して画面を進めるとCloudflareのNSが表示される(スクショ取り忘れ、再現する画面が設定完了後なので出せない...)。
2つのNSの値があるのでこれをAWS Route53側に設定しに行く。
初期値でセットされていた4つを削除し、Cloudflare側で表示されていた2つの値を入力した。
また、Route53のホストゾーンの設定は不要になるので削除した。
これでDNS移行の作業は概ね完了した。

Cloudflareで管理するドメインとAWS EC2のWebサーバーを紐づける
AWS EC2のパブリックIPv4アドレスをメモする。
CloudflareのホームにDNS移行したドメインが載っており、そこをクリックするとドメインの管理画面に行ける
DNS設定ページに移動する。
「レコードの追加」から、タイプ: A、名前: api、AWS EC2のIPv4アドレスを入力した。
これでCloudflareにDNS移行後も引き続き同じドメインでAWS EC2のWebアプリにアクセスできる。

詰まったポイント
ホストゾーンを変更したが編集するのはここではなかった
最初、AWS Route53のホストゾーン画面のNSレコードの値を変更したが、変更が適用されないまま数日が経過した(ドメイン周りの作業は24時間くらい待ちがあってもおかしくないか、くらいに思って放置していた)。
しかし、ホストゾーンの設定はRoute53内部での管理値であり、ドメイン全体のネームサーバー設定とは異なるとのこと。
変更するべきは前述のようにRoute53の登録済みドメインのページでの設定であった。
ERR_TOO_MANY_REDIRECTS
api.${取得したドメイン}へのアクセスで 「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
エラーが解消した。

先人の記事があった
書き終えてから見つかった。
ERR_TOO_MANY_REDIRECTS
エラーについては勉強になった。
DNSの切り替えはしたがドメインの移管はしていないので、これは必要を感じたらやろうと思う。

参考にさせて頂きました!!ありがとうございます!!