#python #amazon-web-services #aws-lambda #boto3
#python #amazon-веб-сервисы #aws-lambda #boto3
Вопрос:
Я создал следующую лямбда-функцию на своем локальном компьютере, чтобы я мог развернуть ее и ежедневно запускать через выражение cron события cloudwatch для очистки нужного AMI и его снимков. Он также заботится об отказе от снимков EBS.
Критерии удаления AMI — сначала найдите AMI, у которого есть тег ASGfrontendWP_AMI_, и если ему более 1 дня, отметьте его для отмены регистрации. Функция освобождает AMI, который в настоящее время используется конфигурацией запуска AWS.
Я уверен, что есть несколько способов оптимизировать эту лямбда-функцию и код, и я хотел бы знать, как я могу удалить соответствующий снимок на основе ami-id. Вот мой код
import boto3
from dateutil.parser import parse
import datetime
client = boto3.client('ec2')
current_date = datetime.datetime.now().date()
age = 1
def handler(event, context):
def days_old(date):
get_date_obj = parse(date)
date_obj = get_date_obj.replace(tzinfo=None)
diff = datetime.datetime.now() - date_obj
return diff.days
ec2 = boto3.client('ec2')
amis = ec2.describe_images(Filters=[
{
'Name': 'name',
'Values': ['ASGfrontendWP_AMI_' '*']
}
])
#filter ami-id and snapshot-id
for ami in amis['Images']:
create_date = ami['CreationDate']
ami_id = ami['ImageId']
# print ami['ImageId'], ami['CreationDate']
day_old = days_old(create_date)
if day_old >= age:
print ("deleting -> " ami_id " - create_date = " create_date)
# deregister the AMI
ec2.deregister_image(ImageId=ami_id)
for snap in ami['BlockDeviceMappings']:
#store snapshots
s_id = snap['Ebs']['SnapshotId']
return amis
return {
'statusCode': 200,
}
#handler("test", "test")
Комментарии:
1. Просто не хватает этой части? boto3.amazonaws.com/v1/documentation/api/latest/reference /…
2. да, пожалуйста, добавьте в него некоторый код.