Nanocで生成したコンテンツをS3に同期

2014-12-17
2015-01-18
かなり古い記事です。現在も有効な内容であるかどうか分かりませんのでご注意ください。

静的サイトなら最近は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

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。