まずは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
$ chmod 700 upload_to_s3 $ crontab -e
0 3 * * * /home/myuser/bin/upload_to_s3
おしまい。