从AWS Lambda发布消息到AWS IoT
问题描述:
我正在尝试使用Nodejs向AWS IoT发布AWS Lamba的消息。 我已经拉上了项目,并上传到AWS物联网下面 是代码片段从AWS Lambda发布消息到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-设备SDK’ “,
我知道iot sdk丢失,我不知道如何在AWS Lambda上安装它。
任何建议将是真正有用的
答
当你压缩你的项目,你也压缩./node_modules
文件夹。所以只要aws-iot-device-sdk
在那里(以及所有的依赖关系),你的Lambda将会很好。
因此,所有你需要的是:
npm install aws-iot-device-sdk
zip ...
答
你需要确保你上传package.json
文件为好,这应该有aws-iot-device-sdk
您可以添加依赖要求包到您的package.json通过从项目DIRECTO运行
npm -i --save aws-iot-device-sdk
RY。
答
在package.json文件中添加如下所示的内容。然后运行npm install
。这将创建一个node_modules文件夹。现在将其压缩并再次上传。
"aws-iot-device-sdk": "^2.1.0"
答
我强烈建议不要使用aws-iot-device-sdk从Lambda函数与AWS Iot进行交互。
您需要了解有2的JavaScript API,你可以用它来访问AWS物联网
- 的AWS IOT Device SDKs for javascript,使用MQTT作为认证的协议和X509证书。这些通常用于在您的AWS云之外运行的设备。
- AWS SDK for javascript,使用HTTP作为协议,以及用于身份验证的IAM角色(等等)。这些SDK通常您的AWS云中运行(比如一个lambda)
有多种原因,你应该选择基于HTTP的SDK:
- 的AWS-IOT-设备的SDK特别针对需要远程连接的Aws(现场物联网网关/设备)之外的“生活”设备。
- 设备SDK使用MQTT和x509证书与AWS IoT进行交互。没有必要在你的lambda中配置x509证券。在您的AWS账户上运行的Lambda可以通过IAM角色轻松访问AWS IoT,因此如果您的lambda功能配置了正确的角色,则可以使用标准aws sdks。
- 像MQTT(或任何pub/sub协议)的协议与无服务器的lambda体系结构不匹配。在你的lambda函数中,你正在订阅一个主题,你通常不会在一个短暂的lambda函数中做的事情。
- 的AWS SDK为是的NodeJS提供给您的拉姆达出的box.There没有必要要求或包额外的节点模块)
,有没有凭据您的代码可以变得这样(通知一样简单或需要额外的节点模块):
var AWS = require('aws-sdk');
var iotdata = new AWS.IotData({endpoint:"yourendpoint.iot.eu-central-1.amazonaws.com"});
exports.handler = function(event, context) {
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.....");
}
});
};
比你非常多的反应,我跑了安装命令和我跑的zip -r test_package.zip但没有./node_modules文件夹或文件在压缩 – heisenberg
我做了更改,并在zip文件中添加package.json,但仍然收到了同样的错误,当我上传拉姆达 – heisenberg
它按照您的指示工作。我的错 :) – heisenberg