まずはS3Syncをインストールします。
$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
$ tar zxvf s3sync.tar.gz
$ sudo cp -pr s3sync/ /usr/local/
ローカルディレクトリとAmazon S3間の通信にSSLを使いたいので、ssl.certs.sharをダウンロードして実行します。
$ mkdir /usr/local/s3sync/certs
$ cd /usr/local/s3sync/certs
$ wget http://mirbsd.mirsolutions.de/cvs.cgi/~checkout~/src/etc/ssl.certs.shar
$ sh ssl.certs.shar
自動実行するためのスクリプトを用意します。例えば、こんなの。
FILE : upload_to_s3
#!/bin/bash
# script to upload local directory upto s3
export EC2_URL=https://ec2.ap-southeast-1.amazonaws.com
export AWS_CALLING_FORMAT="SUBDOMAIN"
export AWS_ACCESS_KEY_ID=my_accesskey
export AWS_SECRET_ACCESS_KEY=my_secretkey
ruby /usr/local/s3sync/s3sync.rb -r --ssl --exclude="\.log$" /upload/from/ my_bucketname:upload/to/
AWS_CALLING_FORMAT="SUBDOMAIN"はサブドメイン形式(http://bucket.s3.amazonaws.com/key)でバケットを指定するという意味です。US-EAST以外のリージョンでS3Syncを使う場合、環境変数にこの設定をしておかないと、実行時に以下のエラーが発生します。
Permanent redirect received. Try setting AWS_CALLING_FORMAT to SUBDOMAIN
S3 ERROR: #<Net::HTTPMovedPermanently:0x2aaaaedd5ff8>
S3SyncのREADME.txtによれば、AWS_CALLING_FORMATの設定は以下のようになっています。
AWS_CALLING_FORMAT - Defaults to REGULAR
REGULAR # http://s3.amazonaws.com/bucket/key
SUBDOMAIN # http://bucket.s3.amazonaws.com/key
VANITY # http://<vanity_domain>/key
スクリプトにパーミッションを設定し、cronに登録します。
$ chmod 700 upload_to_s3
$ crontab -e
0 3 * * * /home/myuser/bin/upload_to_s3
おしまい。