首页 > 解决方案 > 将字符串 Lambda 函数读取到 DynamoDB

问题描述

我正在尝试从连接到 AWS IOT CORE 通过 MQTT 发送数据的 IOT SENSOR 将数据导入 DynamoDB。我想要单独列中的所有值,所以我为此使用 Lambda 函数。它是这样的:

关于示例/阴影/更新主题,我从传感器收到以下 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。

我究竟做错了什么?

标签: jsonamazon-web-servicesaws-lambdaamazon-dynamodbaws-iot

解决方案


好的,我找到了解决方案。我将 SELECT 从之前的“*”缩小了一点,现在它可以工作了!

SELECT SystemID,SensorID,ValueMin,ValueMax FROM 'EXAMPLE/shadow/update'

推荐阅读