首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用触发的Lambda函数向另一个IoT主题发送MQTT消息?

使用触发的Lambda函数向另一个IoT主题发送MQTT消息?
EN

Stack Overflow用户
提问于 2018-05-01 06:48:05
回答 3查看 977关注 0票数 0

我已经创建了一个AWS IoT规则。当客户端向terminal1/主题发送消息时,它将触发Lambda函数(客户端使用AWS IoT生成的证书文件向terminal1/发送消息。)我需要一个Lambda函数来,使用客户机消息生成一条新消息,然后发送到另一个主题(terminal2/test)。

我尝试过触发“将消息重新发布到AWS IoT主题”。但是,它将数据发送到特定的主题。它只转发相同的消息(我需要发送不同的消息)。

我创建了一个Lambda函数来向另一个主题发送消息。但我无法验证端点。

下面是我创建的Lambda函数(根据),

代码语言:javascript
运行
复制
'use strict';

 // Load the AWS SDK
 var AWS = require("aws-sdk");

exports.handler = (event, context, callback) => {

     var iotdata = new AWS.IotData({
     endpoint: 'akugdx70brb.iot.us-west-2.amazonaws.com:8883',
     apiVersion: '2015-05-28'
   });

         var params = {
      topic: 'terminal2/test/',
      payload: new Buffer('...') || 'STRING_VALUE',
      qos:1
    };
    iotdata.publish(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });

};

它会产生这个错误,

代码语言:javascript
运行
复制
2018-05-01T06:22:02.394Z f5a570ef-4d07-11e8-b8a2-6bad8f2982f7 { Error: write EPROTO 139935652661056:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 42
139935652661056:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:

at exports._errnoException (util.js:1018:11)
at WriteWrap.afterWrite (net.js:800:14)
message: 'write EPROTO 139935652661056:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 42\n139935652661056:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:\n',
code: 'NetworkingError',
errno: 'EPROTO',
syscall: 'write',
region: 'us-west-2',
hostname: 'akugdx70brb.iot.us-west-2.amazonaws.com',
retryable: true,
time: 2018-05-01T06:22:02.394Z } 'Error: write EPROTO 139935652661056:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 42\n139935652661056:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:\n\n at exports._errnoException (util.js:1018:11)\n at WriteWrap.afterWrite (net.js:800:14)'

我猜这意味着我无法对主机进行身份验证,在创建Lambda函数时我没有使用任何证书。如何使用AWS Lambda向同一主机发送MQTT消息,但发送到不同的主题?(上面的Lambda函数在客户端发送消息时触发,是否必须重新验证服务器的身份以将消息发送到不同的主题?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-01 11:53:09

试着使用

代码语言:javascript
运行
复制
AWS.config.update({
    accessKeyId: <accessKeyId>,
    secretAccessKey: <secretAccessKey>,
    region: <region>
  });
票数 0
EN

Stack Overflow用户

发布于 2018-05-04 17:31:06

根据您想要生成的内容,您可以使用主题规则本身转换输入消息,并跳过lambda调用的费用。有关示例,请参见https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html

票数 0
EN

Stack Overflow用户

发布于 2018-05-10 04:03:07

您的lambda应该使用一个可以访问IoT策略的角色。您的lambda执行角色没有足够的权限来编写或连接并发布到IoT。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50112416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档