Abd*_*naf 6 amazon-web-services node.js mqtt aws-lambda aws-iot
我需要使用aws iot从aws lambda通过mqtt协议发布数据.我用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');
});
}
Run Code Online (Sandbox Code Playgroud)
我在订阅者身上收到了mqtt消息.但是lambda产生这样的错误信息
Task timed out after 10.00 seconds
Run Code Online (Sandbox Code Playgroud)
我使用了context.succeed()而不是回调,lambda正确退出.我无法收到订阅者的任何消息.
在这两种情况下,控制台打印成功发布消息.
与我的发布代码有关的问题是什么?
我了解我的 lambda 函数在连接到 AWS IoT 时超时。关于我们正在使用的 SDK,aws-iot-device-sdk 设计用于在嵌入式设备内部使用。当我们使用 Lambda 函数或尝试在计算机中发布时,最佳实践是使用 aws-sdk。使用 aws-sdk,我们不需要使用证书在 AWS IoT 中发布,我们只需使用 AWS 凭证即可执行此操作。此外,使用 aws-sdk,我们可以在 IoT 中执行管理任务,我们可以创建事物、创建证书等。
就我的代码而言,函数未结束并超时的原因是因为回调必须等待异步调用完成执行,我认为这是通过从函数到 IoT 维护的连接来帮助实现的。context.succeed() 正确退出但我们没有收到任何消息的原因一定是因为 context.succeed 不等待我们的异步调用完成执行。
| 归档时间: |
|
| 查看次数: |
2866 次 |
| 最近记录: |