我有一个lambda函数,它生成了一个没有MFA活动的用户列表,在生成该列表后,我想使用SNS通过电子邮件发送输出,但按照目前的方式,它一次发送一个用户,如果我将发布留在函数之外,则只发送一个名称
import json
import boto3
def lambda_handler(event, context):
sns_resource = boto3.resource('sns')
TOPIC_ARN = 'sns_topic_arn'
sns_topic = sns_resource.Topic(TOPIC_ARN)
iam = boto3.resource('iam')
users = iam.users.all()
for user in users:
has_any = any(user.mfa_devices.all())
if not has_any:
print(user.name)
sns_topic.publish(Message=user.name)
因此,您基本上只需要收集循环之外的名称,并将其推送到SNS的消息中。使用联接是一种常见的模式。类似这样的东西:
import json
import boto3
def lambda_handler(event, context):
sns_resource = boto3.resource('sns')
TOPIC_ARN = 'sns_topic_arn'
sns_topic = sns_resource.Topic(TOPIC_ARN)
iam = boto3.resource('iam')
users = iam.users.all()
naughty_list = []
for user in users:
has_any = any(user.mfa_devices.all())
if not has_any:
naughty_list.append(user.name)
sns_topic.publish(Message="Naughty list users: n{}".format("n".join(naughty_list)))