如何使用DynamoDB调用单个项目?

时间:2018-12-23 12:57:04

标签: aws-lambda amazon-dynamodb aws-sdk aws-sdk-nodejs

我正在尝试致电getItem到DynamoDB。我使用的是文档中的代码示例,但是,我得到的只是 null

  • 我有一个名为table的表。
  • 我有一个表行,其中主分区键称为id(数字)。
  • 我没有主排序键。
  • Lambda函数具有Allow: dynamodb:GetItem的权限

我的itemid中的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);
    }
  });

};

3 个答案:

答案 0 :(得分:0)

您的getItems调用是异步的,并且在dynamodb调用返回结果之前,Lambda函数已经完成,因此为什么什么都没有记录。您的实际数据库调用可能工作正常。

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

答案 1 :(得分:0)

这是我的lambda函数的示例(请将执行环境更改为Node.js 6.10以及表和ID名称和值)。这可行,并记录一些信息。请尝试...

'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); 
};

答案 2 :(得分:0)

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);
  }
});
}

这是我的lambda示例,您可以尝试。