CNAMEレコードにZone Apexをマッピングできない件について

記事タイトルとURLをコピーする

こんにちは、技術2課の下山です。

ELBは自動で冗長化され、変動する複数のIPアドレスを持つので、ELBを作成するとアクセスのためのエンドポイントがAWSから払い出されます。

例えばelb-xxxx.ap-northeast-1.elb.amazonaws.comなどです。
※xxxxには適当な数字の列が入ります。

このDNS名をAmazon Route 53のAliasレコード(後ほど説明します)にマッピングしてドメインでアクセスするというのはよくある話ですが、何故CNAMEではなくAliasなのでしょうか。

CNAMEレコードのルール等についてまとめてみました。

DNSの基本的な考え方はこちらをご覧ください。続編もあると聞いてますので、乞うご期待。
【インフラ初心者】サーバーもネットワークも全然知らない新人が語ってみた!ーDNS編①ー

1.用語のおさらい

以下では、example.comというドメインを例に説明していきます。

Zone Apex … ドメイン名そのものを指します。
example.comがZone Apex、www.example.comなどがサブドメインです。

CNAMEレコード … ドメイン名やホスト名の別名を定義するレコードです。

例えば、

www.example.com. CNAME yyy.example.com.

のように登録すると、www.example.comの名前をyyy.example.comに読み替えてくれます。

2.CNAMEレコードの特性

CNAMEレコードを作成する場合は、同じドメインやサブドメインを使うことはできません。

例えば、以下はNGです。

www.example.com. CNAME aaa.example.com.
www.example.com. CNAME bbb.example.com.

また、別のタイプのレコードも書くことは出来ません。以下のようにレコードタイプが異なっていてもNGです。

www.example.com. CNAME aaa.example.com.
www.example.com. A 1.2.3.4

Route 53では同じドメイン(サブドメイン)のCNAMEレコードを書こうとするとエラーとなります。

CNAME

対象の名前は既に登録されているからCNAMEは追加で登録できないと表示されます。

3.Zone ApexにはNSレコードが必要

ホストゾーンの作成のためには、ドメインの権威DNSサーバーを定義するNSレコードの登録がまず必要です。

例えば、
example.com. NS example.content.jp.
です。
ちなみにRoute 53ではドメイン登録時(ホストゾーン作成時)に、NSレコードが自動で定義されます。
Zone ApexにはNSレコードが必要であるため、example.comというZone ApexのCNAMEを書くことができません。詳細はRFC1912に記載があります。
よって、CNAMEを利用する場合はホスト名付きのサブドメインであることが必要です。
(上記のAWSコンソール画面での登録済みのCNAMEレコードは、wwwというホスト名の付いたサブドメインとなっています。)

以下の例では、同じドメイン(サブドメイン)の登録ではないためOKです。
example.com. NS example.content.jp.
www.example.com. CNAME yyy.example.com.
Route 53ではZone ApexのCNAMEを登録しようするとエラーとなります。
zone apex CNAMEはZone Apexに対して登録できないと明示的に表示されました。

4.Aliasレコード

ELBのIPアドレスをAレコードにマッピング出来れば何も問題ありませんが、前述の通りELBは自動で冗長化され、IPアドレスも変動しますので、Aレコードを登録するのは現実的ではありません。
しかしそのDNS名をCNAMEでマッピングしようとすると、Zone Apexにはマッピングできませんので、(未使用の)サブドメインにマッピングすることが必要です。
Route 53ではAliasレコードという独自の機能が実装されており、AレコードにELBのDNS名を指定することができます。
つまりAliasレコードを利用することでZone ApexとELBのDNS名を紐づけることができます。
以下、AWSコンソールの設定画面です。
alias

AliasとCNAMEは一見似ていますが、異なる部分も多々あります。詳細はAWSのドキュメントに記載があります。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html

また、AliasレコードはAWSの特定のリソースに対してのみ利用が可能です。こちらも詳細はAWSドキュメントをご覧ください。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html#rrsets-values-alias-alias-target

終わりに

Zone ApexをCNAMEにマッピングできない件とAliasレコードについてまとめてみました。
DNSは奥が深いので、なるべく詳細まで理解していきたいです。