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

LocalStack中SES关联SNS事件目标发送邮件无通知问题排查

在LocalStack中调试SES事件未推送到SQS队列的问题

1. 先确认配置集与事件目标的正确性

首先用LocalStack CLI检查配置集的事件目标配置是否符合预期:

aws ses describe-configuration-set --configuration-set-name ses_config_set --region us-east-1 --endpoint-url=http://localhost:4566

重点查看输出中Targets字段:

  • 确认TopicArn与你创建的sns_events_topic ARN完全一致
  • 确认EventTypes包含你需要的类型(send、bounce、click、complaint等),不要遗漏目标事件

2. 补全SES到SNS的发布权限

虽然你测试过SNS到SQS的消息正常,但SES需要单独的权限才能向SNS主题推送事件。执行以下命令给SNS主题添加权限:

aws sns add-permission \
  --topic-arn arn:aws:sns:us-east-1:000000000000:ses_events_topic \
  --label AllowSESToPublish \
  --aws-account-id 000000000000 \
  --action-name sns:Publish \
  --principal ses.amazonaws.com \
  --endpoint-url=http://localhost:4566

注:将ARN中的账号ID(000000000000)替换为你LocalStack中使用的账号ID,默认是000000000000

同时再确认SQS的权限策略是否允许SNS推送消息(避免之前的配置遗漏细节),可以更新SQS的权限策略:

aws sqs set-queue-attributes \
  --queue-url http://localhost:4566/000000000000/ses_events_queue \
  --attributes '{"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"AllowSNSToSQS\",\"Statement\":[{\"Sid\":\"1\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"sqs:SendMessage\",\"Resource\":\"arn:aws:sqs:us-east-1:000000000000:ses_events_queue\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:sns:us-east-1:000000000000:ses_events_topic\"}}]}"}' \
  --endpoint-url=http://localhost:4566

3. 调试SES事件推送环节

查看LocalStack日志定位问题

启动LocalStack时开启DEBUG模式,或者直接查看实时日志:

localstack logs -f

在日志中搜索关键词ses、publish、configuration-set,查看是否有SES尝试推送事件时的报错(比如权限被拒、ARN不匹配等)。

分环节验证

  • 验证SNS到SQS链路:手动向SNS主题发送测试消息,确认SQS能接收:

    aws sns publish \
      --topic-arn arn:aws:sns:us-east-1:000000000000:ses_events_topic \
      --message '{"eventType": "Bounce", "mail": {"source": "sender@test.com"}}' \
      --endpoint-url=http://localhost:4566
    

    如果SQS能收到这条消息,说明SNS到SQS链路正常,问题出在SES到SNS的推送环节。

  • 确认发送邮件时指定了配置集:检查发送邮件的命令/代码是否正确携带了配置集参数,比如CLI命令需要加上--configuration-set-name:

    aws ses send-email \
      --from sender@test.com \
      --destination '{"ToAddresses": ["recipient@test.com"]}' \
      --message '{"Subject": {"Data": "Test Email"}, "Body": {"Text": {"Data": "Test content"}}}' \
      --configuration-set-name ses_config_set \
      --endpoint-url=http://localhost:4566
    

4. LocalStack特有注意事项

  • 确保所有资源(SES、SNS、SQS)使用同一区域(默认us-east-1),LocalStack对跨区域资源的支持有限
  • 升级LocalStack到最新版本,旧版本可能存在SES事件推送的bug:
    pip install --upgrade localstack
    
  • 确认发件邮箱sender@test.com已完成验证:
    aws ses list-verified-email-addresses --endpoint-url=http://localhost:4566
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:10:28