如何對 Lambda 函數 SQS ReportBatchItemFailures 進行疑難排解?

上次更新日期:2022 年 2 月 24 日

我為 AWS Lambda 函數設定了部分批次回應,該函數將 Amazon Simple Queue Service (Amazon SQS) 設定為事件來源。現在,我的 Lambda 函數傳回「ReportBatchItemFailures」清單,並發生以下情況之一:沒有函數錯誤時,Lambda 重試整個訊息批次,或者 Lambda 不重試任何部分訊息批次。我該如何對此問題進行疑難排解?

解決方案

注意:您必須在 Lambda 函數上手動設定部分批次回應,以程式設計方式處理部分 Amazon SQS 批次。有關更多資訊,請參閲 AWS Lambda 開發人員指南中的報告批次項目故障

用於啟動 Lambda 函數部分批次回應的 AWS 命令列界面 (AWS CLI) 命令範例

重要提示:<esm_UUID> 替代為 Amazon SQS 事件來源映射的通用唯一識別符 (UUID)。要擷取事件來源映射的 UUID,請執行 list-event-source-mappings AWS CLI 命令。如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版本的 AWS CLI

aws lambda update-event-source-mapping --uuid <esm_UUID> --function-response-types "ReportBatchItemFailures"

對 ReportBatchItemFailures 進行疑難排解,其中 Lambda 在沒有函數錯誤時重試整個 SQS 訊息批次

檢閱 Lambda 函數程式碼中的部分批次回應,以確定是否存在以下任何回應。然後,根據記錄的回應修復問題。

注意:如果您的函數返回以下任何回應,Lambda 將批次視為完全故障。

不是有效 JSON 的 EventResponse 的回應

return "Hello world"
return ""

空白 itemIdentifier 值的回應

return {"batchItemFailures":[{"itemIdentifier": ""}]}

空 itemIdentifier 值的回應

return {"batchItemFailures":[{"itemIdentifier": None}]}

具有錯誤索引鍵名稱的 itemIdentifier 值的回應

return {"batchItemFailures":[{"bad_key": messageID}]}

帶有不存在訊息 ID 的 itemIdentifier 值的回應

return {"batchItemFailures":[{"itemIdentifier": "random_ID"}]}

重要提示:您的 Lambda 函數必須返回有效的 itemIdentifier JSON 值。

對 ReportBatchItemFailures 進行故障排解,其中 Lambda 不重試任何部分訊息批次

檢閱 Lambda 函數程式碼中的部分批次回應,以確定是否存在以下任何回應。然後,根據記錄的回應修復問題。

注意:當您的函數返回以下任何回應時,Lambda 將批次視為完全成功。

空白 batchItemFailures 清單的回應

return {"batchItemFailures":[]}

空 batchItemFailures 清單的回應

return {"batchItemFailures": None}

具有空白或意外 JSON 值的 EventResponse 的回應

return {}
return {"Key1":"Value1"}

空 EventResponse 的回應

return
return None

重要提示: 您的 Lambda 函數必須返回包含「batchItemFailures」 JSON 值的回應,該值包括有效訊息 ID 的清單。


此文章是否有幫助?


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