Amazon S3を使ってブログの無料バックアップ

動機

一般的なブログサービスを利用していれば、データが消えたりといった問題を気にする必要はありません。

ですが、私の場合、ブログのデータ及び、.zshrcや.emacs各種設定ファイルもレンタルサーバ上で管理しているため、データが消えた場合の復旧方法を考えておく必要がありました。

バックアップ先をどこにしようかと思っていたのですが、ちょうどAmazon Web Serviceが1年間無料のサービスを展開中だったため、Amazon S3に保存することにしました。

一応参考になる人もいるかと思いましたので手順を公開します。

Amazon Web Serviceの登録から利用まで

下記から入手可能なドキュメントを見ながら登録してもらえば問題ないでしょう。 http://jaws-ug.jp/documents/j5f69c

その他にも無料Tierを利用してみましたという解説記事は多いのでこちらを参照してください。 http://blog.livedoor.jp/hakin/archives/51875780.html http://d.hatena.ne.jp/koujirou6218/20101105/1288952470

Amazon S3の利用

Amazon S3は、99.99%の堅牢性を持つデータ保存サービスです。 こちらのGetting Startedを確認しながら「バケットの作成」 => 「ファイルのアップロード」 => 「ファイルのダウンロード」と一通り試してみてください。

バケットというのは乱暴に言ってしまえばデータを格納するフォルダやディレクトリのようなものと思ってくれればさしあたっては問題ないかと思います。

AWSコマンドラインツールのインストール

バックアップを手動で行うのであればAWSコンソールを利用すればいいのですが、やはり自動化したいものです。 APIは提供されているのでプログラムを書くことでも自動化できますが、今回はAWSというTimothy Kayさんという方が開発したコマンドラインツールを利用したいと思います。

まずはこのツール自宅サーバーやレンタルサーバに対してインストールする手順を説明します。

なお、AWSコマンドラインツールの説明は以下のURLで詳しく書かれています。 http://aws.amazon.com/code/739 http://timkay.com/aws/

1. curlをインストール
$ apt-get install curl
or
$ yum install curl

2. awsスクリプトをダウンロード
$ curl github.com/timkay/aws/raw/master/aws -o aws

3. awsを適当なディレクトリにコピーします。
$ cp aws $HOME/bin/aws

4. そのフォルダで以下のコマンドを実行します
$ cd $HOME/bin/ && aws --link=short

5. アクセスキーとシークレットキーを~/.awssecretに保存します。
1行目がアクセスキーで2行目がシークレットキーです。
アクセスキーやシークレットキーはAWSトップから、
「アカウント」=>「セキュリティ証明書」を辿ることで確認できます。

$ echo "<Access-Key>" > ~/.awssecret
$ echo "<Secret-Key>" >> ~/.awssecret
$ chmod 600 ~/.awssecret
(<Access-Key>, <Secret-Key>は、
自分のアクセスキーやシークレットキーに置き換えてください)

これで準備完了です。awsをコピーしたフォルダにPATHを通せばs3putやs3lsといったコマンドを利用することができます。s3lsで先ほど作ったバケットが表示されればOKです。

$ $HOME/bin/s3ls
+-----------------+--------------------------+
|      Name       |       CreationDate       |
+-----------------+--------------------------+
| < バケット名  >   | 2010-11-16T06:18:14.000Z |
+-----------------+--------------------------+

Wordpressデータベースのバックアップ

Wordpressのデータベースをバックアップするのはmysqldumpを利用すればOKです。 下記のようなコマンドになるかと思います。

mysqldump --add-drop-table \
-u<WordPressのユーザー名> \
-p<WordPressmysqlパスワード> \
<Wordpressのデータベース名> | \
 /bin/bzip2 -c > $HOME/blog.bak.sql.bz2

バックアップファイルの作成とAmazon S3アップロード

次は実際にバックアップファイルを作成、アップロードしたいと思います。 今回は$HOME以下のディレクトリを全てバックアップしたいと思いますので下記のようなシェルスクリプトを用意しました。

!/bin/sh
# wordpressのDBバックアップ
/usr/bin/mysqldump --add-drop-table \
-u<WordPressのユーザー名> \
-p<WordPressmysqlパスワード> \
<Wordpressのデータベース名> | \
 /bin/bzip2 -c > $HOME/blog.bak.sql.bz2

# バックアップ対象ディレクトリをcfで固める
/bin/tar cf - -C $HOME ./ | /bin/bzip2 -c > /tmp/backup.tar.bz2

# 一時ファイルは削除
/bin/rm $HOME/blog.bak.sql.bz2

# s3にアップロード 
# (<bucke name>は自分で作成したバケット名に置き換えてください。)
$HOME/bin/s3put <bucket name>/backup.tar.bz2 /tmp/backup.tar.bz2

# バックアップファイル削除
/bin/rm /tmp/backup.tar.bz2

このスクリプトをcronで1週間に一回程度実行するように設定すればバックアップ完了です。

$ crontab -l
57 2 * * 7 /home/aaa/bin/backup_script.sh