[PYTHON] Un script qui prend un instantané d'un volume EBS

Aussi comme post-test de kobito. EC2 est un script que j'ai écrit plus tôt car ce sera une sauvegarde si vous enregistrez un instantané du volume EBS.

class AWSBackuper(object):
    def __init__(self, access_key, secret_key, region="ap-northeast-1"):
        self.access_key = access_key
        self.secret_key = secret_key
        self.region = region
        self.set_ec2connection()

    def set_ec2connection(self):
        self.ec2connection = boto.ec2.connect_to_region(self.region, aws_access_key_id=self.access_key, aws_secret_access_key=self.secret_key)

    def create_snapshot(self, volume_id, description=None):
        self.ec2connection.create_snapshot(volume_id, description)

    def rotate_snapshot(self, volume_id, num):
        snapshot = {}
        for x in self.ec2connection.get_all_snapshots():
            if(x.volume_id == volume_id):
                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(num), len(snapshot)):
            try:
                self.ec2connection.delete_snapshot(snapshot[i][0])
            except:
                continue

    def add_tags_to_snapshot(self, volume_id):
        tags = self.ec2connection.get_all_volumes(volume_id)[0].tags

        for snapshot in self.ec2connection.get_all_snapshots():
            if(snapshot.volume_id == volume_id):
                for key, value in tags.items():
                    snapshot.add_tag(key, value)

if __name__ == '__main__':

    execfile(sys.argv[1])
    backuper = AWSBackuper(access_key, secret_key)

    for volume_id in volume_ids:
        backuper.create_snapshot(volume_id, 'auto backup')
        print "%s is backed up." % (volume_id)
        backuper.rotate_snapshot(volume_id, generation_limit)
        print "%s is rotated snapshots." % (volume_id)
        backuper.add_tags_to_snapshot(volume_id)
        print "%s is added tags." % (volume_id)

Ce script est démarré en spécifiant le script python qui sera le fichier de configuration.

# your volume_ids 
access_key, secret_key = 'YOUR ACCESS KEY', 'YOUR SECRET KEY'
volume_ids = [
    'vol-target-id1',
    'vol-target-id2',
    'vol-target-id3',
]
generation_limit = 7

Tout ce que vous avez à faire est de commencer comme ça

python ebs-backuper.py config.py

Recommended Posts

Un script qui prend un instantané d'un volume EBS
Un script qui ne reçoit qu'un flux RSS
Un script qui génère une liste d'utilisateurs du portail SoftLayer
Un ensemble de fichiers de script qui font wordcloud avec Python3
Script Python qui compare le contenu de deux répertoires
Un mémorandum de commandes de filtrage que vous pourriez oublier en un instant
Script qui analyse morphologiquement l'URL spécifiée
Un ensemble d'entiers qui satisfait ax + by = 1.
"Kit Python" qui appelle des scripts Python depuis Swift
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Un script qui combine les marges lors du collage d'un certain nombre de graphiques sur des tuiles avec gnuplot
Un script qui combine plusieurs pages d'un fichier PDF en une seule page sans marges
Qu'est-ce qu'une décision rationnelle qui maximise les chances de rencontrer une «maison idéale»?
Un script qui peut effectuer des tests de résistance en fonction du nombre de cœurs CPU
Confirmer l'écrasement du fichier avec l'option de prendre l'objet fichier comme argument avec Python argparse
Article qui vous aidera à comprendre un peu l'algorithme de collision de sphères rigides
Un script qui envoie un ping au serveur enregistré et envoie un e-mail avec Gmail un certain nombre de fois en cas d'échec