2018년 3월 22일 목요일

lambda를 이용하여 모든 EC2를 AMI Backup 하기

EC2의 AMI를 Lambda를 이용하여 Backup 하는 소스임.



import boto3
import datetime
import time
import os

ec2 = boto3.resource('ec2', region_name='ap-northeast-2')
ec = boto3.client('ec2')

def create_backup_snapshot():
    print("\n\nAWS snapshot backups starting at %s" % datetime.datetime.now())
    instances = ec2.instances.filter(
        Filters=[{'Name': 'instance-state-name', 'Values': ['running']},{'Name': 'tag:Name', 'Values': ['*DSTG*']},{'Name': 'tag:BackupYN', 'Values': ['Y']}])
     
    for instance in instances:
        instance_name = filter(lambda tag: tag['Key'] == 'Name', instance.tags)[0]['Value']
        print("instance_name [%s]" % instance_name)
     
        for volume in ec2.volumes.filter(Filters=[{'Name': 'attachment.instance-id', 'Values': [instance.id]}]):
            description = 'scheduled-%s.%s-%s' % (instance_name, volume.volume_id,
                datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
         
            response = volume.create_snapshot(Description=description, VolumeId=volume.volume_id) 
         
            if response:
                print("Snapshot created with description [%s]" % description)
                ec2.create_tags( Resources=[response.snapshot_id],
                Tags=[
                    {'Key': 'Name', 'Value': description}
                ])
                #snapshot = ec2.Snapshot(response.snapshot_id)
                #snapshot.create_tags(Tags=[{'Key': 'Name','Value': description}])

def backup_snapshot():
    print("\n\nAWS snapshot backups starting at %s" % datetime.datetime.now())
    instances = ec2.instances.filter(
        Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']},{'Name': 'tag:Name', 'Values': ['*DSTG*']}])

    for instance in instances:
        instance_name = filter(lambda tag: tag['Key'] == 'Name', instance.tags)[0]['Value']
        print("instance_name [%s]" % instance_name)
        create_time = datetime.datetime.now()
        create_fmt = create_time.strftime('%Y-%m-%d')
        AMIid = ec.create_image(InstanceId=instance.id, Name="Lambda-" + instance_name +"-"+instance.id + " from " + create_fmt, Description="Lambda created AMI of instance " + instance.id + " from " + create_fmt, NoReboot=True, DryRun=False)

     

    print("\n\nAWS snapshot backups completed at %s" % datetime.datetime.now())


def lambda_handler(event, context):
    backup_snapshot()
    #create_backup_snapshot()
    return 'successful'

댓글 없음:

댓글 쓰기

EBS 볼륨 확장 정리: 수동 확장부터 자동 확장, 모니터링까지 (Linux 기준)

  Amazon Web Services 에서 EC2 인스턴스를 운영하다 보면 EBS 볼륨 용량을 늘려야 하는 상황은 자주 발생합니다.  하지만 EBS 볼륨 크기를 늘렸다고 해서 파일 시스템이 자동으로 확장되지는 않습니다. 볼륨 확장 이후에는 파일 ...