相关疑难解决方法(0)

在python中从对AWS lambda的异步调用中获取响应结果

我有一个 AWS lambda 函数,我可以同步调用它并使用以下代码返回结果

response = lambda_client.invoke(
        FunctionName=FUNCTION_NAME,
        InvocationType='RequestResponse',
        LogType='Tail',
        Payload=payload,
        Qualifier=$LATEST
    )
Run Code Online (Sandbox Code Playgroud)

响应 Payload 的类型<botocore.response.StreamingBody object at 0x115fb3160>所以我使用下面的代码来提取工作正常的有效负载。

response_body = response['Payload']
response_str = response_body.read().decode('utf-8')
response_dict = eval(response_str)
Run Code Online (Sandbox Code Playgroud)

现在,我需要异步调用我的 lambda,所以我更改了调用类型 InvocationType='Event'

它给了我一个与以前相同类型的有效负载的响应,botocore.response.StreamingBody object但我在这行出现错误 -response_dict = eval(response_str)

错误消息说

    response_dict = eval(response_str)
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing
Run Code Online (Sandbox Code Playgroud)

我错过了什么?如果响应负载与同步调用的类型相同,为什么会出现解析错误?有什么建议吗?

编辑

为清楚起见,我明白如果InvocationType='Event', 那么我们只得到invoke调用的状态,而不是 lambda 函数的结果。不过,在我的情况下,我需要两者 - 启动 lambda 异步并在完成后返回结果。我怎么做?是否将结果写回 s3 并定期检查这是唯一的选择?

amazon-web-services aws-lambda

5
推荐指数
1
解决办法
1847
查看次数

标签 统计

amazon-web-services ×1

aws-lambda ×1