プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Amazon EC2からS3にバックアップする為のS3Sync

 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"


 応用範囲はかなりあるので、是非活用してください。