【发布时间】:2018-11-22 09:03:00
【问题描述】:
对于每个 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.对于上面代码返回的实例(带有Owner标签的实例和没有owner标签的实例)检查Terminate_On标签是否存在
5.如果没有,则使用date_after_month.strftime('%d/%m/%Y') 作为值创建该标签
问题出在第 5 步,如果一个 EC2 实例正在运行,没问题,创建标签,但如果超过一个,则只为第一个创建标签
并显示以下错误:
for tag in instance['Tags']:
KeyError: 'Tags'
【问题讨论】:
-
添加一些打印语句或日志以查看
instance变量中的内容
标签: python amazon-web-services amazon-ec2 aws-lambda