AWS Lambda 从 MQTT 请求中放入项目

AWS Lambda putting item from MQTT request

我尝试使用此脚本将 MQTT 请求内容放入带有 Lambda 函数的 DynamoDB 中:

 var AWS = require("aws-sdk");
var dynamodb = new AWS.DynamoDB();

exports.handler = function index(e,ctx,callback){

//var msg = JSON.stringify(ctx);
var msg = e.Name;
var params = {
        TableName:"myTable",
        Item:{
            Val: {S: msg},
            ValId: { S:"Id"}
        }
    };


    dynamodb.putItem(params,callback);
    callback(null,"Putting item Marcel !!");

}

我有 create/set thing/rule/policy 并且此脚本有效,但是,我有未定义的值,我尝试获取 MQTT 内容以将其存储到数据库中。 为了测试这个我 post SNS 的新主题,我没有使用正确的格式我有 post 一些像这样的消息(原始):

{"Val":"Value"} Val:"Value" "Val":Value

我找到了解决这个问题的方法:

var AWS = require("aws-sdk");
var dynamodb = new AWS.DynamoDB();

exports.handler = function index(e,ctx,callback){
// new block
const record = e.Records[0].Sns.Message;  
var msgJSON = JSON.parse(record);         
var msg = msgJSON.key1;                   
var msg2 = msgJSON.key2;                      
var string_to_send = JSON.stringify(msg)+"-"+JSON.stringify(msg2);
//
var clean_string = string_to_send.split('"').join('');

var params = {
        TableName:"myTable",
        Item:{
            Val: {S: clean_string},
            ValId: {S: "Id"}
        }
    };


    dynamodb.putItem(params,callback);
    callback(null,"Putting item Marcel !!");

}

为了测试这个,您需要使用 SNS 在主题中发布,如下所示:

{"key1": {"TheValue1"},"key2": {"TheValue2"}} 

或使用 lambda 操作 -> 配置测试事件 -> SNS,在消息字段中输入:

{\"key1\": \"Val\",\"key2\": \"ValId\"}

这项工作但我没有用"所以我使用拆分来删除它。