为什么我的 Lambda Amazon SQS 触发器被禁用了?

1 分钟阅读
0

我将我的 AWS Lambda 函数配置为处理 Amazon Simple Queue Service (Amazon SQS) 队列中的消息,但是 SQS 触发器未激活。

简述

您可以使用 Lambda 函数处理 Amazon SQS 队列中的消息事件源映射从某个事件源读取数据,然后调用 Lambda 函数。事件源映射的状态为:创建中启用中已启用禁用中已禁用更新中删除中

Lambda 轮询者持续不断地向 Amazon SQS 队列发出 ReceiveMessage API 操作调用。如果 ReceiveMessage API 调用未完成,则 EventSourceMapping 资源将被禁用。

解决方案

Lambda 函数权限

确保您的 Lambda 函数执行角色拥有以下权限:

AWS Key Management Service (AWS KMS) 权限

如果 Amazon SQS 队列配置了 SSE-KMS 加密,请确保:

**请注意:**采用 SSE-KMS 加密的 Amazon SQS 队列无法调用其他 AWS 账户中的 Lambda 函数 (cross-account)。

CloudTrail 事件历史

您可以使用 AWS CloudTrail 来查找事件。默认情况下,您的 AWS 账户的 CloudTrail 处于启用状态。

要持续记录您的 AWS 账户中的事件,请创建一个追踪记录。CloudTrail 使用追踪记录创建日志,记录您账户发出的 API 调用。这些日志将传输到您指定的 Amazon Simple Storage Service (Amazon S3) 桶。如果您未配置追踪记录,您仍然可以在 CloudTrail 控制台的事件历史记录中查看最新的事件。

1.打开 CloudTrail 控制台

2.在导航窗格中,选择事件历史记录

3.针对您的应用案例,按照说明查看、显示和筛选 CloudTrail 事件

您也可以将记录的事件历史记录下载为 CSV 或 JSON 格式的文件

查看 CloudTrail 事件名称 LambdaESMDisabled事件日志包含参数 ESMDisableReason,其中包含有关 Amazon SQS 触发器未激活原因的更多信息。

有关更多信息,请参阅使用 CloudTrail 记录 Lambda API 调用

Amazon CloudWatch 警报(可选)

您可以为 Amazon SQS 指标创建 CloudWatch 警报,以获取已接收、已发送、已删除等消息的数量的通知。例如,您可以使用 Amazon SQS 指标 NumberOfMessagesReceived 来获取最近返回的消息数量。如果数量为 0,则调用一个新的 Lambda 函数来检查 Amazon SQS 触发器的状态。如果 Amazon SQS 触发器仍处于禁用状态,则使用新的 Lambda 函数将其激活。

有关更多信息,请参阅可用于 Amazon SQS 的 CloudWatch 指标

相关信息

我需要什么权限才能访问 Amazon SQS 队列?

如何解决 Lambda 函数失败的问题?

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