什么是 AWS SNS

Amazon SNS(Simple Notification Service)是 AWS 提供的一种 完全托管的发布/订阅(Pub/Sub)消息服务。 它用于在系统之间传递消息,可以实现 异步通信、事件分发、通知推送 等功能。

简单来说:

SNS = 消息广播系统,发布者发消息 → SNS Topic → 多个订阅者同时接收。


核心概念

概念 说明
Topic(主题) 消息通道,发布者将消息发到某个 Topic
Publisher(发布者) 负责发布消息的应用或服务
Subscriber(订阅者) 接收消息的终端,可以是 HTTP(S) 端点、Email、SQS 队列、Lambda 等
Subscription(订阅) 订阅关系。订阅后 SNS 会推送消息到订阅者
Message(消息) 发布者发送的内容(文本、JSON 等)

常见的使用场景

  1. 系统事件通知

    • 当有新用户注册、订单生成、任务完成等事件时,发送通知到多个服务或用户。
  2. 分布式系统通信

    • SNS 与 SQS(Simple Queue Service)结合:SNS 负责广播消息,SQS 负责解耦与持久化。
  3. 报警与监控

    • 与 CloudWatch 结合,在系统异常时自动推送告警到邮箱、短信或 Webhook。
  4. 邮件与短信推送

    • SNS 支持 Email、SMS 推送,适合发送简短的通知类消息。
  5. 事件触发工作流

    • SNS 触发 AWS Lambda,进行后续逻辑处理(如图像分析、日志写入等)。

支持的订阅协议

协议 示例
HTTP/HTTPS 发送到 Webhook(常见于事件回调)
Email / Email-JSON 发送邮件通知
SQS 推送到队列,供后台异步处理
Lambda 自动调用 AWS Lambda 函数
SMS 短信通知
Platform Application Endpoint 用于移动推送(iOS / Android)

SNS 与其他 AWS 服务关系

服务 关系
SQS SNS 发布 → SQS 订阅,实现一对多异步解耦
SES SES 是邮件发送服务;SNS 是消息广播服务,SES 可以把发送结果事件(如退信、投递)发送到 SNS
EventBridge SNS 偏向简单消息推送,EventBridge 偏向复杂事件总线(过滤与路由更强)

示例流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 1. 创建主题
aws sns create-topic --name myTopic

# 2. 订阅一个邮箱
aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:123456789012:myTopic \
  --protocol email \
  --notification-endpoint your@email.com

# 3. 发布消息
aws sns publish \
  --topic-arn arn:aws:sns:us-east-1:123456789012:myTopic \
  --message "Hello SNS!"

优缺点

优点

  • 无需服务器维护,完全托管
  • 支持多种协议和高并发
  • 与其他 AWS 服务深度集成
  • 消息可靠传递与重试机制

缺点

  • 消息仅短暂保存(不像 SQS 有持久化队列)
  • 不支持复杂过滤逻辑(EventBridge 更强)
  • 消息顺序与去重需自行控制