【发布时间】:2023-03-18 00:50:01
【问题描述】:
我在 AWS Lambda 函数中有 Python 3.6,它会多次处理每个项目,而不仅仅是一次,我不知道为什么。它检查特定标签值并在满足该值时通过 SNS 发送电子邮件,而不是收到一封电子邮件警报,我收到 5 个或更多。
相关代码如下,我有x出帐号。
aws_account_numbers = {xxxxxxxxxxx,xxxxxxxxxxx,xxxxxxxxxxx,xxxxxxxxxxx,xxxxxxxxxxx,xxxxxxxxxxx}
def lambda_handler(event, context):
today = datetime.date.today()
mdy = today_string = today.strftime('%m/%d/%y')
for name, acctnum in aws_account_numbers.items():
roleArn = "arn:aws:iam::%s:role/EOTSS-Monitor-Tags-expenddate" % acctnum
stsClient = boto3.client('sts')
sts_response = stsClient.assume_role(RoleArn=roleArn,RoleSessionName='AssumeCrossAccountRole', DurationSeconds=1800)
ec2 = boto3.resource(service_name='ec2',region_name=region,aws_access_key_id = sts_response['Credentials']['AccessKeyId'],
aws_secret_access_key = sts_response['Credentials']['SecretAccessKey'], aws_session_token = sts_response['Credentials']['SessionToken'])
for instance in ec2.instances.all():
if instance.tags is None:
continue
for tag in instance.tags:
if tag['Key'] == 'expenddate':
expiredInstances=[]
if (tag['Value']) <= mdy:
sns_client.publish(
TopicArn = 'arn:aws:sns:us-east-1:xxxxxxxxxxx:EOTSS-Monitor-Tag-Exceptions-Temp',
Subject = '!!!! Tag Exception has Expired.',
Message = str("The tag exception for instance %s has expired in account %s" % (instance.id,acctnum)))
else:
print ("end")
return "sucess"
【问题讨论】:
-
如果您在多个帐户中有多个满足要求的实例,会有什么预期行为?
-
什么触发了您的 Lambda 执行?一个事件?它计划在某个地方运行?你手动运行它吗?
-
John - 多个帐户中有多个实例可能满足标签值。有些日子没有其他日子,标签符合该标准的多个实例。
-
这是由 CloudWatch 规则在美国东部标准时间每天凌晨 2 点触发的。我发现有趣的是,在测试时我切换了 SNS 主题,这样在测试期间我就不会向整个团队发送电子邮件。我将 SNS 主题切换到只通知我的主题。当我这样做时,我只会为每个实例收到一个电子邮件警报,而不是每个我收到的其他 SNS 主题的 4 个警报。
标签: python-3.x amazon-web-services aws-lambda amazon-sns