在lambda函数中与/如何连接到MQTT代理有关Alexa技能的问题

问题描述 投票:0回答:1

我要克服的当前问题是,我的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中获得了关于我的方法的最终澄清,所以我不确定我还没有考虑/遗漏什么。logs from lambda function

aws-lambda mqtt alexa alexa-skills-kit
1个回答
0
投票

这里的主要问题是您的经纪人正在连接到本地家庭网络的Pi上运行。

这意味着它位于执行网络地址转换(NAT)的家庭宽带路由器的后面。这会从您的家庭网络(10.0.0.0/24)接收数据包,并将它们重新映射为来自您的面向公众的IP地址。

这意味着Lambda代码(在AWS上运行)无法直接将数据包发送到代理,因此无法进行连接。

有几种可能的解决方案,但是这里有几个。

  1. 在云托管提供商上运行经纪人。然后,您可以从任何地方访问此信息。
  2. 启用路由器上的端口转发,以将端口1883暴露给Internet,并将所有数据包转发给在树莓派上运行的代理。 (此选项取决于您使用的是固定IP地址还是动态DNS)

对于这两种情况,您可能都希望在代理上启用身份验证/授权,还可能要添加TLS。

您还需要仔细查看MQTT.js库以及如何启用错误跟踪,以便了解为什么事情会失败,例如。

client.on('error', function(err) {...});
© www.soinside.com 2019 - 2024. All rights reserved.