« WindowsでgvimでTwitter | トップページ | windowsでgemで入れたコマンドがすべてin `load': no such file to load になる »

2009年10月25日 (日)

Amazon S3にバックアップをする

会社でサーバのファイル郡をAmazon S3にバックアップすることになり、その
ためのツールをRubyで作成しました。
会社の了解を得て、オープンソースにしていいことになったので、rubyforgeに
登録しました。ただ、Windowsでは動作しません。
S3Backup:http://rubyforge.org/projects/s3backup/

S3Backupについて

概要
S3Backupツールとは、指定したディレクトリ以下をAmazon S3にバックアップ
/リストアするためのツールです。

特徴としては下記があります。

圧縮
Amazon S3にアップロードする際に各ディレクトリを圧縮するため、通信帯域や保存領域を節約することができます。

暗号化
設定によりアップロードするファイルを暗号化させることもできます。

差分バックアップ
バックアップが前回バックアップした時と内容が変わらないディレクトリは、
アップロードしないため、通信帯域や時間を節約することができます。

レジューム
通信エラー等で途中でバックアップが中断されても、次回実行時に前回
送信に成功したディレクトリはほとんど再送信されません。(効率化のため
毎回ではなく、10ディレクトリに1回レジューム用の情報を更新しています。)

※注
ディレクトリの内容が変わったかどうかの判断は下記によります。
・ファイルの追加
・ファイルの削除
・ファイルの更新日付の変更
・ファイルのサイズの変更
・シンボリックファイルのリンク先の変更

インストール
sudo gem install s3backup

設定ファイル
S3Backupツールのバックアップ・リストアの実行には下記の内容がyamlフォーマットで書かれた設定ファイルを予め準備しておく必要があります。

bucket: "バケット名"
directories:
- "バックアップもしくはリストア対象のディレクトリへの絶対パス"
- "ディレクトリへの絶対パス(複数ある場合は以降続ける)"
access_key_id: 'Amazon access_key_id'
secret_access_key: 'Amazon secret_access_key'
password: 'ファイルを暗号化する際のパスワード(任意)'
salt: '16文字のHex文字列(8Byte)passwordが指定されている場合のみ必要'
buffer_size:バッファーサイズのbyte数(任意)
max_retry_count送信失敗時に再送する回数(任意)
proxy_host:プロキシサーバのアドレス(任意)
proxy_port:プロキシサーバのポート(任意)
proxy_user:プロキシサーバのログイン名(任意)
proxy_password:プロキシサーバのパスワード(任意)
log_level:
ログの出力レベル(任意)
temporary: 圧縮・展開用の一時ディレクトリ(任意)

設定の説明
bucket

任意のファイルを登録できるコンテナ。指定されたbucketがなかった場合は作成される。Amazon S3内で一意である必要。

directories
バックアップもしくはリストアしたいディレクトリ。複数指定できる。またリストアの場合はバックアップされているディレクトリの配下なら任意のディレクトリを指定できる。リストア時にdirectoriesを指定しない場合は、指定したbucketにバックアップされたすべてのディレクトリがリストアされる。

access_key_id
Amazonより渡されたユーザーごとのid

secret_access_key
Amazonより渡されたユーザーに対する秘密のパスワード

password

AES-CBC-256形式でファイルを暗号化する際のパスワード。なお、設定されていない場合は暗号化しない

salt
AES-CBC-256形式でファイルを暗号化する際のSalt。16文字のHex文字列(8Byte)。passwordが指定されている場合のみ必要'

buffer_size
デフォルト32M ディレクトリを圧縮した後、BUF_SIZEに分割し、送信する。最大5G。

max_retry_count
デフォルト20 送信が失敗した際にリトライする回数。

proxy_host
プロキシサーバのアドレス(プロキシサーバ使用時のみ)。

proxy_port
プロキシサーバのポート(プロキシサーバ使用時のみ)。

proxy_user
プロキシサーバへのログイン名(プロキシサーバ使用時かつログイン必須の場合のみ)。

proxy_password
プロキシサーバへのログインのパスワード(プロキシサーバ使用時かつログイン必須の場合のみ)。

log_level
debug,info,warn,errorのどれかを選択することでログの出力レベルを変更する。デフォルトはinfo

temporary
バックアップ対象のディレクトリを圧縮した際にできる一時ファイルやファイル情報用の一時dbを置くディレクトリ。デフォルトは/tmp

コマンドシンタックス

バックアップの場合
s3backup
[-f 設定ファイル] [-v デバッグメッセージの出力] [-l ログのパス] [-h ヘルプメッセージ]

  • 設定ファイル 設定しない場合はカレントディレクトリのbackup.ymlを読み込む。
  • デバックメッセージ バックアップ対象のディレクトリのファイルツリー構成と更新があったファイル名を出力
  • ログのパス 設定しない場合は標準出力に出力されます
  • ヘルプ ヘルプメッセージが出力されます

リストアの場合
s3backup -r [-f 設定ファイル] [-v デバッグメッセージの出力] [-l ログのパス] [-o 出力ディレクトリ] [-h ヘルプメッセージ]

  • 設定ファイル 設定しない場合はカレントディレクトリのbackup.ymlを読み込む。
  • デバックメッセージ バックアップ対象のディレクトリのファイルツリー構成と更新があったファイル名を出力
  • ログのパス 設定しない場合は標準出力に出力されます
  • 出力ディレクトリ リストア先のディレクトリを指定します。 設定しない場合はカレントディレクトリに出力されます。
  • ヘルプ ヘルプメッセージが出力されます

2010/1/27 追記
本当すみません。passwordを設定していない場合に動作しませんでした。
あとCtrl-C等でバックアップを途中で中断した時に、次回続きから実行できるresume機能をオプションにし、デフォルトでoffにしました。(バックアップ対象が百Gを越えるディレクトリツリーの場合に、メモリを使いすぎるため)

2010/2/13 追記
レジューム機能を必須とするようにしたため、resumeの設定の記述の削除
ログの出力レベルを指定するlog_levelの設定を追加
新たに一時ディレクトリを指定するtemporaryの設定を追加

|

« WindowsでgvimでTwitter | トップページ | windowsでgemで入れたコマンドがすべてin `load': no such file to load になる »

ruby」カテゴリの記事

コメント

S3Syncはどうでしょう

投稿: lettas | 2010年1月25日 (月) 10時10分

そうなんですよ。私もそれでと思ってたんですが、会社のえらい人にamzonのオペレータに見られたり、流出した時のことを考えて、ファイルは絶対に暗号化しろと言われ、できるだけ圧縮もしてくれと言われたため、それらの要件を満たすために自分で実装しました。

投稿: takeshy | 2010年1月25日 (月) 13時30分

このブログでの素敵な情報.

投稿: hivizag | 2014年2月27日 (木) 19時05分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68673/46574132

この記事へのトラックバック一覧です: Amazon S3にバックアップをする:

« WindowsでgvimでTwitter | トップページ | windowsでgemで入れたコマンドがすべてin `load': no such file to load になる »