我需要使用aws iot通过mqtt协议从aws lambda发布数据。我用node.js代码创建了一个lambda函数。像这样
exports.handler = (event, context, callback) => {
var awsIot = require('aws-iot-device-sdk');
var device = awsIot.device({
keyPath: 'samplepath/test.pem.key',
certPath: 'samplepath/test.crt',
caPath: 'samplepath',
clientId: 'sampleId',
region: 'us-east-1'
});
device
.on('connect', function () {
console.log('connected');
device.publish('test_topic', JSON.stringify({ "test_name": "hello", "test_value": 1001 }));
console.log('published successfully');
callback(null, 'item added');
});
}
我在订阅者身上收到了mqtt消息。但是lambda产生这样的错误信息
Task timed out after 10.00 seconds
我使用了context.succeed()而不是回调,lambda正确退出。我无法收到订阅者的任何消息。
在这两种情况下,控制台都会正确打印成功发布消息。
与我的发布代码有关的问题是什么?
答案 0 :(得分:3)
我理解我的lambda函数在连接到AWS时会超时 物联网。关于我们正在使用的sdk,aws-iot-device-sdk旨在实现 在嵌入式设备中使用。当我们使用Lambda函数时 或尝试在计算机上发布,最佳做法是使用 AWS-SDK。使用aws-sdk我们不需要使用证书 在AWS IoT中发布,我们只使用AWS凭据来执行此操作。 另外,使用aws-sdk,我们可以在物联网中执行管理任务 创建一个东西,创建证书等。
来到我的代码,函数没有结束和超时的原因 是因为回调必须等待异步调用 完成执行,我假设正在通过连接提供帮助 从功能维护到物联网。原因 context.succeed()退出正常但我们没有得到任何消息必须 因为context.succeed不会等待我们的异步调用完成 执行。
答案 1 :(得分:2)