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 CLI

$ 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

前の記事

久々にチーム開発したのでメモ

次の記事

CircleCIからデプロイする云々