ブログをWordPressからHugoに移行した。
併せて、EC2インスタンスで動かしてたのを、S3にファイルを置くだけにした。
コスト大幅削減。

手順を覚え書きしておく。

S3の設定

基本的に下記のページに従うだけ。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteHosting.html

バケット作成、静的ウェブサイトホスティング有効化、バケットポリシー設定、これだけでOK。
この後、下記コマンド叩いて、hugoでビルドしてS3にデプロイする。

$ hugo --baseURL '(静的ウェブサイトホスティングを有効化した時に表示されるURL)'
$ aws --region バケットのリージョン s3 sync public s3://バケット名

S3のURLにアクセスして、ファイルを見られることを確認する。

CloudFrontの設定

CFから配信するようにする。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/website-hosting-cloudfront-walkthrough.html
ディストリビューション作って↑の通りに設定。ディストリビューションの作成は十数分くらいかかるので、しばし待つ。

デプロイされたら、ディストリビューションのDomain Nameを確認。
hugoのbaseURLをディストリビューションのDomain Nameにして、再度ビルド、デプロイ。

$ hugo --baseURL 'http://ディストリビューションのDomain Name/'
$ aws --region バケットのリージョン s3 sync public s3://バケット名

ディストリビューションのDomain Nameで、ブラウザからアクセス。
ページが表示されることを確認する。

https化する

ACMで証明書を発行する。
以前は、メール受信してドメインの所有を検証しないとダメでちょっと手間だったけど、数ヶ月前(2017/11頃)にCNAMEレコードを設定するだけで検証できるようになったのですごくラク。
https://dev.classmethod.jp/cloud/aws/certificate-manager-dns-validation-support/

発行した証明書を、CloudFrontに設定する。
あと、Viewer Protocol Policyを、Redirect HTTP to HTTPSにする。

ドメインの設定

Route 53のレコードを変更して、ディストリビューションにリクエストが飛ぶようにする。
Route 53のエイリアスレコードを設定するだけでOK。

$ hugo --baseURL 'http://自分のドメイン名/'
$ aws --region バケットのリージョン s3 sync public s3://バケット名

自分のドメイン名でアクセスして、Hugoのサイトを閲覧できることを確認する。

備考

静的ウェブサイトホスティングを使うと、「CloudFront経由のアクセスのみ許可する」設定ができない。