2015-08-10 11 views
8

Sto lavorando su aws lambda, sto provando a mettere un oggetto usando la funzione lambda con node.js.come inserire un oggetto in aws DynamoDb usando aws Lambda con node.js

Ho seguente codice con me ..

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

quando sto testando questo codice nei registri non v'è alcun errore, ancora non sono in grado di mettere un elemento alla tabella DynamoDB, potete per favore aiutare io per mettere un oggetto al tavolo dynamodb trovando il problema a modo mio o puoi suggerire un altro modo di usare lambda per mettere l'oggetto.

+0

Attraversare questo mentre si tenta di registrare Notifiche SES, maggiori informazioni qui. Spero che aiuti http://aaron-hoffman.blogspot.com/2016/03/store-amazon-ses-delivery-notifications.html –

risposta

13

Penso che il tuo problema più immediato sia che chiami context.succeeded() prima della risposta da DynamoDB. Lambda interrompe l'esecuzione se lo fai, senza attendere la risposta.

Inoltre, si consiglia di aggiungere un wrapper try/catch per vedere se qualcosa va storto non riportato nel callback DynamoDB. Prova qualcosa del genere:

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

}