Freelance Web Engineer

S3にデータをバックアップ (s3sync)

2011-02-08  aws, s3, backup

さくらVPSサーバからAmazon S3へのバックアップ方法をまとめました。

現時点(2011-02)のAmazon S3の価格は以下の通りです。今回はシンガポールにバケットを作ってみようと思います。価格は低冗長化ストレージだと、$0.093/GB! 安いですねぇ。

S3価格

では早速バックアップしてみましょう。今回の環境は以下の通り:

サーバ
Ubuntu 10.04.1 LTS on さくらVPS
Ruby
ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2010.02

1. 保存先のバケットを作成する

AWS Management Console > S3タブを選択し、「Create Bucket」をクリック。

バケット作成

バケット名とリージョンを入力し、「Create」をクリックすると、中身が空のバケットができました。

2. s3syncの設定

バックアップ元サーバでの作業です。s3syncをダウンロードします。

$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz--2011-02-08 10:24:32--  http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
Resolving s3.amazonaws.com... 207.171.189.80
Connecting to s3.amazonaws.com|207.171.189.80|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30415 (30K) []
Saving to: `s3sync.tar.gz'

100%[==================================================================================================================================================================================================>] 30,415      65.3K/s   in 0.5s   

2011-02-08 10:24:33 (65.3 KB/s) - `s3sync.tar.gz' saved [30415/30415]

展開して、/usr/local/以下にコピーします。

$ tar zxvf s3sync.tar.gz 
$ sudo cp -pr s3sync/ /usr/local/

設定ファイルを作成します。

$ sudo mkdir /etc/s3conf
$ sudo cp /usr/local/s3sync/s3config.yml.example /etc/s3conf/s3config.yml
$ sudo vi /etc/s3conf/s3config.yml

以下の内容で保存します。

aws_access_key_id: [適当に変えてください]
aws_secret_access_key: [適当に変えてください]

これで設定完了です。コマンドが動くか確認しましょう。

$ ruby /usr/local/s3sync/s3cmd.rb listbuckets
risin-jp

先ほど作成したバケット名が表示されたらOKです。

3. バックアップ対象を作成する

サーバ側で何をバックアップするかを決定します。今回は本ブログのWordpressディレクトリと、MySQLデータと、Subversionリポジトリをバックアップ対象とします。

S3と同期するディレクトリを作成しておきます。

$ sudo mkdir /var/backup
$ sudo chown -R masayuki:masayuki /var/backup

今回は1日1回cronにてバックアップするので、そのスクリプトを作成します。

$ vi cron/s3backup.sh
--
#!/bin/sh

# TODAY
day=`date '+%d'`

# Wordpress
tar zcvf /var/backup/wordpress.$day.tar.gz [wordpressのディレクトリ]

# MySQL
mysqldump -u[適当に] -p[適当に] --all-databases | gzip > /var/backup/mysqldump.$day.gz

# Subversion
svnadmin hotcopy [バックアップ対象リポジトリパス] /var/backup/svnrepo_hoge
tar zcvf /var/backup/svnrepo_hoge.$day.tar.gz /var/backup/svnrepo_hoge
rm -rf /var/backup/svnrepo_hoge

# Sync to S3
ruby /usr/local/s3sync/s3sync.rb -r --delete /var/backup [バケット名]:
--

バックアップ対象ファイル名に日付を入れることで最大31世代分保持するものとします。

4. 実行

$ cron/s3backup.sh

4-1. /var/backupに出力されているか確認

きちんと保存されていなければ、先程のシェルスクリプト内のコマンドを一つ一つ確認しましょう。

4-2. S3に同期されたか確認

AWS Management Consoleにて確認します。同期されてますね!

同期確認

5. 低冗長化ストレージにする

バケット単位ではなく、ディレクトリ単位で行うようです。 Management Consoleで、先程のbackupディレクトリを選択肢、「Properties」をクリックし、「Use Reduced Redundancy Storage」にチェック。

RRD設定

これで作業完了です。

comments powered by Disqus