如何對 Lambda 非同步叫用問題進行疑難排解?

上次更新日期:2022 年 10 月 17 日

我設定了一個 AWS Lambda 函數來同步叫用,但是目的地沒有啟動。我要如何修正此問題?

我透過 Lambda 主控台叫用 Lambda 函數時,它是被同步或非同步叫用?

-或-

如何修復重複的 Lambda 函數叫用?

解決方案

當您同步叫用 Lambda 函數但失敗,可能的原因如下:

  • Lambda 沒有執行程式碼中動作的許可。
  • 叫用 Lambda 函數的 AWS 服務沒有足夠的許可。
  • Lambda 函數會以同步方式叫用。
  • 在 Lambda 函數的非同步叫用設定中,重試嘗試次數設定為 0。

請依照下列步驟,對同步叫用問題進行疑難排解:

1.    判定 Lambda 函數如何叫用。函數是否使用 AWS CLI 叫用? 函數是否透過 AWS 服務叫用?

2.    檢查 AWS 服務是以同步或非同步方式叫用 Lambda 函數

3.    使用下列命令同步叫用 Lambda 函數:

aws lambda invoke
  --function-name my-function 
      --invocation-type Event
          --cli-binary-format raw-in-base64-out
              --payload '{ "key": "value" }' response.json

查看是否傳回 202 狀態碼,或者命令是否傳回錯誤。

4.    檢閱 Lambda 函數的 Amazon CloudWatch Logs,確認是否有重複的叫用:

  • 是否具有相同的請求 ID。
  • 傳回錯誤或逾時。

如需詳細資訊,請參閱如何防止重複的 Lambda 函數叫用?

    5.    如果重複的叫用具有相同的請求 ID,並傳回錯誤或逾時,請設定非同步叫用的錯誤處理。使用此設定,您可以控制 Lambda 服務在發生故障時可執行的重試次數。

    如需詳細資訊,請參閲 AWS Lambda 中的錯誤處理和自動重試

    備註:具有相同的請求 ID,並傳回錯誤或逾時的重複叫用,表示 Lambda 已重試函數。

    6.    如果重複的叫用沒有返回錯誤且沒有逾時,請執行以下操作:

    • 確保 Lambda 函數的程式碼為等冪,並且能夠多次處理相同訊息。
    • 確保 Lambda 函數設定了夠高的並行限制,足以處理它接收的叫用請求數目。
    • 辨識並解決 Lambda 函數傳回的任何錯誤。

    如需更多資訊,請參閲如何對 Lambda 函數故障進行疑難排解?

    備註:如果重複的叫用來自客戶端,請求 ID 將有所差異。

    7.    如果仍然無法解決問題,請在 AWS Support 建立案例。在您的案例中提供下列資訊:

    • Lambda 函數 Amazon Resource Name (ARN)。
    • Lambda 函數設定上的工作流程,包括所有內含服務。
    • 有關問題是間歇性或連續性發生的詳細資訊。
    • 完整的 .txt 格式 CloudWatch 日誌,從問題發生開始。這些 CloudWatch 日誌用於識別 Lambda 函數錯誤,包括逾時問題、初始化持續時間和許可問題。
    • 問題的確切時間戳記,帶有時區或 UTC 時間戳記。

    備註:由於安全和隱私權因素,AWS Support 代表無法存取客戶的 CloudWatch 日誌。


    此文章是否有幫助?


    您是否需要帳單或技術支援?