AWSでebsのスナップショットを自動作成

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

【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()