2015-08-10 12 views
8

मैं एडब्ल्यूएस लैम्ब्डा, मैं node.js. साथ लैम्ब्डा समारोह का उपयोग कर एक आइटम डाल करने के लिए कोशिश कर रहा हूँ पर काम कर रहा हूँ के साथ लैम्ब्डाकैसे एडब्ल्यूएस में एक आइटम डाल करने के लिए DynamoDb एडब्ल्यूएस का उपयोग कर Node.js

.. मैं मेरे साथ कोड निम्नलिखित है

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

जब मैं लॉग में इस कोड को कोई त्रुटि है परीक्षण कर रहा हूँ, फिर भी मैं नहीं Dynamodb तालिका करने के लिए एक आइटम डाल करने में सक्षम हूँ, आप कृपया मदद कर सकते हैं मुझे मेरे रास्ते के साथ समस्या का पता लगाकर dynamodb तालिका के लिए एक आइटम डाल करने के लिए या आप आइटम डाल करने के लिए लैम्ब्डा उपयोग करने के लिए अन्य तरीके से बता सकती हैं।

+0

एसईएस अधिसूचनाओं को लॉग करने का प्रयास करते समय इस पर दौड़ें, यहां अधिक जानकारी। आशा है कि यह मदद करता है http://aaron-hoffman.blogspot.com/2016/03/store-amazon-ses-delivery-notifications.html –

उत्तर

13

मुझे लगता है कि अपने सबसे तत्काल समस्या यह है कि आप DynamoDB से प्रतिक्रिया से पहले context.succeeded() बुला रहे हैं है। लैम्ब्डा निष्पादन बंद हो जाता है अगर आप ऐसा करते हैं, प्रतिक्रिया का इंतजार किए बिना।

इसके अलावा, मैं कुछ भी 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); 
    } 

} 
संबंधित मुद्दे