やさしいCloudFront の代替ドメイン名設定
Contents
概要
はじめに
- 今回は、CloudFront のディストリビューションに代替ドメイン名(CNAME)を設定する方法をまとめます。代替ドメイン名の設定によって、ディストリビューションにデフォルトで割り当てられたドメイン名ではなく独自のドメイン名 (例: www.example.com) が使用可能です。
前提条件
- 今回の記事では、CloudFront のオリジンにELB-EC2 を使用します。クライアントからCloudFrontまでのアクセスはHTTPS通信とし、CloudFront からオリジンまでのアクセスはHTTP通信とします。
- 事前に、SSL 証明書を準備します。証明書のドメイン名は、ディストリビューションに設定する代替ドメイン名と一致させる必要があります。今回は、Certificate Manager(ACM)で証明書を発行します。
CloudFront に代替ドメイン名を設定して公開する
オリジン・キャッシュ動作の設定
- CloudFront のコンソールを開きます。左のメニューより[Distributions]を選択し、[Create Distribution]を押します。
- 下記の画面で、「delivery method for your content」に「Web」を選択します。

- ディストリビューションを作成します。以下、オリジンの設定です。
- Origin Domain Name(オリジンドメイン名)に、オリジンに設定するELB を選択します(ELBはALB、NLBのどちらで可)。オリジンドメイン名には、ELBのDNS名以外に、S3バケット名やEC2 インスタンスのDNS名、独自のウェブサーバー(https://example.com)も指定可能です。
- Origin Path(オリジンのパス)に、ディレクトリパスを入力します。
- Minimum Origin SSL Protocol(最小限のオリジン SSL プロトコル)を指定します。
- Origin Protocol Policy(オリジンプロトコルポリシー)に、CloudFront がオリジンからオブジェクトをフェッチするときに使用するプロトコルを指定します。今回は、オリジンとするELB のリスナーに合わせてHTTP Only とします。

- その他のオリジン・キャッシュ動作の設定は、下記ドキュメントを参照ください。
ディストリビューションの設定
- Alternate Domain Names(CNAMEs)(代替ドメイン名)の設定に、設定する独自のドメイン名を指定します。
- SSL Certificate(SSL 証明書)は代替ドメイン名を指定する場合に必須です。Custom SSL Certificateを選択して、証明書を指定します。証明書は下記のいずれかとなります。今回は、ACMで発行した証明書を使用します。なお、ACMで発行する場合は、バージニア北部のリージョンに配置することを忘れずに。
- AWS Certificate Manager から提供される証明書
- サードパーティ認証機関から購入して ACM にアップロードした証明書
- サードパーティ認証機関から購入して IAM 証明書ストアにアップロードした証明書

- その他のディストリビューションの設定は、下記ドキュメントを参照ください。
ディストリビューションのドメイン名をDNS登録
- ディストリビューションが作成できたら、ステータスからデプロイされたことを確認します。
- 次に、CloudFrontによってデフォルトで割り当てられたディストリビューションのドメイン名をコピーし、DNSにレコード登録します。

CloudFront代替ドメイン名の動作確認
- クライアントからcurlコマンドで、CloudFrontの代替ドメイン名にアクセスできるかを確認します。
504 ERROR “The request could not be satisfied." の調査
- 今回は、初回に「504 ERROR The request could not be satisfied.」のエラーが発生しました。
- オリジン、CloudFrontにそれぞれ疎通確認を行い、調査します。エラーの原因は、オリジンに設定したELB のセキュリティグループにCloudFrontからのアクセスを許可していなかったためでした。(今回はNLBのためEC2側のセキュリティグループにCloudFrontからアクセスできるようインバウンドの設定を追加します)
CloudFront代替ドメイン名の疎通確認がOKに
- 前述の通りセキュリティグループを見直し、エラーを対処しました。改めてCloudFront のデフォルトのDNS名および代替ドメイン名に対して疎通確認を行い、200 OK が返ることを確認します。下記結果より、curl コマンドでレスポンスが返りました。(curl の-vv オプションの結果は省略)