需要返回for循环的结果作为lambda结果

时间:2018-09-29 23:37:16

标签: python amazon-web-services aws-lambda

我是AWS lambda的新手;我必须将lambda函数的结果返回for循环的结果,

以下代码将为过去60天未在此使用过AWS密码的用户提供密码;它已在jupyter笔记本电脑中经过测试,并且可以正常工作

import json
import boto3
import datetime
from dateutil.tz import tzutc

    resource = boto3.resource('iam')
    today = datetime.datetime.now()
    for user in resource.users.all():
        if user.password_last_used is not None:
            delta = (today - user.password_last_used.replace(tzinfo=None)).days
            if delta > 60:
                print("username: ", [user.user_name][0]," - ",delta , "days")

如何从jupyter笔记本返回以下结果

Username: abc- 96 Days 
Username: def- 64 Days 
Username: ghi- 184 Days
Username: mno- 158 Days 
Username: xyz- 95 Days

我尝试将输出追加到数组并返回该数组但返回Null的Lambda代码:-

import json
import boto3
import datetime
from dateutil.tz import tzutc

def lambda_handler(event, context):

    resource = boto3.resource('iam')
    client = boto3.client('iam')
    today = datetime.datetime.now()
    userName = []
    for user in resource.users.all():
        if user.password_last_used is not None:
            delta = (today - user.password_last_used.replace(tzinfo=None)).days
            if delta > 30:
                userName.append("username: ", [user.user_name][0]," - ",delta , "days")

    return userName

2 个答案:

答案 0 :(得分:0)

问题在于您如何附加结果。 Append不像打印一样采用逗号分隔的值。使用以下行使其起作用。

userName.append(f"username: {[user.user_name][0]}- {delta} days")

或以下(如果您使用的是python 2

userName.append("username: {}- {} days".format([user.user_name][0],delta))

还要确保该策略同时允许IAM:GetUser和IAM:ListUsers

答案 1 :(得分:0)

import json
import boto3
import datetime
from dateutil.tz import tzutc

def lambda_handler(event, context):

    resource = boto3.resource('iam')
    client = boto3.client('iam')
    sns = boto3.client('sns')
    today = datetime.datetime.now()
    physicalString ='Below users not logged into AWS console for 90 days\n'
    final_report = ''
    final_result = ''
    number =int(1)
    for user in resource.users.all():
        if user.password_last_used is not None:
            delta = (today - user.password_last_used.replace(tzinfo=None)).days
        if delta >= 0:
            final_result= str(number) + " username: "+ [user.user_name][0]+" - "+str(delta) + "days\n"
            final_report = final_report+final_result
            number=number+1
    response = sns.publish(
        TopicArn='arn:aws:sns:XXXXXXXXXXXX:AWS_KMSKEY',
        Message= physicalString + final_report,
        Subject='IAM USER'
    )

以上代码有效,我们能够获得如下输出的用户列表:-

1 username: abc- 102days
2 username: efg- 190days
3 username: zyz- 164days