You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置SNS触发Lambda的DLQ并实现失败邮件通知

解决Lambda执行失败后触发邮件通知的问题

核心误解澄清

你当前配置的SNS订阅死信队列(DLQ),仅针对SNS无法将消息交付给Lambda的场景(比如Lambda不存在、权限不足导致消息无法送达Lambda)。而你的情况是消息已成功送达Lambda,但Lambda执行报错,此时SNS会判定交付成功,不会将消息转入DLQ。这是功能逻辑的核心区别。

正确实现方案

方案一:利用Lambda目的地(Destinations)转发失败事件到SQS

此方案可直接将Lambda执行失败的事件发送到指定SQS队列,再通过SQS告警触发邮件通知:

  1. 进入Lambda控制台,打开目标函数,切换到「配置」标签页,选择「目的地」
  2. 点击「添加目的地」,在「触发条件」中选择「失败的执行」,「目标类型」选择「SQS队列」,选中你的DLQ队列
  3. 为Lambda执行角色添加权限:在IAM控制台找到该角色,添加一条允许sqs:SendMessage动作、资源为你的DLQ ARN的策略,示例策略如下:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sqs:SendMessage",
      "Resource": "arn:aws:sqs:us-east-1:123456789012:myproj-sns-topic-dlq"
    }
  ]
}

方案二:通过CloudWatch告警触发邮件通知

直接监控Lambda的错误指标,当出现执行失败时触发SNS发送邮件:

  1. 进入CloudWatch控制台,点击「告警」-「创建告警」
  2. 在「选择指标」中,找到Lambda服务下的目标函数,选择Errors指标(按时间统计的错误次数)
  3. 设置告警阈值(比如当1分钟内错误次数≥1时触发)
  4. 在「通知」环节,选择一个已配置好邮件订阅的SNS主题(若没有则先创建主题并订阅你的邮箱)

补充:SQS权限验证

若后续需用到SNS向SQS发送消息的场景,正确的SQS访问策略应设置Principal为SNS服务,示例如下:

{
  "Effect": "Allow",
  "Principal": {
    "Service": "sns.amazonaws.com"
  },
  "Action": "sqs:SendMessage",
  "Resource": "arn:aws:sqs:us-east-1:123456789012:myproj-sns-topic-dlq",
  "Condition": {
    "ArnEquals": {
      "aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:myproj-snstopic"
    }
  }
}

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:01:02