AWS Lambda с DynamoDb нет результатов - PullRequest
0 голосов
/ 03 сентября 2018

Я только начинаю с AWS и вообще не могу запустить DynamoDB.

Я следовал руководству и создал все элементы AWS и установил привилегию для DynamoDB в базовом профиле lambda.

Мне интересно, почему я не получаю никаких результатов от DB или каких-либо сообщений об ошибках. Я поместил некоторые журналы консоли в код для устранения неполадок:

var AWS = require("aws-sdk");
AWS.config.update({
    region: "eu-west-1",
});

var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
    TableName: "cooking_table",
    Key:{
        "data_type": "meal"
    }
};


console.log("Scanning table.");
docClient.scan(params, onScan);
console.log("scan done");

function onScan(err, data) {
    console.log("starting to scan");
    if (err) {
        console.error("Unable to scan the table. Error JSON:", 
 JSON.stringify(err, null, 2));
    } else {
        // print all the movies
        console.log("Scan succeeded.");
        data.Items.forEach(function(movie) {
           console.log(movie.data_type);
        });

        // continue scanning if we have more movies, because
        // scan can retrieve a maximum of 1MB of data
        if (typeof data.LastEvaluatedKey != "undefined") {
             console.log("Scanning for more...");
             params.ExclusiveStartKey = data.LastEvaluatedKey;
             docClient.scan(params, onScan);
        }
    }
}

Удивительно, но я не получаю никаких записей журнала консоли внутри функции onScan.

В журнале я вижу только вывод этих строк:

console.log("Scanning table.");
console.log("scan done");

но ошибок нет.

Я не вижу большой ошибки, которую я делаю.

Что не так? Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Сканирование - это асинхронное действие, при вызове которого выполняется обратный вызов, поэтому ваша проблема заключается в том, что ваша лямбда заканчивается до завершения этого действия, поэтому, вероятно, вы видите только эти 2 журнала без каких-либо ошибок / проблем или результата.

Я бы предложил посмотреть на Обещание как на возможное решение этой проблемы.

0 голосов
/ 03 сентября 2018

«Ключ» не является допустимым параметром для сканирования. Не совсем уверен, как выглядят ваши данные, но, возможно, вы хотите:

var params = {
    TableName: "cooking_table",
    FilterExpression: "data_type = meal"
};

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property

Также, как отмечено в другом ответе, вы хотите сделать что-то подобное, чтобы фактически вызвать вызов сканирования, который возвращает объект запроса:

docClient.scan(params, onScan).send((err, data) => 
{
    console.log("scan actually done for real");
});
...