自動的にスナップショットを作成する方法

最近暑くて水風呂につかるのがマイブームなzabbioです。

早速ですが、みなさんバックアップはちゃんととってますか?
バックアップをとってなくて、インスタンスが天に召された時以来、バックアップはきちんととるようになりました。

ただ漏れるのは怖いのでスクリプトで自動的に走らせています。
botoを使って定期的にバックアップを取得しています。

環境設定


yum -y install python-devel
wget http://boto.googlecode.com/files/boto-1.9b.tar.gz
tar zxvf boto-1.9b.tar.gz
cd boto-1.9b
python setup.py install

スクリプト作成

vi zabbio.py


#!/usr/bin/python
import sys
import re
from boto import config
from boto import ec2
from boto.ec2.connection import EC2Connection

AWS_ACCESS_KEY_ID = 'アクセスキーを書いてね'
AWS_SECRET_ACCESS_KEY = 'シークレットアクセスキーを書いてね'
DESCRIPTION = '説明・・・を書いてね'
REGION_NAME = 'ap-northeast-1'

if(len(sys.argv) != 3):
print "Usage: ebs-snapshot.py "
sys.exit()
regions = ec2.regions(aws_access_key_id=AWS_ACCESS_KEY_ID,aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
for r in regions:
if r.name == REGION_NAME:
_region=r
conn = EC2Connection(aws_access_key_id=AWS_ACCESS_KEY_ID,aws_secret_access_key=AWS_SECRET_ACCESS_KEY,region=_region)
conn.create_snapshot(volume_id=sys.argv[2], description=DESCRIPTION)
snapshot = {}
for x in conn.get_all_snapshots():
if((x.volume_id == sys.argv[2]) and (x.description == DESCRIPTION)):
tmp = {x.id:x.start_time}
snapshot.update(tmp)
snapshot = sorted(snapshot.items(), key=lambda (k, v): (v, k), reverse=True)
for i in range(int(sys.argv[1]), len(snapshot)):
conn.delete_snapshot(snapshot[i][0])

cronに作成したスクリプトを仕込む

crontab -e


0 4 * * * /usr/local/src/aws-snapshot/zabbio.py 5 vol-12345678

スナップショットを何世代残すか、ボリュームIDを記載してくださいね。