Nanocで生成したコンテンツをS3に同期
静的サイトなら最近はS3で公開した方が速い安い旨いっぽいのでNanocで運用しているサイトをS3に移行しようかと企んだ際のメモ。
ファイルの修正
とりあえずはNanocに備わっているデプロイの仕組みを使ってみようかと。
Gemfile
# for nanoc deploy to s3
gem 'systemu'
gem 'fog'
古くから運用しているNanocなので最近のNanocだと要らないかも?
config.yaml(今時はnanoc.yaml)
deploy:
s3:
kind: fog
provider: aws
bucket_name: bucket.example.com
aws_access_key_id: xxxxxxxxxxxxxxxxxxxx
aws_secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
region: ap-northeast-1
同期実行
$ nanoc deploy -t s3
うーむ。ファイル数が多いとけっこう時間かかる。そして初回のデプロイはうまくいくが、二度目はなんだかエラーになる。
Nanoc::Extra::Deployers::Fogのコードをアドホックにいじったら通るようになったが、やっぱりすごく時間がかかる。
結局こうなった
$ aws s3 sync output s3://bucket.example.com --delete
ってやった方が簡単だし速い。
何よりNanoc以外の静的サイト生成ツールでも同じやり方で対応できるのがいいんじゃないでしょうか。
初回はそれなりに時間がかかるが、二度目からは差分だけが同期されるのですぐに終わる。
なお–deleteオプションを付けないとローカルで削除されたファイルがS3上で残りっぱなしになるので注意。(参考)
アクセスキーは環境変数に登録しておく。.bashrcとか.zshrcに次のように書いておけばよい。
# AWS
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx