如何对 Lambda 函数 SQS ReportBatchItemFailures 进行问题排查?

1 分钟阅读
0

我为我的 AWS Lambda 函数设置了部分批量响应,该函数将 Amazon Simple Queue Service(Amazon SQS)配置为事件源。现在,我的 Lambda 函数返回“ReportBatchItemFailures”列表,并出现以下其中一种情况:在没有函数错误时,Lambda 重试整个消息批处理,或者 Lambda 不重试任何部分消息批处理。我该如何解决此问题?

解决方法

**注意:**您必须在 Lambda 函数上手动配置部分批量响应,以编程方式处理部分 Amazon SQS 批处理。有关更多信息,请参阅《AWS Lambda 开发人员指南》中的报告批处理项目故障

用于激活 Lambda 函数的部分批量响应的 AWS Command Line Interface(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"

对没有函数错误时 Lambda 重试整个 SQS 消息批处理的 ReportBatchItemFailures 进行问题排查

查看 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 值。

对 Lambda 不重试任何部分消息批处理的 ReportBatchItemFailures 进行问题排查

查看 Lambda 函数代码中的部分批量响应,检查是否存在以下响应。然后,根据记录的响应修复问题。

**注意:**当您的函数返回以下任一响应时,Lambda 会将批处理视为完全成功。

对空的 batchItemFailures 列表的响应

return {"batchItemFailures":[]}

对空 batchItemFailures 列表的响应

return {"batchItemFailures": None}

对具有空的或意外 JSON 值的 EventResponse 的响应

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

对空 EventResponse 的响应

return
return None

**重要提示:您的 Lambda 函数必须返回一个含有“batchItemFailures”**JSON 值的响应,该响应包括有效消息 ID 列表。


相关信息

如何防止 Amazon SQS 消息多次调用我的 Lambda 函数?

AWS 官方
AWS 官方已更新 2 年前