博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 AWS SNS 发送通知到 HTTP 终端
阅读量:5909 次
发布时间:2019-06-19

本文共 1641 字,大约阅读时间需要 5 分钟。

hot3.png

作者: Angus.Fenying <>

日期: 2016-08-27 05:46 PM

AWS 的 SNS 是一个消息推送服务,通过 SNS,可以将 AWS 的其他服务(如 S3)的事件消息转发给 其它终端(E-Mail,HTTP服务器等)。

一般情况下 SNS 的消息是一次性的,发完就消失了,当然也可以配置延迟发送的消息,这里只讲第一种。

下面直接开始说使用方式。

1. 创建 SNS 主题

主题是指一个消息集合,一个主题可储存多条消息,其他 AWS 服务可以将某些消息发到这个 SNS 主题下。

订阅是指:谁订阅了这个主题,主题就将其中的消息分发给这些订阅者,例如 HTTP 终端。

在使用之前必须先至少创建一个 SNS 主题,主题名称为 test,显示名随意。

2. 创建一个订阅(HTTP为例)

创建号了 SNS 主题后,下面有一个很大的按钮,叫你创建订阅,但是,先不要理他!

因为你一旦创建了一个订阅,AWS 马上就会发一个确认请求到那个地址——明显你应该还没准备好。

下面我们先说说怎么确认。

不过官方教程有点长,我这里直接说最简单的方法。

AWS SNS 做这个确认订阅操作,就像我们注册网站账户的时候要验证邮箱或者手机一样,确认这个 HTTP 终端是你在用,否则你随便添加一个 HTTP 地址,天天叫 AWS 发请求,岂不是麻烦大了。

这就是确认订阅的目的。

当然了,确认订阅也和我们注册账户很像,它发送一个 HTTP POST 请求到你的地址,比如我这是

它发送的 HTTP Body 是一个 JSON 结构,其中字段 SubscribeURL 里面是确认地址,用 HTTP GET 调用这个地址就可以完成订阅确认,这里用 PHP 代码处理:

SubscribeURL) ;curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);curl_exec($ch) ;curl_close($ch);

现在我们来创建一个 HTTP 类型的订阅,地址写你的处理地址,我这里是

创建完成,AWS 会发送一个确认请求到上面的地址。

3. 绑定 S3 Bucket 和 SNS

首先给我们的 SNS 主题 test 添加策略,修改为所有人都可以发消息。

然后进入 S3 控制台,选择一个 Bucket 查看属性,在 Events 栏里面添加一个事件,我选择的是 PUT,然后选择我们的 test SNS 主题,随便写个前缀(这里用 upload/)和名称,然后保存。

有没有绑定成功现在还无法确认,因为我们没有修改代码。下面写个简单的 DEMO:

设置完毕,下面开始测试吧,上传一个文件到刚才的储存桶下面,key 比如 upload/test.zip

然后去我们的服务器上查看下 s3.sns.log 文件,就可以得到具体的请求数据结构了。

4、安全检测

我们的 HTTP 终端需要检测是否调用信息来自 AWS SNS,一个最简单的方法是根据 SNS Topic ARN 判断, 请求的 SNS Topic ARN 通过 $_SERVER['HTTP_X_AMZ_SNS_TOPIC_ARN'] 可以获取到,即 HTTP 请求头里面的字段 x-amz-sns-topic-arn

SNS Topic 的 ARN 可以在 SNS 控制台看到,一个典型的 SNS Topic ARN 是一个 arn:aws:sns:us-east-1:123456789012:sample

当然,还有更安全的方法是,使用亚马逊提供的哈希校验算法,根据 POST 的 JSON 里面的字段实现, 这个比较复杂,就不说明了,请查看官方文档。

(完)

转载于:https://my.oschina.net/fenying/blog/747106

你可能感兴趣的文章
MarkdownPad2.5 注册码
查看>>
mybatis指定jdbctype
查看>>
pat解题报告【1082】
查看>>
Java IO详解(七)------随机访问文件流
查看>>
Ubuntu下errno值
查看>>
HDU 4786 Fibonacci Tree 最小生成树
查看>>
docker实践4
查看>>
selenium测试(Java)--多表单切换(十二)
查看>>
PHP自学,第一阶段,基础学习
查看>>
curl命令使用
查看>>
Ubuntu 12.04将默认集成Landscape管理套件【转】
查看>>
js数组实现不重复插入数据
查看>>
vim配置
查看>>
Oracle_spatial的空间操作符介绍
查看>>
剑指 offer set 24 扑克牌的顺子
查看>>
关于Vue.js面试题汇总
查看>>
微信小程序第三方开发需要注意的点
查看>>
大话爬虫的实践技巧
查看>>
react-native 学习心得
查看>>
[译]使用 Siesta 处理 Swift 网络请求
查看>>