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