Python3 AWS lambda函数用于获取用户访问密钥年龄
我正在尝试获取多个AWS帐户中每个用户的访问密钥年龄。我目前有打印出访问密钥年龄的代码,但代码没有从错误中正确返回。我使用的代码是Python3 AWS lambda函数用于获取用户访问密钥年龄,python,amazon-web-services,aws-lambda,boto3,Python,Amazon Web Services,Aws Lambda,Boto3,我正在尝试获取多个AWS帐户中每个用户的访问密钥年龄。我目前有打印出访问密钥年龄的代码,但代码没有从错误中正确返回。我使用的代码是 import boto3 from time import gmtime, strftime from datetime import datetime sts = boto3.client('sts') def lambda_handler(event, context): rolesessionname = "rolename" account
import boto3
from time import gmtime, strftime
from datetime import datetime
sts = boto3.client('sts')
def lambda_handler(event, context):
rolesessionname = "rolename"
account = "123456789"
response = sts.assume_role(
RoleArn = "arn:aws:iam::" + str(account) + ":role/audit",
RoleSessionName= rolesessionname
)
credentials = response['Credentials']
iam = boto3.client(
'iam',
aws_access_key_id = credentials['AccessKeyId'],
aws_secret_access_key = credentials['SecretAccessKey'],
aws_session_token = credentials['SessionToken']
)
response = iam.list_users()
nameList = []
todaysDate = strftime("%Y-%m-%d %H:%M:%S", gmtime())
todaysDate = str(todaysDate)
todaysDate = todaysDate[0:10]
todaysDate = datetime.strptime(todaysDate, "%Y-%m-%d")
for person in response["Users"]:
curPersonName = person["UserName"]
keys = iam.list_access_keys(UserName=curPersonName)
for keyData in keys["AccessKeyMetadata"]:
keyID = keyData["AccessKeyId"]
status = keyData["Status"]
CreateDate = keyData.get("CreateDate","none")
CreateDate = str(CreateDate)
CreateDate = CreateDate[0:10]
CreateDate = datetime.strptime(CreateDate, "%Y-%m-%d")
totalDays = abs((CreateDate - todaysDate).days)
print (totalDays-1)
nameList.append({
"UserName:":curPersonName,
"Status:": status,
"Create Date": CreateDate
#"Total days:" : totalDays-1
})
return nameList
我的问题是如果我把提到的
CreateDate=datetime.strtime(CreateDate,%Y-%m-%d”)
及
totalDays=abs((CreateDate-todaysDate).days)
我获得了成功的构建和返回数据,只是没有关键的年龄,这主要是我想要的。然而,如果我把这些行保留下来并打印出来,看看它是否得到了正确的年龄。然而,它只打印出它们,然后带有错误
{
"errorMessage": "datetime.datetime(2017, 1, 11, 0, 0) is not JSON serializable",
"errorType": "TypeError",
"stackTrace": [
[
"/var/lang/lib/python3.6/json/__init__.py",
238,
"dumps",
"**kw).encode(obj)"
],
[
"/var/lang/lib/python3.6/json/encoder.py",
199,
"encode",
"chunks = self.iterencode(o, _one_shot=True)"
],
[
"/var/lang/lib/python3.6/json/encoder.py",
257,
"iterencode",
"return _iterencode(o, 0)"
],
[
"/var/runtime/awslambda/bootstrap.py",
110,
"decimal_serializer",
"raise TypeError(repr(o) + \" is not JSON serializable\")"
]
]
}
出现此错误是因为
datetime
不可JSON序列化。您正在使用保存CreateDate
中的datetime
对象
datetime.strptime(CreateDate, "%Y-%m-%d")
答案似乎是用这个值来计算你的天数:
totalDays = abs((CreateDate - todaysDate).days)
然后将其更改为字符串表示形式,然后再将其添加到返回对象:
CreateDate = CreateDate.isoformat() #or whatever return format you want.
出现此错误是因为
datetime
不可JSON序列化。您正在使用保存CreateDate
中的datetime
对象
datetime.strptime(CreateDate, "%Y-%m-%d")
答案似乎是用这个值来计算你的天数:
totalDays = abs((CreateDate - todaysDate).days)
然后将其更改为字符串表示形式,然后再将其添加到返回对象:
CreateDate = CreateDate.isoformat() #or whatever return format you want.
你试过使用strftime而不是strftime吗?我刚试过改变它们。但是我在尝试减去这两个数据值时遇到了不受支持的类型错误。你是说不要为了使用strftime而删除create date字符串吗?你是否曾经被要求打印
CreateDate
和todaysDate
?不,我不要求你尝试使用strftime
而不是strftime
?我只是尝试过更改它们。但是我在尝试减去这两个数据值时遇到了不受支持的类型错误。你是说不要为了使用strftime而删除create date字符串吗?你是否曾经被要求打印CreateDate
和todaydate
?不,我不被要求这样做事实上解决了问题!非常感谢你的帮助!这确实解决了问题!非常感谢你的帮助!