CloudFront と S3 で Web サイトを公開する
HTML・CSS・JavaScriptでできたシンプルなWebサイトを公開するとき、色々な選択肢がありますよね。
久しぶりにCloudFront・S3で構築してみたところ、AWSマネジメントコンソールから簡単にデプロイできるようになっていたので、紹介しようと思います。
S3に資材を用意
まずS3バケットの作成をします。AWSマネジメントコンソールの検索バーでS3と検索し、その先の画面でバケットを作成ボタンを押すと作成できます。
名前はグローバルでユニークである必要があるので、このような名前にしておきましょう。
cloudfront-s3-website-sample-{名前}-{日付}
その他の設定はデフォルトで良いです。
次に、以下の2ファイルをS3バケットに追加してください。
シンプルなHTML・CSSで、Hello, AWS!と書いてあるだけのサンプルです。
以下のようになっていればOKです!

CloudFrontの用意
次に、CloudFrontのディストリビューションを作成します。AWSマネジメントコンソールの検索バーでCloudFrontと検索し、その先の画面でディストリビューションを作成ボタンを押すと作成できます。
最初の画面ではディストリビューション名を入力し、他はデフォルトのまま次に進みます。名前はcloudfront-s3-website-sampleとしておきます。

次の画面ではオリジンを選択します。オリジンタイプはS3とし、先程作成したS3バケットの名前を入力します。

3ページ目ではWAFの設定ができますが、WAFは料金がかかるので今回は有効化しません。

ここまでで設定は完了です。次の確認ページで作成ボタンを押します。
ページの確認
CloudFrontのディストリビューションが無事に作成されると、以下の画像のようにDomain name(ドメイン名)が表示されます。

このドメイン名をコピーし、
https://{ドメイン名}/index.html
というURLにブラウザでアクセスしましょう。以下のように表示されていれば成功です!

おまけ: デフォルトルートオブジェクトの設定
上ではURLの末尾にindex.htmlをつけてアクセスしました。もしこれを外すとどうなるでしょうか?

エラーになりますね。デプロイしてそのままの状態だと、S3に置いたファイル名を指定しないとこのようになってしまいます。
そこで、CloudFrontのデフォルトルートオブジェクトの設定を変更していきます。
作成したディストリビューションのID欄がリンクになっているので、それをクリックすると以下の画面が開きます。

この画面の編集ボタンを押した先で、Default root objectをindex.htmlとして保存します。

保存して30秒ほど待つと設定が反映されるはずです。以下のように、index.htmlを外してアクセスできたら成功です!
https://{ディストリビューションのドメイン名}
おわりに
少し前まではCloudFrontの設定はややこしくて、はじめて触るには抵抗があるなーという代物でした。
いまではバケットポリシーの追加を勝手にやってくれたり、キャッシュ設定を隠蔽して推奨項目を自動で当ててくれたりと、はじめての方でも取り組みやすい画面になっているかなと思います。
今回は扱いませんが、AmplifyでもS3の資材を簡単にホスティングできるので、それも今後紹介できたらと思います。