Lambda Python打印格式改进

2024-05-16 01:57:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个兰姆达

此lambda将关闭并报告超过特定天数的任何人的访问密钥

导入boto3、json、time、datetime、sys

sns = boto3.client('sns')
usernames = []
mylist = []

sts_client = boto3.client('sts')
assumed_role_object=sts_client.assume_role(
    RoleArn="arn:aws:iam::999999999:role/role",
    RoleSessionName="AssumedRoleSession4"
)
credentials=assumed_role_object['Credentials']
client=boto3.client(
    'iam',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
    )
def lambda_handler(event, context):
    users = client.list_users()
    for key in users['Users']:
        a = str(key['UserName'])
        usernames.append(a)
    for username in usernames:
        try:
            res = client.list_access_keys(UserName=username)  
            accesskeydate = res['AccessKeyMetadata'][0]['CreateDate'] 
            accesskeydate = accesskeydate.strftime("%Y-%m-%d %H:%M:%S")
            currentdate = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
            accesskeyd = time.mktime(datetime.datetime.strptime(accesskeydate, "%Y-%m-%d %H:%M:%S").timetuple())
            currentd = time.mktime(datetime.datetime.strptime(currentdate, "%Y-%m-%d %H:%M:%S").timetuple())
            active_days = (currentd - accesskeyd)/60/60/24 ### We get the data in seconds. converting it to days

            if 90 < active_days:
                a = str(username)
                c = int(int(round(active_days)))

                mylist.append(a)
                mylist.append(c)
        except:
                f = str('')

    print(mylist)
    finallist = ''.join(str(mylist))
    finallist = finallist

    sns_message = (finallist)
    response = sns.publish(
        TopicArn='arn:aws:sns:eu-west-2:111111111:sns',
        Message= sns_message,
        Subject='Access Keys which need rotating',
    )

这是回报

['David.Jim', 123, 'Dav.Jimmy', 469, 'David.Jimmy', 480, 'Jim.Dave', 103, 'Dave.Jimmy', 102, 'Jimmy.Dave', 179]

由于超过100名用户的访问密钥超过90天,因此很难对其进行审查。如何提高产量

谢谢 尼克


Tags: keyclientawsdatetimetimeboto3daysrole
2条回答

为什么不在代码中格式化输出?例如:

mylist = ""

if 90 < active_days:
    a = str(username)
    c = int(int(round(active_days)))

    mylist += "User: " + a
    mylist += ", days: " + str(a)
    mylist += "\n"

然后使用字符串mylist进行打印和发送。使用format方法也有其他方法可以做到这一点,但这应该可以让您开始

制作真正的对并使用pprint(表示漂亮的打印)

> import pprint
> mylist = ['David.Jim', 123, 'Dav.Jimmy', 469, 'David.Jimmy', 480, 'Jim.Dave', 103, 'Dave.Jimmy', 102, 'Jimmy.Dave', 179]
> pprint.pprint({username: active_days for username, active_days in zip(mylist[::2], mylist[1::2])}) 
{'Dav.Jimmy': 469,
 'Dave.Jimmy': 102,
 'David.Jim': 123,
 'David.Jimmy': 480,
 'Jim.Dave': 103,
 'Jimmy.Dave': 179}

当然,如果您拥有该代码,那么最好将mylist定义为beggining中的词汇

相关问题 更多 >