使用 boto3 invoke() 时获取 AWS Lambda 响应

Man*_*uel 3 amazon-web-services boto3 aws-lambda

我目前正在编写一个与一些 AWS lambda 函数交互的 python 脚本。在其中一个函数中,我的响应包含我的脚本中需要的列表。

问题是,当我使用该invoke()函数时,响应是一个包含请求信息的 json。

response = aws_lambdaClient.invoke(FunctionName = 'functionName', Payload = payload)
Run Code Online (Sandbox Code Playgroud)

我使用的函数将此作为返回

return {'names': aList, 'status': 'Success!'}
Run Code Online (Sandbox Code Playgroud)

如果我打印出响应,我会得到:

{'ResponseMetadata': {'RequestId': 'xxxxxxxxx', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Thu, 07 Nov 2019 14:28:25 GMT', 'content-type': 'application/json', 'content-length': '51', 'connection': 'keep-alive', 'x-amzn-requestid': 'xxxxxxxxxx', 'x-amzn-remapped-content-length': '0', 'x-amz-executed-version': '$LATEST', 'x-amzn-trace-id': 'root=xxxxxxxxx;sampled=0'}, 'RetryAttempts': 0}, 'StatusCode': 200, 'ExecutedVersion': '$LATEST', 'Payload': <botocore.response.StreamingBody object at 0x0000023D15716048>}
Run Code Online (Sandbox Code Playgroud)

我喜欢得到

{'names': aList, 'status': 'Success!'}
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一目标有什么想法吗?或者我应该找到另一种获取数据的方法(也许将我需要的列表放入 s3 存储桶中,然后从那里获取它)。

Ric*_*ard 13

曼努埃尔,

如前所述,返回信息位于返回的 json 中的 Payload 元素内。Payload 是一个 boto3 对象类型,您需要通过它的 read() 方法访问它的内容。

我用来获取从 lambda 函数返回的 python 字典的代码是这样的:

payload = json.loads(response['Payload'].read())

statusCode = payload.get('statusCode')
message = payload.get('message')
results = payload.get('results')
Run Code Online (Sandbox Code Playgroud)