koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

CloudFrontではあるドメインを複数のディストリビューションに指定できない理由

先日AWSのCloudFrontを使うにあたって、以下のエラーに遭遇した。

Resolve Cloudfront Error "CNAMEAlreadyExists"

状況的には、あるドメインへのアクセスをDNSの設定変更で複数のCloudFrontディストリビューションに振り分けたい、といったものだった。

これは、CloudFrontの仕様上実現できない。

CloudFrontに独自のドメインでアクセスするためには、CloudFrontディストリビューションにそのドメインをCNAME設定する必要があるのだが、あるドメインは1つのディストリビューションにしか設定できない。

「仕様だから」で済ませばそれで良いと言えば良いのだが「何故そういう仕様なのか?」を考えてみると中々趣き深かった。

CNAME設定が必要な理由

まず、なぜCNAME設定が必要なのか?

これは、CloudFrontが動作しているホストが、複数のCloudFrontディストリビューションを処理していると考えれば分かりやすい。

HTTPでは「IPアドレス」を指定してホストにアクセスする。 この際「Hostヘッダ」にどのドメインへアクセスしたいのか? をホストに知らせる。

したがって、あるIPアドレスで動作しているCloudFrontがどのディストリビューションにアクセスされたのか? を判断するには、このHostヘッダとディストリビューションに設定されたCNAMEを突き合わせる必要があるのだ。

転じて重複できない理由

仮に、複数のCloudFrontディストリビューションに同じドメインをCNAME設定できたとする。

そうすると、あるHostヘッダが指定されたアクセスがあった場合に、どのディストリビューションへのアクセスを意図したものなのか? を判断することができない。

であるから、CloudFrontではあるドメインを複数のディストリビューションに指定できないという仕様になっているのだろう。

ここまで考えて、私はその仕様が腑に落ちた。

余談

ちょいちょい仕事や趣味上での気づきをBlog記事にしていきたいと思う。

「そんな事あったりまえだろ?」でもいいし「気づきを共有」できたら最高だ。

Qiitaとかの方がいいのかなぁ?

でも、サービス沢山使うのって大変そうなんだよね。 プラモもプログラムも愚痴も全部入りの闇鍋Blogを志向したい。