画像や静的ファイル配信用のCDN的なやつを作りたい
画像や静的ファイルを配信するために、AWSでCDN的なやつを作りたい!って時がありました!
今までCDNなやつは、VPSでNginxを立ててそこでやっていましたが、今回はAWSで作ろうと思います!
ここではその際の備忘録として記事にしておきたいと思います。
また今回は既存のものもあるので、全部手動でぽちぽちしていますが、移行する気力が湧いたらTerraformでのやり方も書こうと思います。
ということで今回は、ぽちぽち頑張った結果を記事にします。
S3バケットの設定
バケットの作成
まずはS3でバケットを作成します!
バケットを作成する
以下のバケットを作成ボタンから作成します!

バケット情報などを入力する
バケット名などを入力します。
リージョンは東京にして、あとは基本デフォルトでOKです!
※CloudFrontやLBなどを通さないで直接Route53から参照する場合などはバケット名はドメイン名でないといけないので注意です。

S3バケットの全公開
今度は、S3を全公開に設定をします。
設定方法は別途こちらへまとめました!
CloudFrontの作成
CloudFrontリソースを作成する
CloudFrontリソースの作成は、まずCloudFrontの画面に行き、Create Distribution -> Get Startedから作成する。
Create Distribution

Get Started
以下のGet Startedのボタンをクリックします!

CloudFrontの設定を入力する
CloudFrontに情報を入力して、作成していきます!
- Origin Domain Nameには、作成したS3バケットを選択します。
- Alternate Domain Names(CNAMEs)には、ACMで証明書を取得するドメインを洗濯します。(例:「cdn.example.com)
- Request or Import a Certifcate with ACMから、ACMで対象ドメインの証明書を取得します。
- 証明書の認証が完了したら、Custom SSL Certificate (example.com):のプルダウンから取得した証明書が選べるようになっています。
- Viewer Protocol PolicyでRedirect HTTP to HTTPSとしておくと、HTTPで来た時にHTTPSへリダイレクトされるようになるので設定する。
後はデフォルトでOKです!


証明書を選択していない状態で、適用しようとした際のエラー
また証明書を選択していない状態で、適用しようとするとAWSの画面に以下のエラーが発生するので注意。
com.amazonaws.services.cloudfront.model.InvalidViewerCertificateException: To add an alternate domain name (CNAME) to a CloudFront distribution, you must attach a trusted certificate that validates your authorization to use the domain name. For more details, see: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-requirements (Service: AmazonCloudFront; Status Code: 400; Error Code: InvalidViewerCertificate; Request ID:
その際は上述したように、SSL証明書をACMで取得すればOK。
以下が参考にしたサイトになります。
参考サイト
Route53のレコード追加
CloudFrontでAlternate Domain Names(CNAMEs)とSSL証明書での認証が完了すると、Route53のALIASレコードのプルダウンから作成したCloudFrontのリソースが選択できるようになっています。
Route53で、作成したCloudFrontをALIASレコードとして追加すれば完了です。
ちなみに、CloudFrontでcdn.example.comの名前をCNAMEsに設定しACMで認証を実施したが、Route53も同じ名前でcdn.example.comで追加しても大丈夫だった。
参考画像
タイプはAレコードでOK。
エイリアスで「はい」を選択します。
エイリアス先に、作成したCloudFrontを指定する。

まとめ
今回は、Route53×CloudFront×S3で、画像や静的ファイル配信用のリソースを作成する方法を書きました!
ぽちぽち設定していくと覚えることが結構あるので面倒ではありますが、覚えてしまえば簡単ですね!
コメント