【AWS】クラウド時代のバックアップ管理術 ~tagを活用したsnapshotの世代管理~
http://shanon-tech.blogspot.jp/2013/02/awstagsnapshot.html
にある、タグを使ったスナップショット管理方式を参考に、
python botoを使って行うようにしたスクリプト
create_snapshot.rb
# coding: utf-8
import boto.ec2
region = 'ap-northeast-1'
aws_access_key = ''
aws_secret_key = ''
ec2 = boto.ec2.connect_to_region(region, aws_access_key_id=aws_access_key, aws_secret_access_key=aws_secret_key)
# タグ'backup'が'ON'のEC2インスタンスをバックアップ対象とする
instances = [i for r in ec2.get_all_instances(filters={'tag-key':'backup', 'tag-value':'ON'}) for i in r.instances]
for instance in instances:
print "backup instance: %s" % instance.id
# バックアップ世代数を、instanceのタグ'generation'から取得
generation = int(instance.tags.get('generation'))
print "backup generation: %s" % generation
volumes = ec2.get_all_volumes(filters={'attachment.instance-id': instance.id})
for v in volumes:
# 新しいsnapshotを作成する
print "create snapshot: %s" % v.id
v.create_snapshot(description='snapshot: ' + v.id)
# start_timeの降順で並び替え、古い世代のsnapshotを削除する
snaps = v.snapshots()
sorted_snaps = sorted(snaps, key=lambda snap: snap.start_time, reverse=True)
for i, snap in enumerate(sorted_snaps):
if i >= generation:
print "delete snapshot: %s" % snap.id
snap.delete()