Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3 AWS lambda函数用于获取用户访问密钥年龄_Python_Amazon Web Services_Aws Lambda_Boto3 - Fatal编程技术网

Python3 AWS lambda函数用于获取用户访问密钥年龄

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

我正在尝试获取多个AWS帐户中每个用户的访问密钥年龄。我目前有打印出访问密钥年龄的代码,但代码没有从错误中正确返回。我使用的代码是

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
?不,我不被要求这样做事实上解决了问题!非常感谢你的帮助!这确实解决了问题!非常感谢你的帮助!