我将我的 AWS Lambda 函数配置为处理 Amazon Simple Queue Service (Amazon SQS) 队列中的消息,但是 SQS 触发器未激活。
您可以使用 Lambda 函数处理 Amazon SQS 队列中的消息。事件源映射从某个事件源读取数据,然后调用 Lambda 函数。
Lambda 轮询者持续不断地向 Amazon SQS 队列发出 ReceiveMessage API 调用。如果 ReceiveMessage API 调用未完成,则 AWS::Lambda::EventSourceMapping 资源将被停用。
确保您的 Lambda 函数执行角色拥有 ChangeMessageVisibility、DeleteMessage、GetQueueAttributes 和 ReceiveMessage API 操作的权限。
如果 Amazon SQS 队列配置了 AWS Key Management Service (AWS KMS) SSE-KMS 加密,则请确保:
注意: 采用 SSE-KMS 加密的 Amazon SQS 队列无法调用 AWS 跨账户中的 Lambda 函数。
您可以使用 AWS CloudTrail 事件历史记录来查找数据事件和查看错误代码以进行故障排除。 注意: 默认情况下,您的 AWS 账户的 CloudTrail 处于启用状态。
要持续记录您的 AWS 账户中的事件,请创建一个追踪记录。该追踪记录会为在您的账户上进行的 API 调用创建日志。 注意: 您还可以在 CloudTrail 控制台中查看最新的事件历史记录。
完成以下步骤:
1.打开 CloudTrail 控制台。
2.在导航窗格中,选择 Event history(事件历史记录)。
3.针对您的使用案例,按照说明查看、显示和筛选 CloudTrail 事件。
您也可以将记录的事件历史记录下载为 CSV 或 JSON 格式的文件。
查看 CloudTrail 事件名称 LambdaESMDisabled。事件日志包含数据事件 LambdaESMDisable,其中包含有关 Amazon SQS 触发器未激活原因的详细信息。
有关详细信息,请参阅使用 CloudTrail 排查已停用的 Lambda 事件源的问题。
您可以为 Amazon SQS 指标创建 Amazon CloudWatch 警报,以获取已接收、已发送、已删除等消息的数量的通知。例如,您可以使用 Amazon SQS 指标 NumberOfMessagesReceived 来获取最近返回的消息数量。如果数量为 0,则调用一个新的 Lambda 函数来检查 Amazon SQS 触发器的状态。如果 Amazon SQS 触发器仍处于停用状态,则使用新的 Lambda 函数将其激活。
有关详细信息,请参阅Available CloudWatch metrics for Amazon SQS(可用于 Amazon SQS 的 CloudWatch 指标)。
如何授予对 Amazon SQS 队列的访问权限?
如何排查 Lambda 函数故障?
This article was reviewed and updated on 2026-03-06.
AWS Official
已回复 15 天前
rePost Polyglot
已提问 3 年前
Tim
已发布 2 年前