Попытка записать в AWS динамо-базу данных через api - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в AWS, и я медленно пытался выполнять разные действия. Я недавно настроил API, который позволяет мне запрашивать таблицу Dynamodb, и теперь я пытаюсь настроить api, который позволит мне обновить значение в таблице с текущей температурой. Эти данные будут получены из сценария, запущенного на Raspberry Pi.

Я просмотрел так много руководств, но я еще не заблокировал их. Я могу писать в базу данных с помощью жестко запрограммированного сценария python, поэтому я знаю, что моя база данных и роли настроены правильно. Теперь я пытаюсь создать лямбда-функцию на основе узлов, которая будет принимать параметры из URL-адреса и помещать значения в таблицу. Мне чего-то не хватает.

Во-первых, нужно ли сопоставить значения в 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"] + '!'
            });
        }
    })
};

Когда я тестирую его в api, используя «tempid = hotttub1» в строке запроса, я получаю эту ошибку: START RequestId: 1beb4572-65bf-4ab8-81a0-c217677c3a cc Версия: $ LATEST 2020-07-09T14: 02: 05.773Z 1beb4572-65bf-4ab8-81a0-c217677c3a cc INFO {tempid: 'hottub1'} 2020 -07-09T14: 02: 05.774Z 1beb4572-65bf-4ab8-81a0-c217677c3a cc ERROR Invoke Error {"errorType": "TypeError", "errorMessage": "Невозможно прочитать свойство 'tempid' of undefined", "stack ": [" TypeError: Невозможно прочесть свойство 'tempid' of undefined "," в Runtime.exports.handler (/var/task/index.js:11:47) "," в Runtime.handleOnce (/ var / runtime / Runtime. js: 66: 25) "]}

EDIT Если я распечатываю событие, я вижу, что значение поступает, и я, очевидно, ссылаюсь на него неправильно. Все еще ищу.

{"tempid": "hottub1"}

1 Ответ

0 голосов
/ 09 июля 2020

Это должно быть в таком формате:

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
            }
        }
...