お久しぶりです。
DNSとCDNについて割と基本的なところをミスったので備忘録的に。
今回のサマリとしては
- サブドメインを切らずにCDNを利用しようとした
- が、RFC 1034の規定でトップレベルドメインにはCNAMEを設定できなかった
- ので、Route53+CloudfrontのAliasを利用してリリースした
という話です。
環境はDNSサーバーがRoute53、CDNがAkamai→Cloudfront サーバーはIDCFクラウドです
サブドメインを切らずにCDNを利用しようとした
CDNに全コンテンツを乗っけるサービスの、リリース時にAkamaiに切り替える際に事件は起こりました。
テストも終わり、さて後はサービスで使用するドメインのAレコードをCNAMEに変更し、Akamaiのエッジに向けるだけや~ポチ~ と変更ボタンを押したところ…
俺氏「はい???」
RFC 1034の規定でトップレベルドメインにはCNAMEを設定できなかった
ということで調べたらRFC 1034でそれはダメよ、Aレコードをつけてよ ということらしい。
ググリビティを高めるためのエラーメッセージは以下。
RRSet of type CNAME with DNS name hoge.com. is not permitted at apex in zone hoge.com.
万策尽きたー!というわけにも行かずに調べたところ、AWSのエンドポイントであればRoute53のAliasによりトップレベルドメインからもCNAME的な参照が可能らしいということがわかりました。
参考:
Route53+S3 Web Hostingでホスト名無しのドメイン設定が出来るのか? - プログラマになりたい
Route53+CloudfrontのAliasを利用してリリースした
というわけで急遽Cloudfrontのテストを行い、
カスタムオリジンでオリジンをwebサーバに向け、
サービス用ドメインのエイリアスリソースレコードセットを作成して、サービスインしました。
エイリアスリソースレコードセットについて詳しくは公式:
Routing Queries to an Amazon CloudFront Distribution (Public Hosted Zones Only) - Amazon Route 53
ふぅどうにかなってよかった
しかしテスト用のサブドメインでCDNの検証してたから気づかなかったよ……。
結構知らないと嵌りそうな罠ではある気がする。