什么是 AWS SNS
Amazon SNS(Amazon Simple Notification Service)是 AWS 提供的一种 完全托管的发布/订阅(Pub/Sub)消息服务。 它用于在系统之间传递消息,可以实现 异步通信、事件分发、通知推送 等功能。
当某个系统里发生了事件(如下单成功、文件上传完成、账单到期、告警触发),你把这条事件消息发布到 SNS,SNS 再把它推送给订阅者(其他服务、队列、HTTP 接口、短信/邮件等),实现系统之间的解耦和异步处理。
简单来说:
SNS = 消息广播系统,发布者发消息 → SNS Topic → 多个订阅者同时接收。
简单理解
把它想成一个“群发通知中心”。你希望“通知别人去干活”,但你又不想在当前代码里挨个调用一堆服务(不然很乱、也容易卡住主流程)。
应用场景
当系统里发生了一个事件,你想把“消息/通知”快速、可靠地广播给一个或多个下游(服务、队列、函数、Webhook、邮件/短信等),用来解耦和异步化。
- 微服务事件广播(典型 Pub/Sub)
- SNS → SQS:削峰填谷 + 异步处理(工程里最常见组合)
- 系统告警与通知(运维/可观测性)
- 任务完成/失败通知(异步任务编排)
- 文件处理流水线(上传后触发处理)
- 跨系统集成(Webhooks / 事件推送)
- 发送用户通知(邮件/短信/推送)
- 多环境/多团队解耦:让新订阅者“无侵入接入”
- 多区域/多账号事件分发(更偏云架构)
主要概念
Topic(主题)
Subscription(订阅)
流程
|
|
配置
设置 SNS 访问策略 (Access Policy)
- 在刚才创建的 SNS Topic 页面,点击 Access policy (访问策略) 标签页。
核心概念
| 概念 | 说明 |
|---|---|
| Topic(主题) | 消息通道,发布者将消息发到某个 Topic |
| Publisher(发布者) | 负责发布消息的应用或服务 |
| Subscriber(订阅者) | 接收消息的终端,可以是 HTTP(S) 端点、Email、SQS 队列、Lambda 等 |
| Subscription(订阅) | 订阅关系。订阅后 SNS 会推送消息到订阅者 |
| Message(消息) | 发布者发送的内容(文本、JSON 等) |
常见的使用场景
-
系统事件通知
- 当有新用户注册、订单生成、任务完成等事件时,发送通知到多个服务或用户。
-
分布式系统通信
- SNS 与 SQS(Simple Queue Service)结合:SNS 负责广播消息,SQS 负责解耦与持久化。
-
报警与监控
- 与 CloudWatch 结合,在系统异常时自动推送告警到邮箱、短信或 Webhook。
-
邮件与短信推送
- SNS 支持 Email、SMS 推送,适合发送简短的通知类消息。
-
事件触发工作流
- 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 偏向复杂事件总线(过滤与路由更强) |
示例流程
|
|
优缺点
优点
- 无需服务器维护,完全托管
- 支持多种协议和高并发
- 与其他 AWS 服务深度集成
- 消息可靠传递与重试机制
缺点
- 消息仅短暂保存(不像 SQS 有持久化队列)
- 不支持复杂过滤逻辑(EventBridge 更强)
- 消息顺序与去重需自行控制