Как вызвать один элемент с DynamoDB?

Я пытаюсь позвонить getItem в DynamoDB. Я использую образцы кода из документации, однако все, что я получаю, это null.

  • У меня есть таблица под названием table.
  • У меня есть строка таблицы с первичным ключом раздела с именем id (число).
  • У меня нет первичного ключа сортировки.
  • Лямбда-функция имеет разрешение Allow: dynamodb:GetItem

К моему item с id из 123 прикреплено еще несколько строк, и я хотел бы получить их все в журнале консоли.

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({ region: 'eu-central-1' });

exports.handler = async (event) => {

  // Create the DynamoDB service object
  ddb = new AWS.DynamoDB({ apiVersion: '2012-10-08' });

  var params = {
    TableName: 'table',
    Key: {
      'id': { N: '123' },
    }
  };

  // Call DynamoDB to read the item from the table
  ddb.getItem(params, function (err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      console.log("Success", data.Item);
    }
  });

};

person curious    schedule 23.12.2018    source источник
comment
так что же производит cosole.log?   -  person guzial    schedule 25.12.2018
comment
@guzial Я не получаю ни одного из них.   -  person curious    schedule 31.12.2018


Ответы (3)


var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});
exports.handler = (event, context, callback) => { 
// Create the DynamoDB service object
ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'});

var params = {
  TableName: 'TABLE',
  Key: {
    'KEY_NAME' : {N: '123'},
  },
  ProjectionExpression: 'ATTRIBUTE_NAME'
};

// Call DynamoDB to read the item from the table

ddb.getItem(params, function(err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data.Item);
  }
});
}

Это мой пример лямбды, вы можете попробовать.

person Harsh Manvar    schedule 02.01.2019
comment
Вы не используете exports.handler? - person curious; 02.01.2019
comment
это простой узел... но вы можете добавить его внутрь exports.handler... и без кода дескриптора очевидно, что он не запускается на лямбда - person Harsh Manvar; 02.01.2019
comment
Можете ли вы привести пример, который будет работать на Lambda? Это та часть, с которой у меня проблемы. Ваш текущий пример почти такой же, как я разместил в вопросе. Спасибо. - person curious; 02.01.2019
comment
@любопытно, извините, я был занят..теперь бесплатно, это сработало? или теперь я могу дать вам правильный ответ - person Harsh Manvar; 02.01.2019
comment
это здорово ... с удовольствием ... в любое время за помощью aws и docker angular и node - person Harsh Manvar; 02.01.2019
comment
Давайте продолжим обсуждение в чате. - person curious; 02.01.2019

Это пример из моей лямбда-функции (пожалуйста, измените среду выполнения на Node.js 6.10, а также имена и значения таблиц и идентификаторов). Это работает и регистрирует некоторую информацию. Пожалуйста, попробуй...

'use strict';

const aws = require('aws-sdk'); 
const dbCon = new aws.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = (event, context, callback) => {
    var params = {
        TableName: "trans",
        Key: {
            "transid": {"S": "Bk6ZQF0Q7"}
        }
    };

    console.log("Attempting a call getitem...");

    dbCon.getItem(params, function (err, data) {
        if (err) {
            console.error("Unable to getItem. Error JSON:", JSON.stringify(err, null, 2));
        }
        else {
            console.log("getItem succeeded:", JSON.stringify(data, null, 2));
        }
    });

    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    }; 

    callback(null, response); 
};
person guzial    schedule 01.01.2019
comment
Спасибо добрая душа. Я проверю это завтра - person curious; 02.01.2019
comment
ооо :) я вижу, вы приняли ответ, написанный позже, который совпадает с моим :) - person guzial; 02.01.2019
comment
О черт, я должен тебе карму. Прости за это. Вместо этого возьмите пиво ???? - person curious; 02.01.2019

Ваш вызов getItems является асинхронным, и ваша функция Lambda завершается до того, как ваш вызов dynamodb возвращается с результатом, поэтому ничего не регистрируется. Ваш фактический вызов базы данных, вероятно, работает нормально.

https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/calling-services-asynchronously.html

person F_SO_K    schedule 29.12.2018