Amazon EC2のインスタンスをAMI化(イメージ化)して、Amazon S3にバックアップする為のツールはデフォルトで備えられています。でも、特定のディスクやディレクトリだけをS3に保存するツールは、不思議とありません。もちろんS3向けに通信コマンドを発行すれば保存出来るのですが、それはそれで面倒くさいです。
そんな時に便利なのが、S3SyncというRubyのモジュールです。名前の通りのSyncコマンドの他に、幾つかのコマンドが使えます。
S3Syncのインストール
$http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
$tar zxvf s3sync.tar.gz
#cp -pr s3sync/ /usr/local/
#mkdir /etc/s3conf
#cd /etc/s3conf
#vi s3config.yml
aws_access_key_id: hogehoge
aws_secret_access_key: hogehoge
MacにS3Syncのインストール
brewで一発です。
$ brew install s3sync
アクセスキーとシークレット・アクセスキーは、exportコマンドで都度設定でも問題ありません。
その場合は、下記のような感じです。
$ export AWS_ACCESS_KEY_ID='hogehoge'
$ export AWS_SECRET_ACCESS_KEY='hogehoge'
使い方はシンプルです。
- rで再帰的に、--deleteで同期元にファイルが無かった場合に同期先のファイルを消す設定です。
Amazon S3に同期
ruby /usr/local/s3sync/s3sync.rb -r --delete /path/to/data bucketname:data/
Amazon S3から同期
ruby /usr/local/s3sync/s3sync.rb -r --delete bucketname:data/ /path/to/data
実行すると、下記のようなエラーが出ることがあると思います。
Permanent redirect received. Try setting AWS_CALLING_FORMAT to SUBDOMAIN
S3 ERROR: #
デフォルトであるus-west以外は、下記の設定が必要になります。うーん微妙。
export AWS_CALLING_FORMAT="SUBDOMAIN"
応用範囲はかなりあるので、是非活用してください。