【AWS】 サブドメインなしのドメインをCloudFrontでSSL対応させる 【#np2020】

AWS logo
AWSの「CloudFront」を使って格安(SSL証明書は無料)でSSL対応するという記事を以前書きました。


Amazon LightsailとAmazon CloudFrontを使ってSSL対応【#np2020】 | mutter

実際運用してみると、CloudFrontに掛かる費用は12ヶ月間の無料枠内に収まっていてしばらくは無料、無料枠がなくなったあとの料金を試算してみても月$1いくかどうかぐらいなので、Route53に掛かる料金を考えてもかなりお得です。これで全ドメインの全サブドメインをSSL化出来ているので。




サブドメイン無しのドメインにCloudFrontを設定してみると

ここまで管理しているサイトをいくつか対応させてきましたが、いずれも「www.exsample.com」のようにサブドメインを持つドメインでした。同じ要領でサブドメインを持たない場合もSSLに対応させようところ、怒られてしまいました。

設定したのはニコニコ動画に関する話題を更新しているブログ「1ni.co」。いつも通りに、CloudFrontの設定をして、Route53でCloudFrontをドメインのCNAMEに設定しようとすると……


16_02.jpg

[RRSet of type CNAME with DNS name 1ni.co. is not permitted at apex in zone 1ni.co.]



解決方法: Aレコード+エイリアスで解決出来ます

Amazon S3のルートドメインでのWebホスティング機能を試してみた – プログラマでありたい

S3 Web Hostingでドメインの設定をする場合は、CNameを利用することにより実現しています。そしてRFC 1034の規定でトップレベルドメイン(ホスト名無しのドメイン)は、Aレコード(IPアドレス指定)である必要があります。というところで、ルートドメインでのS3のWebホストが出来ませんでした。この辺りの事情は、以前調べて書いています。ちなみにELBでも同様なのですが、Amazon独自のエイリアス機能により回避されていました。



記事は6年以上前のもので話題はS3の設定に関するものですが、これがSSLでも有効です。記事内の手順2に従ってSSLを設定したCloudFrontをエイリアスに設定すればOKです。すぐに反映されて、SSLが有効になります。



設定する前になんとなーく「サブドメインなしのドメインにCNAMEって付けられなかったんじゃなかったっけ……」とは思っていたんですが、やってみて実際に出来なかったときは焦りました。でもなんとか回避策が用意されていて良かったです。一安心。