当前位置: 首页 > 知识库问答 >
问题:

具有SNS权限的Lambda死信队列

张照
2023-03-14

我正在尝试使用Lambda的一纸空文队列。我已将其配置为将消息发送到SNS队列。我放入了一个不正确的处理程序,以使Lambda调用错误消失。错误消息永远不会到达SNS队列。我相信这是一个权限问题。下面是SNS队列的“我的访问策略”设置

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:eu-west-1:1234567:lambda-dlq",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "1234567"
        }
      }
    }
  ]
}

lambda函数附加了一个角色,该角色具有SNS:publishactionallow以及resource*

我错过什么了吗?有没有其他原因消息可能不会到达DLQ?

共有1个答案

钮安歌
2023-03-14

我试着验证你的设想。我注意到在控制台中使用测试不会在DLQ中生成消息。

有效的方法是使用CLI(尚未使用CW事件进行测试):

aws lambda invoke --function-name ffff --invocation-type Event --profile my-profile /dev/stdout

其他设置还包括:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:us-east-1:xxxxxx:my-dlq-topic",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "xxxxxxx"
        }
      }
    }
  ]
}

异步lambda设置

 类似资料:
  • 我有一个lambda函数,我想为它创建一个SQS死信队列。我首先在Terraform中创建SQS: 这是来自Terraform的例子。但是,我被redrive_policy卡住了。 我是否正确理解,这为SQS队列设置了一个死信队列? 如果我设置了redrive_policy,这意味着我在一个DLQ上设置了一个DLQ。我觉得可以在DLQ上设置DLQ,在DLQ上设置DLQ,以此类推。 我找不到这方面的

  • 我有一个SNS主题&订阅(实际上不止1个)设置来使用SQS DLQ。然而,每一个都告诉我,我有一个策略错误。 我的SNS订阅设置了DLQ: 我的队列存在: 我还尝试在队列上使用一个真正通用的访问策略: 我遵循的是:https://docs.aws.amazon.com/sns/latest/dg/sns-configure-dead-letter-queue.html(步骤5解释了设置策略) 其他

  • 在SNS话题上设置死信队列和在Lambda功能上设置死信队列有什么区别? 我在想,因为如果您在SNS订阅上设置DLQ,那么当Lambda(订阅者)失败时,订阅消息将故障转移到DLQ,对吗?那么在这种情况下,在这两个地方设置DLQ会有相同的效果吗? 我在SNS主题订阅上设置了一个DLQ,它并没有“自动”地显示为Lambda屏幕设置上的DLQ,所以我想可能会有一些不同? SNS死信队列ref:http

  • 我有一个现有的AWS Lambda(通过CloudFormation创建),现在我想修改它,使它有一个死信队列。本质上,这允许我重新配置Lambda,这样,如果它在执行期间无法处理/使用SQS消息,AWS将自动将消息发布到我选择的“死信队列”(DLQ)。 我一辈子都想不出该怎么加上: 我的Lambdas CF配置,如上面链接的文章所示。我能做的最接近的事情是: 在Lambdas主页上选择“管理此堆

  • 死信队列(Dead Letter Queue)本质上同普通的Queue没有区别,只是它的产生是为了隔离和分析其他Queue(源Queue)未成功处理的消息。 创建死信队列的方法参见createQueue() API,与创建普通队列无异, 死信队列不可调用deadMessage(), deadMessageBatch API,其他操作都与对普通Queue的操作无异。 为了将源Queue的未能成功处理