无法获取使用 node.js 和 Lambda 编写的 AWS dynamoDB

Cannot get AWS dynamoDB written with node.js and Lambda

我完全是 node.js 的菜鸟。我正在尝试将一个项目添加到 AWS dynamoDB table 以及 return 一个字符串到 Twilio。我认为我的 Lambda 函数在写入 dynamoDB 条目之前就结束了。我将字符串 returned 正确地发送到 Twilio,但数据库中没有任何项目。我确实在 Cloudwatch 日志中看到了字符串 "putItem Function Called".

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

var dynamoDBConfiguration = {"region": "us-east-2"};
AWS.config.update(dynamoDBConfiguration);
var dd = new AWS.DynamoDB();
var tableName = 'kta';

console.log('Loading function');

exports.handler = function(event, context) {
//*****************************************
  try {
    putItem = function(param,result) {
        console.log(" putItem Function Called");
        var d = new Date();
        var last_updated = d.getUTCFullYear() + "/" + d.getUTCMonth() + "/" + d.getUTCDate() + " " + d.getUTCHours() + ":" + d.getUTCMinutes() + ":" + d.getUTCSeconds() + "." + d.getUTCMilliseconds() + " UTC";
         var item = {
            'param': { 'S': 'inboundSmsLastNumber' },
            'result': { 'S': '+18885551212'},
            'last_updated': { 'S': last_updated }
          };

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

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

//*****************************************
    qryObject = parseQuery(event.reqbody);
    console.log(qryObject);

// Send SMS with the inbound SMS information    
        context.succeed("<Sms from='+18885551212' to='+19991112222'>You received an SMS from " + qryObject.From + "</Sms>");

};

function parseQuery(qstr) {
        var query = {};
        var a = qstr.substr(0).split('&');
        for (var i = 0; i < a.length; i++) {
            var b = a[i].split('=');
            query[decodeURIComponent(b[0])] = decodeURIComponent(b[1] || '');
        }
        return query;
}

非常感谢任何帮助。

以下是 Cloudwatch 日志:

2016-12-22T01:15:07.503Z 未定义加载函数

START RequestId:134fda9f-c7e4-11e6-80bc-25be850f5913 版本:$LATEST

2016-12-22T01:15:07.522Z 134fda9f-c7e4-11e6-80bc-25be850f5913 putItem 调用函数

2016-12-22T01:15:07.522Z 134fda9f-c7e4-11e6-80bc-25be850f5913 数据:

{ "param":{ "S": "inboundSmsLastNumber" }, "result":{ "S": "+18885551212" }, "last_updated":{ "S": "2016/11/22 1:15:7.522 UTC" } }

2016-12-22T01:15:08.123Z 134fda9f-c7e4-11e6-80bc-25be850f5913 { ToCountry: 'US', ToState: '', SmsMessageSid: 'SM15398089fc1dbaeedb56e560face6380', NumMedia: '0 ',ToCity:'',FromZip:'66610',SmsSid:'SM15398089fc1dbaeedb56e560face6380',FromState:'KS',FromCity:'TOPEKA',正文:'Test+65',FromCountry:'US', 收件人: '+1**********', ToZip: '', NumSegments: '1', MessageSid: 'SM15398089fc1dbaeedb56e560face6380', AccountSid: 'AC********************************', 发件人: ' +1************', ApiVersion: '2010-04-01' }

END RequestId: 134fda9f-c7e4-11e6-80bc-25be850f5913

REPORT RequestId:134fda9f-c7e4-11e6-80bc-25be850f5913 持续时间:838.90 毫秒 计费持续时间:900 毫秒内存大小:128 MB 使用的最大内存:21 MB

要设置您的 dynamoDB,请尝试使用:

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

AWS.config.update({
  region: "us-east-2",
});

var dd = new AWS.DynamoDB.DocumentClient();
var tableName = 'kta';

对于 put-item 请求,请尝试:

var params = {
    TableName: tableName,
    Item: {
        'param': { 'S': 'inboundSmsLastNumber' },
        'result': { 'S': '+18885551212'},
        'last_updated': { 'S': last_updated }
    }
};

dd.put(params, function(err, data) {
    if (err) {
        context.fail("Error in putItem "+err);
    } else {
        context.succeed("Successfully Inserted");
    }
});

有关更多信息,您可以按照以下说明进行操作:http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.03.html#GettingStarted.NodeJs.03.01

您不允许 dynamo 请求完成。在处理程序的末尾,您调用:

   context.succeed("<Sms from='+18885551212' to='+19991112222'>You received an SMS from " + qryObject.From + "</Sms>");

处理程序然后 returns 和 lambda 停止 运行ning。 dynamo 调用已在上面排队,但还没来得及 运行.

让来自 dynamo 的回调执行 context.succeed,您将确保它在 dynamo 完成后触发。