2017-10-13 130 views
0

我正在尝试使用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上安装它。

任何建议将是真正有用的

回答

2

当你压缩你的项目,你也压缩./node_modules文件夹。所以只要aws-iot-device-sdk在那里(以及所有的依赖关系),你的Lambda将会很好。

因此,所有你需要的是:

npm install aws-iot-device-sdk 
zip ... 
+0

比你非常多的反应,我跑了安装命令和我跑的zip -r test_package.zip但没有./node_modules文件夹或文件在压缩 – heisenberg

+0

我做了更改,并在zip文件中添加package.json,但仍然收到了同样的错误,当我上传拉姆达 – heisenberg

+0

它按照您的指示工作。我的错 :) – heisenberg

2

你需要确保你上传package.json文件为好,这应该有aws-iot-device-sdk

您可以添加依赖要求包到您的package.json通过从项目DIRECTO运行

npm -i --save aws-iot-device-sdk

RY。

0

在package.json文件中添加如下所示的内容。然后运行npm install。这将创建一个node_modules文件夹。现在将其压缩并再次上传。

"aws-iot-device-sdk": "^2.1.0" 
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....."); 
     } 
    }); 

};