【一文搞懂 AWS-SNS 服务】

本文介绍了AmazonSimpleNotificationService(SNS)的基本概念、工作模式(A2A和A2P)、扇出模型以及在A2A-HTTP(S)和A2P-邮件场景中的应用示例。同时提到了SNS的局限性和与其他服务的比较,以及如何使用CloudTrail进行监控和安全设置。
摘要由CSDN通过智能技术生成

介绍

  • SNS是什么?

SNS:Simple Notification Service,是Amazon自2010年以来推出的一款消息通知服务

以下介绍摘自官网:
Amazon Simple Notification Service (Amazon SNS) 是一项托管服务,提供从发布者向订阅者(也称为*创建者*和*使用者*)的消息传输。发布者通过将消息发送至*主题*与订阅者进行异步交流,主题是一个逻辑访问点和通信渠道。客户端可以使用支持的终端节点类型订阅 SNS 主题并接收已发布的消息,例如 Amazon Data Firehose、Amazon SQS AWS Lambda、HTTP、电子邮件、移动推送通知和移动短信 (SMS)。
(refs: https://docs.aws.amazon.com/zh_cn/sns/latest/dg/welcome.html)

结构图

通过简介和结构图,我们可以看到,SNS有两种模式 ,A2A,A2P。

A2A :Application to Application。SNS在这里的定位为中间件服务,为后续应用服务(SQS,HTTP服务) 提供数据传递,扩散。

A2P :Application to Person , 这里Person指 个人手机 ,email,mobile push(手机消息推送弹框)。

  • SNS的模型: SNS服务是一个Fanout 扇出模型,根据上面的结构图也可以看出,如果有多个不同终端的订阅,当消息流入以后, 消息会复制以及扩散到不同终端,像一面展开的扇子。
    (refs: https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sns-common-scenarios.html)
    Fanout-扇形

应用场景

消息的多端送达, 这里我们用A2A-HTTP(S)服务 和 A2P-邮件举例。

使用示例1 - A2A-HTTP(S)

在这个场景下 ,我们需要 示例1.1创建topic,1.2 启动Http Server,1.3 Http server进行topic订阅,1.4 Http server接收订阅消息。下面我们来展示一个完整流程:

  • 示例1.1 创建topic

创建topic

  • 示例1.2 启动Http Server

需要我们自己发布一个Http Sever,用来订阅接收消息。

HTTP Server的实现:根据aws文档,Http Server需要:

1)校验sns发来消息的合法性,不是强制的,建议这么做,避免消息伪造;
消息包括3种,分别是订阅确认通知,通知消息,取消订阅通知;

2)解析消息;

3)对于不同消息进行处理;当订阅某个topic时,会收到一个确认请求,里面有个回调确认地址,需要回调这个地址确认下,才能收到后续的订阅消息;

注意📢:aws官方本身对这块儿没有给代码示例,自己写起来比较麻烦,我结合文档和github上一些代码写了示例,仅供大家参考:https://github.com/Wunan777/aws_sns_demo

启动并暴露服务:根据上述实现Http Server后,启动,并需要暴露到aws可以访问的地址上。
建议服务跑在带有公网IP的云服务器上。如果跑在自己本地机器上,没有公网ip, 可以用NAT Server做外网暴露 , 推荐工具:ngrok (https://ngrok.com/)

  • 示例1.3 创建订阅

这里我们选择创建HTTP(S) endpoint 订阅,

创建订阅

填写订阅信息

填写信息确认订阅后,会给终端节点,也就是我们的Http Server发订阅确认请求,Http Server处理确认后,即可完成订阅。订阅成功如下,后续可以接收订阅信息。

订阅成功

  • 示例1.4 接收消息
    先产生并发送条消息,在aws console上,刚刚的topic页面里,点击 发布消息按钮 ,会进入下面这个页面,依次填写信息后,发送。

填写消息内容

此时我们在1.3中启动的服务会接收到消息,如下。
http server收到消息并打印

(refs: https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sns-http-https-endpoint-as-subscriber.html)

使用示例2 - A2P - 邮箱订阅

使用邮箱进行订阅流程类似,我们可以继续使用刚刚的topic,然后示例2.1 创建邮箱订阅,示例2.2 接收订阅

  • 示例2.1 创建邮箱订阅

填写邮箱信息

这里创建完,邮箱会收到一个确认邮件,里面有个确认链接,点开链接后,即确认,完成订阅。

点击链接,进行订阅确认

  • 接收推送

发送消息还是可以使用之前的 aws console里面的发送消息功能,发送完后,接收消息如下。

邮箱里收到推送的消息


结语

至此,我们完成了A2A下 Http Server的订阅 以及 A2P下 邮箱的订阅
多说几句,对于SNS A2A给我的个人感觉是aws里面的中间件服务,不单独使用,A2P 虽然不是中间件服务,可以独立进行邮件或者消息通知,但是它提供的服务配套一般(缺乏配套的消息发送预览,送达率监控,指标统计等),如果我们要做大规模ToC的用户手机通知推送 mobile push,其实有很多专门做这类的服务(国内比如友盟,国外比如one signal,即使同在aws上也有个更成熟的 aws - pinpoint服务 ),所以A2P 可能更适合做些公司内部业务的顺带推送,比如有个数据指标要推送多个下游处理平台(SNS-A2A),顺带推到相关团队邮件组(SNS-A2P),这样搭配着使用,会更自然,方便。

SNS这边就介绍这么多,最后希望各位能找到适合自己的场景,敏捷开发,项目顺利!


注意事项

1,数据传输:SNS传输有大小限制,数据量限制 256 KB,超过需要引入S3 refs: https://docs.aws.amazon.com/zh_cn/sns/latest/dg/large-message-payloads.html

2,服务保障:SNS本身无qos服务质量保障,有消息失败重传机制,但不保证送达

重传机制:https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sns-message-delivery-retries.html

Q && A

Q:日志和监控,如何监控发布的信息内容

A:无法直接监控到, 如需查看发布的内容,需要用一个客户端订阅发布topic,从而接收发布内容。

CloudTrail

1,使用 CloudTrail 收集的信息,您可以确定向 Amazon SNS 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。

2,可以记录api调用,用户权限等相关信息,但是没有 message (HIDDEN_DUE_TO_SECURITY_REASONS),如果需要可以启动一个client进行topic监听。

https://docs.aws.amazon.com/zh_cn/sns/latest/dg/sns-logging-using-cloudtrail.html

Q:如何删除 SNS Pending Confirmation状态的订阅。

A: 无法删除,需要3天后自动过期移除。

https://repost.aws/zh-Hans/knowledge-center/sns-cannot-delete-topic-subscription

在我们的Http服务里,sns消息验证的模块需要安装M2Crypto,使用Python3安装有问题时,可以对照下面的博客看下。

https://blog.csdn.net/u010609757/article/details/102648984

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值