如何使用lambda在dynamoDB中创建对象?

问题描述:

所以我有这个简单的lambda函数,只是在我的个人用户表中创建一个用户对象。当我点击测试时,它返回null。但我不确定错误是什么?如何使用lambda在dynamoDB中创建对象?

这里是我的lambda表达式:

var AWS = require('aws-sdk'); 
var dynamoDBConfiguration = 
{ 
    "accessKeyId": "###", 
    "secretAccessKey": "###", 
    "region": "MY_REGION" 
}; 
AWS.config.update(dynamoDBConfiguration); 
//var dynamodb = new AWS.DynamoDB(); 
var dynamodb = new AWS.DynamoDB.DocumentClient(); 
exports.handler = function(event, context) 
{ 
    console.log('stageA'); 
    console.log(JSON.stringify(event, null, ' ')); 
    var responseCode = 200; 
    var userTableName = "usersTable"; 
    var requestBody = event.body; 
    var pathParams = event.path; 
    var httpMethod = event.httpMethod; // HTTP Method (e.g., POST, GET, HEAD) 
    //User parameters 
    var displayName; 
    var email; 
    var fbUserID; 
    var firstName; 
    var folders; 
    var lastName; 
    var origin; 
    var profileImageRef; 
    var level; 
    var username; 
    var birthdate; 
    var experience; 
    var folder; 
    var params; 

    console.log('create by email action'); 
     requestBody = JSON.parse(requestBody); 
     //Set variables 
     firstName = requestBody.firstName; 
     lastName = requestBody.lastName; 
     email = requestBody.email; 
     username = requestBody.username; 
     experience = "0"; 
     birthdate = requestBody.birthdate; 

     params = { 
      TableName:userTableName, 
      Item:{ 
       "displayName": username, 
       "email": email, 
       "firstName": firstName, 
       "folderNames": { 
        "My Cards": {"name": "My Cards"} 
       }, 
       "lastName": lastName, 
       "experience": experience, 
       "username": username, 
       "birthdate": birthdate 
      } 
     }; 
     dynamodb.put(params, function(err, data) 
      { if (err) { 
        console.log(err); 
        context.done(err); 
       } else { 
        var response = 
        { 
         statusCode: responseCode, 
         headers: 
         { 
          "x-custom-header" : "custom header value" 
         }, 
         body: JSON.stringify(username) 
        }; 
        console.log('great success: %j',data); 
        context.succeed(response); 
       } 
      }); 


}; 

而且在我的要求下身体,我有:

{ 
    "email":"[email protected]", 
    "birthdate" : "1/1/1990", 
    "firstName" : "Tom", 
    "lastName" : "Sir", 
    "username" : "Archer" 
} 
+1

只需一条评论 - 不需要将凭证放入Lambda函数。只需将一个角色分配给该功能,并自动继承权限。 –

+0

添加一些日志记录。添加一些try/catch块。在你的问题中包含日志输出。 –

我试图运行你的代码通过API网关端点调用它工作得很好。在您的文章中,当您打算调用“test”时,它是Lambda控制台中的测试选项吗?如果是这种情况,请确保您选择了“API Gateway AWS Proxy”作为Sample事件模板。

选择“API Gateway AWS Proxy”事件模板进行测试后,编辑有效负载中的正文并将请求正文添加到该正文中。请务必避开双引号。

另一种测试Lambda的方法是调用API网关端点。在调用API之前做出任何更改之后,请确保您的API网关已部署。我使用Postman,并成功地发布了您提到的DynamoDB表的请求