[PR] あなたが Kindle で読みたいその本、Kindle に対応したら Twitter でお知らせします。

Jekyll サイトを s3_website で Amazon S3 に公開する

Posted on

このブログはもともと 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']