将消息从AWS Lambda发布到AWS IoT

hei*_*erg 1 amazon-web-services node.js mqtt aws-lambda aws-iot

我正在尝试使用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());
 });
Run Code Online (Sandbox Code Playgroud)

我收到以下错误
“ errorMessage”:“找不到模块'aws-iot-device-sdk'”,

我知道缺少物联网sdk,我不确定如何在AWS Lambda上安装它。

任何建议都会非常有帮助

dde*_*ele 6

我强烈建议不要使用aws-iot-device-sdk从Lambda函数与AWS Iot进行交互。

您需要了解可以使用2个JavaScript API来访问AWS IoT

选择基于HTTP的SDK有多种原因:

  • aws-iot-device-sdk专门针对需要远程连接的Aws外部“存在”的设备(现场IoT网关/设备)。
  • 设备SDK使用MQTT和x509证书与AWS IoT进行交互。无需在lambda中配置x509证券。在您的AWS账户上运行的Lambda可以通过IAM角色轻松访问AWS IoT,因此,如果为lambda函数配置了正确的角色,则可以使用标准的AWS开发工具包。
  • 像MQTT这样的协议(或任何pub / sub协议)与无服务器lambda架构不太匹配。在lambda函数中,您正在订阅一个主题,而在lambda函数短暂的情况下,您通常不会这样做。
  • 现成的lambda提供了适用于NodeJS的AWS开发工具包。不需要或打包其他节点模块)

您的代码可以变得如此简单(请注意,不需要凭据或额外的节点模块):

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();
};
Run Code Online (Sandbox Code Playgroud)