Вызов getItem DynamoDB не дает ответа - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь прочитать базовую таблицу DynamoDB в AWS Lambda, следуя инструкциям AWS. У меня есть некоторый базовый код, который, кажется, работает нормально (я не вижу никаких зарегистрированных ошибок), но я не могу получить никакого вывода:

const AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
const ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

function readData(){

console.log("In the readData() function");

var params = {
    TableName: "desks",
    Key: {
        "desk_id": {N:'1'}
    }
};
console.log("Set params");
// Call DynamoDB to read the item from the table
ddb.getItem(params, function(err, data) {
    console.log("In getItem callback function");
    if (err) {
        console.log("Error", err);
    }
    else {
        console.log("Success", data.Item);
    }
});
console.log("Completed call");
}

Когда вызывается моя функция выше,журналы показывают вывод «Задать параметры» и «Завершенный вызов», но это похоже на то, что функция обратного вызова не выполняется. Я что-то упускаю из-за потока выполнения?

Редактировать: я использую Node.js 8.10, и я считаю, что я установил соответствующие разрешения роли (полный доступ к базе данных).

1 Ответ

1 голос
/ 29 сентября 2019

Хорошо, я понял, что вместо работы с конкретной версией API вы можете работать с DocumentClient .

О AWS.DynamoDB.DocumentClient:

Клиент документов упрощает работу с элементами в Amazon DynamoDB, абстрагируя понятие значений атрибутов. Эта абстракция аннотирует собственные типы JavaScript, предоставленные в качестве входных параметров, а также преобразует аннотированные данные ответов в собственные типы JavaScript.

О функции get:

Возвращает наборатрибуты для элемента с заданным первичным ключом путем делегирования в AWS.DynamoDB.getItem ().

Фрагмент кода:

const AWS = require('aws-sdk');

const db = new AWS.DynamoDB.DocumentClient({
   region : 'REGION' 
});


function getItem(){

const params = {
  TableName : 'TABLE-NAME',
  Key: {
    'PRIMARY-KEY':'PRIMARY-KEY-VALUE'
  }
};

  db.get(params, (err, data) => {
  if (err){
    console.log("Error:", err);
  } 
  else{
    console.log("Success:", data.Item);

  } 
  console.log("Completed call");
});

}

exports.handler = (event) => {

 getItem()

};

Кстати, вы можете использовать сканированиеоперация из интерфейса DynamoDB. Операция сканирования возвращает один или несколько элементов, которые соответствуют указанному фильтру.

enter image description here

Я использовал его только для того, чтобы убедиться, что введенные мной переменные верны перед выполнением лямбда-функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...