AWS SQS lambda 触发器自动禁用

问题描述 投票:0回答:4

我已经使用 lambda 触发器创建了 aws SQS。我面临的问题是,当从 sqs 发送消息时,lambda 触发器自动断开连接,并且在 cloudwatch 中也不会生成日志(生成日志流)。有人有什么想法吗?

javascript node.js amazon-web-services amazon-sqs
4个回答
5
投票

对于 SQS Lambda 触发器,

您的 Amazon SQS 角色必须包含以下权限:

  1. lambda:创建事件源映射
  2. lambda:ListEventSourceMappings
  3. lambda:列表函数

您的 Lambda 角色必须包含以下权限:

  1. sqs:更改消息可见性
  2. sqs:删除消息
  3. sqs:获取队列属性
  4. sqs:接收消息

另请注意,

  • 您的队列和 Lambda 函数必须位于同一 AWS 区域。
  • FIFO 队列不支持 Lambda 函数触发器。
  • 您只能将一个队列与一个或多个 Lambda 函数关联。

对于日志,检查您的 lambda 是否具有以下用于生成日志的 cloudwatch 权限

  • 日志:创建日志组
  • 日志:创建日志流
  • 日志:PutLogEvents

1
投票

我也遇到过这种情况。 最终,“禁用”SQS/Lambda 触发器似乎是由多个根本原因导致的症状。

就我而言,这不是权限问题。根本原因是“事件源映射”存在问题,该映射将 SQS 队列的“EventSourceArn”映射到 Lambda 函数的“FunctionArn”。我已删除并重新创建了同名的 SQS 队列。这样做的结果是,当删除第一个 SQS 队列时,AWS 自动禁用触发器,但在创建新队列时映射仍保持“禁用”状态。

此处的解决方法只是手动删除事件源映射。完成此操作后,“禁用”触发器将不再存在。这里有一个相关问题的很好的答案/解释 - https://stackoverflow.com/a/62392964/8577382


0
投票

如果您的权限按照此处其他解决方案的说明已到位,但仍然不起作用,这就是我们发现的情况

我们的 SQS 消息通过 Lambda 无法访问的 KMS 密钥进行加密,AWS 将其标记为开箱即用禁用。


0
投票

根据 @Oisín 的回答,对我来说,这是在我删除并重新创建了一个附加了 lambda 函数的队列之后发生的。重新创建时,队列已经附加了处于禁用状态的 lambda。

如果您进入 lambda 的配置页面和触发器部分,您可以删除触发器。然后返回 SQS 队列,lambda 引用应该已经消失。然后您可以重新附加它

© www.soinside.com 2019 - 2024. All rights reserved.