node.js - 尝试订阅 AWS-IOT 自定义主题时出现 NULL 和错误 403
问题描述
我有一个节点应用程序,我正在使用aws-iot-sdk建立与 IOT 核心的连接。我正在制作一个动态主题,并且有一个相同的规则,将消息传输到 lambda 并且 lambda 进行一些后端处理。我现在正尝试订阅我通过规则引擎操作重新发布的节点应用程序中的主题。我是 AWS IOT SDK 的新手,由于我得到的“null”而陷入困境,请指导我。
我尝试访问aws-iot-sdk的文档,按照他们编写的步骤进行操作,但我无法完成相同的操作。如果我只是在节点应用程序中发布而不订阅,我会通过 SNS 获得响应,但无法返回应用程序。
我的节点代码:
ar awsIot = require('aws-iot-device-sdk');
var name = 'My Thing name';
const TAG = '[' + name + '] >>>>>>>>> ';
const INIT_DELAY = 15;
var app = awsIot.device({
keyPath: 'My private key',
certPath: 'My Cert path',
caPath: 'My Root cert Path',
clientId: name,
region: 'the region',
host: "<host addr>",
});
app.on('connect', () => {
try{
app.subscribe('/postacttest/response', (event) => {
console.log(event);
});
} catch(err) {
console.log(err);
}
app.publish('/getacttest/client1', JSON.stringify(
{
state: {
desired: {
message: "GET_TEST_RESULT",
clientId: "AWSNODECLIENT"
}
}
}
));
})
以下是我得到的回复:
无效的
以下是我在 AWS 上编写的规则:
SELECT state.desired.clientId AS clientId
FROM "/getacttest/#"
WHERE state.desired.message="GET_TEST_RESULT"
请指导我如何订阅主题并显示结果,就像我们可以使用mqtt.js一样,就像 WebSocket。
如果我如下配置我的连接对象,则会收到如下相同 pic'c 终端区域所示的错误:
我已经为我的 ACT 服务编写了所有允许和操作政策。
解决方案
我将设备配置对象更改为具有有效的区域值。它开始工作正常。