使用SSL连接到Amazon MQTT Broker

时间:2017-12-07 11:41:57

标签: amazon-web-services aws-lambda mqtt alexa alexa-skills-kit

我正在尝试从不支持SigV4或客户端证书的客户端发布/订阅AWS IoT MQTT代理,它只是具有用户名和密码的SSL。据我所知,这是不可能的,那么整合这个客户的最佳方式是什么?

目前客户端正在发布一个运行良好的CloudMQTT代理,但我想将Amazon Echo / Alexa集成到解决方案中以允许语音控制,所以我需要一些方法将它连接到AWS IoT MQTT经纪人,我在那里让Alexa发布数据(使用Lambda和IoT Device Shadows)。

什么是最好的方法,因为据我所知,我无法使用SSL将客户端连接到AWS MQTT,它坚持使用证书。我应该尝试将cloudMQTT桥接到AWS MQTT吗?或者有什么方法可以让Echo发布到与Amazons不同的MQTT经纪人?

1 个答案:

答案 0 :(得分:0)

所述,弥合经纪人是一种可能的解决方案

https://aws.amazon.com/blogs/iot/how-to-bridge-mosquitto-mqtt-broker-to-aws-iot/

但事实证明这是一个非常复杂的过程。我使用本地mosquitto安装桥接,但未能连接未知错误'。在网上进行了一些搜索后,看起来这个问题刚刚出现在最新版本的mosquitto中。相反,我尝试与在AWS Linux EC2实例上运行的mosquitto代理进行桥接,并且我成功地使用了它。

我提出的更好的解决方案是修改我的Lambda函数以直接发布到我已经使用的MQTT代理。为此,您需要包含node.js模块' mqtt.js' (或类似的库),它不在aws-sdk中,所以需要一些阅读来弄清楚如何去做。我刚刚使用AWS Lambda Web界面内联编辑器编写代码到目前为止,遗憾的是它不允许您包含外部库。相反,您需要创建自己的部署包。

以下两个有用的链接可帮助您开始制作自己的部署包,但它们缺少我在下面提到的几个关键信息:

https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

您需要在硬盘驱动器上的文件中编写代码,然后从命令行使用npm-install将所需的依赖项放入您的代码所在的文件夹中。然后您需要压缩整批文件以便没有包含它的顶级文件夹。也就是说你的代码需要在zip的根目录中,而不是在zip的根目录中的文件夹中(如果你右键单击包含文件夹的代码并发送到zip,那就是你得到的)。

还没有提到的是,如果您要在在线编辑器中工作,则需要在JavaScript顶部包含几行,以便路径正确解析。您需要添加以下内容:

var child_process = require('child_process');
var path = require('path');

然后,您可以在lambda函数Web编辑器中上传此代码并正常构建您的函数。遗憾的是,您无法再使用内联网络编辑器,因此您需要重新压缩并再次上传才能进行更改。