nad*_*nad 5 amazon-web-services 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 并定期检查这是唯一的选择?
InvocationType='Event'意味着您没有收到回复。异步 Lambda 调用意味着您只想调用该函数,而不是等待响应。来自该函数的响应负载被服务丢弃。
当您异步调用函数时,Lambda 会将事件发送到队列。一个单独的进程从队列中读取事件并运行您的函数。当事件添加到队列时,Lambda 将返回成功响应,而无需其他信息。 (强调已添加)
https://docs.aws.amazon.com/lambda/latest/dg/inplication-async.html
请注意,这里提到的队列是 Lambda 服务内部的队列,不要与 Amazon Simple Queue Service (SQS) 混淆。
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |