多段 CNAME とは
多段 CNAME とは、 DNS において、 CNAME レコードに別の CNAME レコードを登録することです。
具体的には以下のようなレコードを多段 CNAME といいます。
1 2 3 4 5 6 7 8 9 10 11 |
% dig www.scble.net CNAME +short xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com. % dig www.scble.net ~ www.scble.net. 296 IN CNAME xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com. xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com. 56 IN A xxx.xxx.xxx.xxx xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com. 56 IN A xx.xx.xx.xx ~ |
これは、AWS で使用している Elastic Load Balancer (ELB) のエンドポイントの DNS レコードを指定しています。
www.scble.net の名前解決を行うと、その先には ELB の xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com. が登録されています。
そこから更に xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com. を名前解決すると A レコード(IP アドレス)を取得することができます。
何が問題?
実際にこういった設定は多く見られますし、サービスを提供するということに支障はありません。(ただし、過度な多段 CNAME は途中で切られることがありますので注意してください。)
また上記の例を見て分かる通り、名前解決のステップ数が多く、その分遅延が発生します。
ここまでざっくりと多段 CNAME について説明をしましたが、 AWS の Route53 ではこの問題を解決する エイリアスレコード というものがあり、
以外と知られていない部分もあるので説明したいと思います。
AWS のエイリアスレコードを使用する
AWS Route 53 では以下のように、A レコードに対して CNAME をエイリアスとして登録することができます。
同じアカウントであれば、エイリアス先に使用している ELB などのエンドポイントがリストで選択できます。
【ポイント】
エイリアス先には他 AWS アカウントにある ELB などもエンドポイントが分かっていれば登録することができます。
エイリアスレコードを使用した際の名前解決は以下のような形になります。
1 2 3 4 5 6 7 |
% dig www.scble.net ~ ;; ANSWER SECTION: www.scble.net 24 IN A xxx.xxx.xxx.xxx www.scble.net 24 IN A xx.xx.xx.xx ~ |
これで名前解決の際にステップ数が削減され無駄な遅延を抑えることができます。
最後に
多段 CNAME と AWS Route53 にあるエイリアスレコードの説明でした。
ご存知の方も多いと思いますが、自分の経験上、意外と知らない方が多く、他の AWS アカウントのリソースは指定できないと思っている方がいたりしたので、
これで知った方はぜひ AWS Route 53 のエイリアスレコードの設定を検討してみてください。
※ AWS 以外のサービスでは使用できないと思うのでそこは多段 CNAME を使用することになります。