Jekyll サイトを s3_website で Amazon S3 に公開する
このブログはもともと WordPress を使っていたので LAMP 環境で公開していましたが、Jekyll に移行したのを機に Amazon S3 で公開することにしました。その際の手順をメモしておきます。
Amazon S3 の Static Web Hosting は公式ブログが詳しいです。
s3_website のインストール
少し前まで jekyll-s3 と呼ばれていましたが、jekyll-s3 は開発が終了し jekyll-s3 をフォークした s3_website に引き継がれています。
gem コマンドでインストールできます。
$ sudo gem install s3_website
s3_website のセットアップ
Jekyll のディレクトリに移動して s3_website.yml を生成します。
$ cd blog/
$ s3_website cfg create
設定項目はズラズラありますが、最低限必要なのは次の 4 つだけです。 s3_id は Access Key Id、s3_secret は Secret Access Key、s3_bucket はバケット名、s3_endpoint はリージョン名です。フル権限を与える必要もないので IAM で S3 だけ操作できるユーザを作ると良いです。
s3_id: xxxxxxxxxxxxxxxxxxxx
s3_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
s3_bucket: blog.manabusakai.com
s3_endpoint: ap-northeast-1
設定が正しいか確認してみます。問題なければこんな感じになるはずです。
$ s3_website cfg apply
Applying the configurations in s3_website.yml on the AWS services ...
Bucket blog.manabusakai.com now functions as a website
Bucket blog.manabusakai.com is now readable to the whole world
No redirects to configure for blog.manabusakai.com bucket
Do you want to deliver your website via CloudFront, the CDN of Amazon? [y/N]
最後の質問は CloudFront を使うかどうかです。お好みで。
Amazon S3 へ公開
公開するのも簡単で、自動的に diff をチェックして差分だけ同期してくれます。
$ s3_website push
Deploying _site/* to blog.manabusakai.com
Calculating diff ... done
...
Done! Go visit: http://...
自分は rake deploy
でページのビルドと公開をまとめて行っています。
task :deploy do
sh "jekyll build"
sh "s3_website push"
end
s3_website.yml を除外する
s3_website.yml には S3 にアクセスする重要な情報が書かれているので、.gitignore と _config.yml に追記しておきます。
$ grep s3_website.yml .gitignore
s3_website.yml
$ grep s3_website.yml _config.yml
exclude: ['Rakefile', 's3_website.yml']