我正在尝试使用Nodejs将AWS Lamba的消息发布到AWS IoT。 我已将项目压缩并上传到AWS IoT 下面是代码段
var awsIot = require('aws-iot-device-sdk');
var device = awsIot.device({
keyPath: 'keyfilepath',
certPath: 'pem file path',
caPath: 'root-CA.crt',
clientId: 'iotTest7526532135',
host: 'host id'
});
device
.on('connect', function() {
console.log('connect');
device.subscribe('topic_3');
device.publish('topic_1', JSON.stringify({ message_id:23,Message:'HelloWorld'}));
});
device
.on('message', function(topic, payload) {
console.log('message', topic, payload.toString());
});
我收到了以下错误 “errorMessage”:“无法找到模块'aws-iot-device-sdk'”,
我知道iot sdk丢失了,我不知道如何在AWS Lambda上安装它。
任何建议都会非常有用
答案 0 :(得分:6)
我强烈建议不要使用aws-iot-device-sdk与Lambda函数中的AWS Iot进行交互。
您需要了解可以使用2个javascript API来访问AWS IoT
您应该选择基于HTTP的SDK有多种原因:
您的代码可以变得如此简单(请注意,不需要凭据或额外的节点模块):
var AWS = require('aws-sdk');
var iotdata = new AWS.IotData({endpoint:"yourendpoint.iot.eu-central-1.amazonaws.com"});
exports.handler = function(event, context, callback) {
console.log("found iotdata",iotdata);
var params = {
topic: 'topic/test',
payload: 'blah',
qos: 0
};
iotdata.publish(params, function(err, data){
if(err){
console.log("Error occured : ",err);
}
else{
console.log("success.....");
}
});
callback();
};
答案 1 :(得分:2)
当您压缩项目时,还会压缩./node_modules
文件夹。因此,只要aws-iot-device-sdk
(以及所有依赖项),您的Lambda就可以了。
所以你需要的只是:
npm install aws-iot-device-sdk
zip ...
答案 2 :(得分:2)
您还需要确保上传package.json
文件,该文件应具有aws-iot-device-sdk
的依赖性要求
您可以通过运行
将软件包添加到package.json中 npm -i --save aws-iot-device-sdk
来自项目目录。
答案 3 :(得分:0)
在package.json文件中添加如下内容。然后运行npm install
。这将创建一个node_modules文件夹。现在压缩它并再次上传。
"aws-iot-device-sdk": "^2.1.0"
答案 4 :(得分:0)
如果您要将数据发布到IoT主题,则最好使用http协议而不是MQTT连接。
使用HTTP连接不需要aws-iot-device-sdk包。 AWS默认SDK具有iotdata。 iotdata将提供与设备的http连接。
iotHTTPConnection = AWS.IotData({endpoint:Your_END_POINT});
iotHTTPConnection.publish(params)将使用http发布数据而不使用特定的sdk。
https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_Publish.html
虽然没有http订阅。