我有一个 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 并定期检查这是唯一的选择?