Для каждого региона AWS
1.Получить все экземпляры EC2, которые либо
2. отмечены тегом Владелец и значением Неизвестно или неизвестно
3. пропустить тегВладелец
Для каждого экземпляра EC2
4. Проверьте, есть ли у экземпляра тег «Terminate_On»
Иначе
5. Отметьте экземпляр тегом«Terminate_On» и значение даты через 7 дней.
шаги 1,2 и 3 выполнены:
import boto3
import collections
import datetime
import time
import sys
from datetime import datetime
from dateutil.relativedelta import relativedelta
ec = boto3.client('ec2', 'eu-west-1')
ec2 = boto3.resource('ec2', 'eu-west-1')
date_after_month = datetime.now()+ relativedelta(days=7)
#print date_after_month.strftime('%d/%m/%Y')
def lambda_handler(event, context):
reservations = ec.describe_instances().get('Reservations', [])
for reservation in reservations:
for instance in reservation['Instances']:
tags = {}
for tag in instance['Tags']:
tags[tag['Key']] = tag['Value']
if not 'Owner' in tags:
a = instance['InstanceId'] + " does not have Owner tag"
elif tags['Owner'] in ['Unknown', 'unknown']:
b = instance['InstanceId'] + " has [U|u]nknown Owner tag"
if not 'TerminateOn' in tags:
ec2.create_tags(
Resources=[instance['InstanceId']],
Tags= [{
'Key':'TerminateOn',
'Value':date_after_month.strftime('%d/%m/%Y')}])
#print a+" "+b
4.для экземпляров, возвращаемых из кода выше (экземпляры с тегами владельца и экземпляры без тега владельца), проверьте, существует ли тег Terminate_On
5.Если нет, создайте этот тег с date_after_month.strftime('%d/%m/%Y')
в качестве значения
Проблемы на шаге 5: если запущен один экземпляр EC2, нет проблем, тег создается, но если большечем один, то тег создается только для первого
и отображается следующая ошибка:
for tag in instance['Tags']:
KeyError: 'Tags'