Amazon Glacier 使ってバックアップ環境つくりたいなー
でも rsync 的な使い方したいけどどうやってやったらいいかわからないなー
と思っていたら、先日 AWS CLI 1.0 がリリースされて新しくsyncコマンドが使えるようになったので、これはチャンスと思い手を出してみた次第。
AWSまわりを軽く説明
知ってる人は読まなくていいです。
Amazon S3
Amazonのクラウドストレージ。
Dropboxのバックエンドなんかにも使われている、Web開発者にはお馴染みのアレ。
特筆すべきは 99.999999999%(イレブン・ナイン) の堅牢性。
なんだかよくわからないけどめっちゃ9が並んでるから多分すごい(小並感
Amazon Glacier
価格が 1GBあたり1円/月(S3の約10分の1) とかなり安いが、データをダウンロードする際に解凍する時間(4時間くらい)が必要。 データを頻繁に取り出したりしないバックアップなどの用途に向いている。
S3に保存したデータを自動でGlacierに転送する機能もあるので、S3と同じ感覚で使える。
AWS CLI(Command Line Interface)
先日ついに正式版(1.0)がリリースされ、新しいS3コマンドsyncなども使えるようになった。
Amazon Glacierを使えるようにする
このへんはよそさまのブログを参照。
ググったらたくさん出てくる。
まぁ だいたい
- AWSのユーザ登録をする(要クレカ)
- S3のバケットを作る
- Glacierへの転送オプションを設定する
みたいな流れ。
簡単にバックアップできるようにする
Mac向け。
Linuxもだいたい同じなはず。
Windowsは知らないです。
やりたいこと
- スクリプト叩くだけでバックアップできる
- 差分だけ送るようにして毎回のバックアップに時間をかけない
- バックアップしなくてもいいファイル(.DS_Storeとか)は送らない
要するに、普通のサーバでrsyncを使って出来たことをAWSでもできるようにしたい。
AWS CLIをインストール
インストール方法はいろいろあるが、今回はpipでインストール。
$ pip install awscli
続いて、.bash_profile
にあれこれ設定
export PATH=$PATH:/usr/local/share/python export AWS_ACCESS_KEY_ID=AVADAKEDAVRA export AWS_SECRET_ACCESS_KEY=abababababababababababababababa complete -C aws_completer aws
最初、パスが通っていなくて地味に詰まったorz
普段pipとか使わないからこうなる...
あとは自分のアクセスキーとシークレットキーの設定と、サブコマンドの入力補完をしてくれる設定。
インストールできたか確認
$ aws --version aws-cli/1.0.0 Python/2.7.3 Darwin/12.4.0
おぅけーい。
シェルスクリプトを書く
#!/bin/sh source='~/Movies' # バックアップ元 bucket='hoto.backup' # 保存するS3のバケット名 dir='Movies' # 保存するフォルダ region='ap-northeast-1' # バケットのリージョン # バックアップしないファイル f=('*.DS_Store' '*.tmp' '*.swp') params="$source s3://$bucket/$dir --region $region --delete" e='--exclude' aws s3 sync $params $e "${f[0]}" $e "${f[1]}" $e "${f[2]}"
なんかごちゃごちゃしてるけど、つまりは
$ aws s3 sync ~/Movies s3://hoto.backup/Movies --region ap-northeast-1 --delete --exclude "*.DS_Store" --exclude "*.tmp" --exclude "*.swp"
こういうコマンドを実行したいわけだ。
それにしても汚いスクリプトだな(;-_-)
除外ファイルを指定するあたり、もっと綺麗な書き方できるなら教えて下さい...
完成(゚∀゚)
あとはバックアップしたいときにスクリプトを叩くなり、 cronで定期的に叩くなりすればよし。
今回は50GBくらいバックアップとったけど、それでも月50円くらいで済む(はず)。
今まで月980円のVPSにバックアップしてたので、それに比べるとなんとコスパの良いことか。
AWS万歳\(^o^)/