如何从AWS Lambda函数获得返回响应

时间:2016-04-22 04:38:52

标签: python-2.7 aws-lambda

我有一个简单的lambda函数,它返回一个dict响应,另一个lambda函数调用该函数并打印响应。

lambda函数A

def handler(event,context):
    params = event['list']
    return {"params" : params + ["abc"]}

lambda函数B调用A

a=[1,2,3]
x = {"list" : a}
invoke_response = lambda_client.invoke(FunctionName="monitor-workspaces-status",
                                       InvocationType='Event',
                                       Payload=json.dumps(x))
print (invoke_response)

invoke_response

{u'Payload': <botocore.response.StreamingBody object at 0x7f47c58a1e90>, 'ResponseMetadata': {'HTTPStatusCode': 202, 'RequestId': '9a6a6820-0841-11e6-ba22-ad11a929daea'}, u'StatusCode': 202}

为什么响应状态为202?另外,如何从invoke_response获取响应数据?我找不到如何做的明确文件。

2 个答案:

答案 0 :(得分:36)

202响应表示Accepted。这是一个成功的回复,但告诉您您已请求的操作已启动但尚未完成。获得202的原因是因为您异步调用了Lambda函数。您的InvocationType参数设置为Event。如果要进行同步通话,请将其更改为RequestResponse

一旦这样做,您就可以获得这样的返回数据:

data = invoke_response['Payload'].read()

答案 1 :(得分:-1)

尝试:data = invoke_response['Payload'].read() read(),因为它是一个StreamingBody对象

<botocore.response.StreamingBody object at 0x110b91c50>

它在boto3文档中。您可以在此处找到有关此内容的更多详细信息:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/resources.html#actions