amazon-web-services - 使用触发的 Lambda 函数将 MQTT 消息发送到另一个 IoT 主题?
问题描述
我创建了一个 AWS IoT 规则。当客户端向terminal1/
主题发送消息时触发 Lambda 函数(客户端正在向terminal1/
使用从 AWS IoT 生成的证书文件发送消息。)。我需要一个 Lambda 函数来使用客户端消息生成新消息并发送到另一个主题 ( terminal2/test
)。
我尝试触发“将消息重新发布到 AWS IoT 主题”。但是,它将数据发送到特定主题。它只是转发相同的消息(我需要发送不同的消息)。
我创建了一个 Lambda 函数来向另一个主题发送消息。但我无法验证端点。
这是我创建的 Lambda 函数(根据this),
'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
});
};
它会产生这个错误,
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 函数在客户端发送消息时触发,我是否必须重新验证服务器才能将消息发送到不同的主题?)
解决方案
尝试使用
AWS.config.update({
accessKeyId: <accessKeyId>,
secretAccessKey: <secretAccessKey>,
region: <region>
});
推荐阅读
- r - 拟合模型中没有因素此外:警告消息:1:在复制中(粘贴(“〜”,xx),数据= mf):非因素被忽略:如何解决?
- kubernetes - kustomize 环境源文件中的多行值
- qt - 如何在不丢失 qml 中的复选标记的情况下自定义复选框颜色?
- python - ImageMagick to Wand:稀疏颜色重心问题
- reactjs - 在 redux-saga 中映射列表时使用延迟
- python - 什么是 django 日期时间字段格式
- java - 如何使用 Android Studio 在 Java 中计算总和
- python - Python:计算数组中的变化
- c# - 如何检测调用当前函数的调用的名称?
- python - 使用颜色校正矩阵最小化颜色检查器参考值和捕获值之间的误差