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

use*_*927 22 python-2.7 aws-lambda

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

lambda函数A.

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

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)
Run Code Online (Sandbox Code Playgroud)

invoke_response

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

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

gar*_*aat 43

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

一旦你这样做,你可以得到这样的返回数据:

data = invoke_response['Payload'].read()
Run Code Online (Sandbox Code Playgroud)

  • `.read()`返回类型`bytes`所以如果你期望一个字符串,JSON等,你必须``.decode()`它们.例如`response ['Payload'].read().decode()` (9认同)
  • 并且因为`json.dumps(obj)`返回一个带引号的字符串,(**如果你使用那个**作为你的`lambda_handler`的`return`值)你将得到一个字符串,如果你做`json.loads (响应['Payload'].read().decode())'并且必须在其周围包装另一个`json.loads()`.因此,不要在lambda函数中显式转换为JSON. (4认同)
  • 让我的一天!非常感谢。在文档中的任何地方都没有找到这个 (3认同)
  • 有没有办法在调用类型事件完成后获得回调? (2认同)