はじめに
こんにちは。キーボードの悪魔です。
昨今のキーボード界隈では磁気式キースイッチが話題ですね。アクチュエーションポイントの変更、ラピッドトリガーの実装と明確なアドバンテージがあるのは魅力です。ただ、メンテナンス性はどうなんだろうと疑問に思っています。基盤のホールセンサーを交換する必要があるはずなので・・・。
今回はCNAMEレコードの制約とそれを考慮したネイキッドドメインでのウェブサイト公開について書いてみました。
ネイキッドドメイン(Zone Apex)
ネイキッドドメイン(Zone Apex)とは example.com のようなドメインのことを指します。対して www.example.com のようにホスト部を伴うドメインをサブドメインと呼びます。
CNAMEレコードの制約
まず、CNAMEとは、canonical name(正式名)以外に aliases(別名) を与えるのがCNAMEレコードです。
例えば以下のCNAMEレコードを登録すると、hoge.example.com を名前解決すると、piyo.exmaple.com が返されます。CNAMEレコードを登録することで、 piyo.example.com に対して、hoge.example.com という別名を利用可能になります。
hoge.example.com. IN CNAME piyo.example.com.
このCNAMEレコードが存在する場合、同名の他のタイプのレコード(A、MX、NS、SOAなど)と同時に存在してはいけません。これはRFC1912に定められています。そのためネイキッドドメインではCNAMEを利用できません。ネイキッドドメインには下記のようにSOAやNSレコードが登録されているためです。
example.com. IN SOA ns1.example.com. admin.example.com. ( 2024030201 ; Serial 3600 ; Refresh (1 hour) 900 ; Retry (15 minutes) 604800 ; Expire (1 week) 86400 ) ; Minimum TTL (1 day) example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com.
実際の構成で考える
CloudFrontを利用して静的コンテンツのオリジンとしてS3、動的コンテンツのオリジンとしてALB+EC2の構成を取るウェブサイトを例に考えてみましょう。
ネイキッドドメイン(example.com)とサブドメイン(www.example.com)の両方からウェブサイトを利用できる構成とします。
Route53で名前解決
まずはRoute53で名前解決を行う例です。
example.com をエイリアスレコードで xxx.cloudfront.net へ、www.example.com をCNAMEレコードで xxx.cloudfront.net へ名前解決するよう構成します。
ネイキッドドメイン(example.com)をエイリアスレコードで対応することで、CNAMEの制約を回避することができます。
Route53以外のDNSサービスで名前解決
次にRoute53以外のAWS外部のDNSサービスを使う例です。
このケースではエイリアスレコードを使用することができません。ネイキッドドメイン(example.com)をAレコードで対応する必要がありますが、CloudFrontは固定されたIPアドレスを持ちません。そのためGlobal Acceleratorを作成することで固定されたグローバルIPを得ます。このIPに対してネイキッドドメイン(example.com)のAレコードを登録します。Global AcceleratorのエンドポイントにはALBを指定し、ALBではリスナールールを利用しホストヘッダー:example.comを条件に、www.example.com にリダイレクトします。
www.example.com はroute53パターンと同様に、CNAMEレコードで xxx.cloudfront.net へ名前解決します。
このような構成を取ることで、ネイキッドドメイン(example.com)とサブドメイン(www.example.com)の両方でウェブサイトを利用可能となります。
まとめ
簡単ではありますが、CNAMEの制約とそれを考慮したネイキッドドメインでのウェブサイト公開の構成パターンについて紹介しました。
例でも示しましたがRoute53を利用していると特に考えることもなく実現してしまいます。Route53でないDNSサービスを利用する際の考慮事項として気に留めて頂ければと思います。
個人的にはAWSなどのモダンな環境ばかり触っている人ほど知らないことなのかな?と思いました。誰かのお役に立てれば幸いです。
それでは。
アウフ・ヴィーダーゼーエン。