2017-10-13 156 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....."); 
     } 
    }); 

};