尝试通过API写入AWS dynamo数据库

时间:2020-07-09 14:50:34

标签: aws-lambda

我是AWS的新手,我一直在慢慢尝试执行不同的操作。我最近设置了一个API,该查询使我可以查询一个dynamodb表,现在,我试图设置一个API,该API可以使我用当前温度更新表中的值。这些数据将来自在树莓派上运行的脚本。

我已经花了很多篇教程,但是我还没有完全锁定它。我能够使用硬编码的python脚本写入数据库,因此我知道数据库和角色的设置正确。我现在正在尝试创建一个基于节点的lambda函数,该函数将接受URL中的parms并将值放入表中。我想念一些东西。

首先,我需要映射api中的值吗?有些指南会这样做,而另一些则不会。就像我说的那样,理想情况下,我想将它们作为URL参数传递。

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
 
exports.handler = (event, context, callback) => {
    
    dynamodb.putItem({
        TableName: "temperature",
        Item: {
            "tempid": {
                S: event.queryStringParameters["tempid"]
            }
        }
    }, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(null, {
                statusCode: '500',
                body: err
            });
        } else {
            callback(null, {
                statusCode: '200',
                body: 'Result from ' + event.queryStringParameters["tempid"] + '!'
            });
        }
    })
};

当我在查询字符串中使用“ tempid = hotttub1”在api中对其进行测试时,出现此错误:
START RequestId:1beb4572-65bf-4ab8-81a0-c217677c3acc版本:$ LATEST 2020-07-09T14:02:05.773Z 1beb4572-65bf-4ab8-81a0-c217677c3acc INFO {tempid:'hottub1'} 2020-07-09T14:02:05.774Z 1beb4572-65bf-4ab8-81a0-c217677c3acc ERROR调用错误{“ errorType”:“ TypeError”,“ errorMessage”:“无法读取未定义属性'tempid',”堆栈“: [“ TypeError:无法读取未定义的'tempid'属性',”在Runtime.exports.handler(/var/task/index.js:11:47)“,”在Runtime.handleOnce(/ var / runtime / Runtime。 js:66:25)“]}

编辑 如果我打印出事件,则可以看到该值即将传入,显然是在引用错误。还在寻找。

{ “ tempid”:“ hottub1” }

1 个答案:

答案 0 :(得分:0)

必须采用以下格式:

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
 
exports.handler = (event, context, callback) => {
    
    console.info("EVENT\n" + JSON.stringify(event.tempid, null, 2))
    var temperatureid = JSON.stringify(event.tempid, null, 2)
  
    dynamodb.putItem({
        TableName: "temperature",
        Item: {
            "tempid": {
                S: temperatureid
            }
        }