将字符串 Lambda 函数读取到 DynamoDB
Read String Lambda Function to DynamoDB
我正在尝试从连接到 AWS IOT CORE 的 IOT 传感器将数据导入 DynamoDB,通过 MQTT 发送数据。我希望所有值都在单独的列中,因此我为此使用了 Lambda 函数。开始了:
关于主题 EXAMPLE/shadow/update 我从传感器收到以下 UTF8 字符串:
{"SystemID":34,"SensorID":96,"ValueMax":87,"ValueMin":78}
然后我有一个 ACT/RULE 排序依据:SELECT * FROM 'EXAMPLE/shadow/update' 并使用以下代码触发 LAMBDA 函数:
console.log('Loading function');
var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient();
var table = "TEST_TABLE";
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
var params = {
TableName:table,
Item:{
"SystemID": event.SystemID,
"SensorID": event.SensorID,
"ValueMax": event.ValueMax,
"ValueMin": event.ValueMin,
"Timestamp": String(Date.now())
}
};
console.log("Adding...");
dynamo.put(params, function(err, data) {
if (err) {
console.error("Error JSON:", JSON.stringify(err, null, 2));
context.fail();
} else {
console.log("Added:", JSON.stringify(data, null, 2));
context.succeed();
}
});
}
问题:它不起作用!但是,如果我从传感器复制有效负载并通过 AWS 测试控制台发送到 MQTT,它会作为 JSON 发布,然后 Lambda 函数工作并将其正确放入 DynamoDB。
我做错了什么?
好的,我找到了解决方案。我将 SELECT 比之前的“*”缩小了一点,现在可以使用了!
SELECT SystemID,SensorID,ValueMin,ValueMax FROM 'EXAMPLE/shadow/update'
我正在尝试从连接到 AWS IOT CORE 的 IOT 传感器将数据导入 DynamoDB,通过 MQTT 发送数据。我希望所有值都在单独的列中,因此我为此使用了 Lambda 函数。开始了:
关于主题 EXAMPLE/shadow/update 我从传感器收到以下 UTF8 字符串:
{"SystemID":34,"SensorID":96,"ValueMax":87,"ValueMin":78}
然后我有一个 ACT/RULE 排序依据:SELECT * FROM 'EXAMPLE/shadow/update' 并使用以下代码触发 LAMBDA 函数:
console.log('Loading function');
var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB.DocumentClient();
var table = "TEST_TABLE";
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
var params = {
TableName:table,
Item:{
"SystemID": event.SystemID,
"SensorID": event.SensorID,
"ValueMax": event.ValueMax,
"ValueMin": event.ValueMin,
"Timestamp": String(Date.now())
}
};
console.log("Adding...");
dynamo.put(params, function(err, data) {
if (err) {
console.error("Error JSON:", JSON.stringify(err, null, 2));
context.fail();
} else {
console.log("Added:", JSON.stringify(data, null, 2));
context.succeed();
}
});
}
问题:它不起作用!但是,如果我从传感器复制有效负载并通过 AWS 测试控制台发送到 MQTT,它会作为 JSON 发布,然后 Lambda 函数工作并将其正确放入 DynamoDB。
我做错了什么?
好的,我找到了解决方案。我将 SELECT 比之前的“*”缩小了一点,现在可以使用了!
SELECT SystemID,SensorID,ValueMin,ValueMax FROM 'EXAMPLE/shadow/update'