如何使用带有node.js的aws Lambda将一个Item放入aws DynamoDb中

Bha*_*shi 8 amazon-web-services node.js aws-lambda

我正在使用aws lambda,我正在尝试使用带有node.js的lambda函数来放置一个Item.

我和我有以下代码..

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

var dynamoDBConfiguration = {
    "accessKeyId": "AccessKey",
    "secretAccessKey": "Secratekey",
    "region": "us-west-2"
  };
AWS.config.update(dynamoDBConfiguration);
var dd = new AWS.DynamoDB();
var tableName = 'product_bhavik';

exports.handler = function(event, context) {


putItem = function(itemName,prod_Id, prod_Name, prod_Desc, prod_Price) {
    console.log(" putItem Function Called");
     var item = {
        'itemName': { 'S': itemName },
        'microtime': { 'N': new Date().getTime().toString() }
      };

      if (prod_Id) item.prod_Id = { 'N': prod_Id.toString()};
      if (prod_Name) item.prod_Name = { 'S': prod_Name };
      if (prod_Desc) item.prod_Desc = { 'S': prod_Desc };
      if (prod_Price) item.prod_Price = { 'N': prod_Price.toString()};

      console.log("Data: %j",item);
      var response = dd.putItem({
         'TableName': tableName,
         'Item': item
      }, function(err, data) {
         err && console.log("Error in putItem "+err);
      });
    };

putItem('Item1',1, 'Laptop', 'Laptop for the IT users',10000);
context.succeed("Successfully Inserted");
}
Run Code Online (Sandbox Code Playgroud)

当我在日志中测试这段代码没有错误时,我仍然无法将一个项目放到Dynamodb表中,你能不能帮我把一个项目放到dynamodb表中,通过我的方式找到问题或者你能不能建议使用lambda来放置项目的其他方法.

Jam*_*mes 13

我认为您最直接的问题是您context.succeeded()在DynamoDB的响应之前调用.如果执行此操作,Lambda将停止执行,而不等待响应.

另外,我建议添加一个try/catch包装器,看看DynamoDB回调中是否有任何错误报告.尝试这样的事情:

exports.handler = function(event, context) {
  try {
    putItem = function(itemName,prod_Id, prod_Name, prod_Desc, prod_Price) {
        console.log(" putItem Function Called");
         var item = {
            'itemName': { 'S': itemName },
            'microtime': { 'N': new Date().getTime().toString() }
          };

          if (prod_Id) item.prod_Id = { 'N': prod_Id.toString()};
          if (prod_Name) item.prod_Name = { 'S': prod_Name };
          if (prod_Desc) item.prod_Desc = { 'S': prod_Desc };
          if (prod_Price) item.prod_Price = { 'N': prod_Price.toString()};

          console.log("Data: %j",item);
          var response = dd.putItem({
             'TableName': tableName,
             'Item': item
          }, function(err, data) {
              if (err) {
                context.fail("Error in putItem "+err);
              } else {
                context.succeed("Successfully Inserted");
              }
          });
        };

    putItem('Item1',1, 'Laptop', 'Laptop for the IT users',10000);

  } catch (error) {
    context.fail("Caught: " + error);
  }

}
Run Code Online (Sandbox Code Playgroud)