[英]Getting the response results from an asynchronous call to AWS lambda in python
我有一個 AWS lambda function 我可以同步調用它並使用以下代碼返回結果
response = lambda_client.invoke(
FunctionName=FUNCTION_NAME,
InvocationType='RequestResponse',
LogType='Tail',
Payload=payload,
Qualifier=$LATEST
)
響應負載的類型為<botocore.response.StreamingBody object at 0x115fb3160>
所以我使用下面的代碼來提取工作正常的負載。
response_body = response['Payload']
response_str = response_body.read().decode('utf-8')
response_dict = eval(response_str)
現在,我需要異步調用我的 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
我錯過了什么? 如果響應負載與同步調用的類型相同,為什么會出現此解析錯誤? 有什么建議嗎?
編輯
為清楚起見,我理解如果InvocationType='Event'
,那么我們只會獲得invoke
調用的狀態,而不是 lambda function 結果。 但就我而言,我需要兩者 - 啟動 lambda 異步並在完成后返回結果。 我怎么做? 是否將結果寫回 s3 並定期檢查唯一的選項?
InvocationType='Event'
表示您沒有得到響應。 異步 Lambda 調用意味着您只想調用 function,而不是等待響應。 來自 function 的響應負載被服務丟棄。
當您異步調用 function 時,Lambda 會將事件發送到隊列。 一個單獨的進程從隊列中讀取事件並運行您的 function。 將事件添加到隊列時,Lambda 會返回成功響應,但不包含其他信息。 (重點補充)
https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html
請注意,這里提到的隊列是 Lambda 服務內部的隊列,不要與 Amazon Simple Queue Service (SQS) 混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.