AWS LAMBDA Demo Lab || Taking a AMI Backup using Lambda Function

Опубликовано: 03 Май 2026
на канале: Fariddin Im
574
18

copy the script below

import json

import boto3

import datetime


#User inputs should be given here

#=======================================================================================================

instanceList = ['replace instance id']

snsTopic = 'replace arn of sns topic'

#=======================================================================================================


ec2client = boto3.client('ec2')

snsclient = boto3.client('sns')

currentDT = datetime.datetime.now()

date = currentDT.strftime("%m-%d-%Y")

delDate = currentDT + datetime.timedelta(days=2)

delDate = delDate.strftime("%m-%d-%Y")


def delete_ami(name):

try:

describeImages = ec2client.describe_images(Filters=[{'Name': 'tag:Name','Values': ['AMIBackup-'+name]}])['Images']

for image in describeImages:

imageId = image['ImageId']

snapList = [i['Ebs']['SnapshotId'] for i in image['BlockDeviceMappings']]

for tag in image['Tags']:

try:

if tag['Key'] == 'DeleteOn':

tagDelDate = tag['Value']

except Exception as e:

print ('Tag Errors: ',e)

if tagDelDate == date:

print ('Deregistering image: ',imageId)

dereg_img = ec2client.deregister_image(ImageId=imageId)

for snapId in snapList:

print ('Deleting Snapshot: ',snapId)

del_snap = ec2client.delete_snapshot(SnapshotId=snapId)

#response=snsclient.publish(TopicArn=snsTopic,Message= 'Image of AMIBackup-'+name+' with image id - '+imageId+' has been deleted.',Subject='Delete AMI Notification',MessageStructure='String',)

else:

print ('Image cannot be deleted: ',imageId)

except Exception as e:

print ('Image Deletion Errors: ',e)

def lambda_handler(event, context):

try:

response = ec2client.describe_instances(InstanceIds = instanceList)

for instance in response['Reservations']:

for i in instance['Instances']:

try:

tagList = i.get('Tags','')

for tag in tagList:

if tag.get('Key','') == 'Name':

name = tag.get('Value','')

delete_ami(name)

break

createImage = ec2client.create_image(InstanceId=i.get('InstanceId',''),Name="Lambda - " + i.get('InstanceId','') + " from " + date + "(2 Days Backup)", Description="Lambda created AMI of instance " + i.get('InstanceId','') + " from " + date, NoReboot=True, DryRun=False)

createTags = ec2client.create_tags(Resources=[createImage.get('ImageId','')],Tags=[{'Key': 'Name','Value': 'AMIBackup-'+name},{'Key': 'DeleteOn','Value': delDate}])

print ('Image Created: ',createImage)

#publish = snsclient.publish(TopicArn= snsTopic,Message= 'AMI ('+createImage.get('ImageId','')+') of '+name+' ('+i.get('InstanceId','')+') has been created with a 2 days rolling back policy.',Subject='AMI Creation Notification',MessageStructure='String',)

except Exception as e:

print ('Image Creation Errors: ',e)

except Exception as e:

print ('Errors: ',e)




till here copy
------------------------------------------------------------------------------

#learnsomethingnew #learnandgrow
#Studygram
#KnowledgeIsPower
#Edutainment
#LearningCommunity
#StudyMotivation
#Skillshare
#E-Learning
#DigitalEducation
#StudyInspiration
#KnowledgeSharing
#BrainTraining
#StudyGoals
#OnlineCourses
#LearnEveryday
#EducationalVideos
#SmartLearning
#StudySmart
#EducationMatters
#LearnAndGrow
#Education
#Learning
#Knowledge
#Study
#Tutorial
#OnlineLearning
#EduTube
#LearnWithMe
#StudyTips
#SkillBuilding
#Academic
#SelfImprovement
#StudentLife
#SchoolTips
#ExamPreparation
#EducationalContent
#Brainstorming #natgateway #NAT-GATEWAY
#LifelongLearning
#GrowthMindset
#Inspiration #aws #braintraining #digitaleducation #iam #awsiam #techstudystream