簡體   English   中英

從 python 中對 AWS lambda 的異步調用獲取響應結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM