我要克服的当前问题是,我的aws-lambda函数无法使用js MQTT库连接到我的破产。我可以在本地节点环境中使用此库进行连接,而不能在aws-lambda函数中使用。
我已经从此仓库创建了一个zip文件:https://github.com/JordanKlaers/AlexaMQTT
我已上传到我的lambda函数。我正在使用index.js导出的功能。
[一切正常,除了不连接到代理/客户端的部分(index.js中的第83行)当我从仓库中运行链接的oldIndex.js时(在aws-lambda函数中只是连接的promise函数),在我的本地节点环境中连接并一切正常运行。
我不知道如何创建最小的可复制草图,因为它的成功基于与硬件的交互。我确实创建了“ oldIndex.js”作为最小的草图,以显示至少连接功能有效。我已经包含了lambda函数的日志,以显示该函数在尝试连接之前可以正常工作。
我唯一可以推测的是我对用于lambda函数的角色的权限存在一些问题,但是我已经研究并向角色添加了不同的策略,但这没有帮助。
这里是调用该函数时的日志(这表明它到达了promise并尝试连接但未成功)
我本人几乎完成了所有工作,但是从tutorial中获得了关于我的方法的最终澄清,所以我不确定我还没有考虑/遗漏什么。
这里的主要问题是您的经纪人正在连接到本地家庭网络的Pi上运行。
这意味着它位于执行网络地址转换(NAT)的家庭宽带路由器的后面。这会从您的家庭网络(10.0.0.0/24)接收数据包,并将它们重新映射为来自您的面向公众的IP地址。
这意味着Lambda代码(在AWS上运行)无法直接将数据包发送到代理,因此无法进行连接。
有几种可能的解决方案,但是这里有几个。
对于这两种情况,您可能都希望在代理上启用身份验证/授权,还可能要添加TLS。
您还需要仔细查看MQTT.js库以及如何启用错误跟踪,以便了解为什么事情会失败,例如。
client.on('error', function(err) {...});