【问题标题】:How to create an object in dynamoDB using lambda?如何使用 lambda 在 dynamoDB 中创建对象?
【发布时间】:2017-05-10 03:19:26
【问题描述】:

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

这是我的 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":"tomSample@gmail.com",
  "birthdate" : "1/1/1990",
  "firstName" : "Tom",
  "lastName" : "Sir",
  "username" : "Archer"
}

【问题讨论】:

  • 只是一个旁注——应该不需要将凭证放入 Lambda 函数中。只需为函数分配一个角色,它就会自动继承权限。
  • 添加一些日志记录。添加一些 try/catch 块。在您的问题中包含日志输出。

标签: javascript amazon-web-services amazon-dynamodb aws-lambda aws-sdk


【解决方案1】:

我尝试通过 API Gateway 端点运行您的代码调用,它运行良好。在您的帖子中,当您的意思是调用“测试”时,它是 Lambda 控制台中的测试选项吗?如果是这种情况,请确保您已选择“API Gateway AWS 代理”作为示例事件模板。

选择“API Gateway AWS 代理”事件模板进行测试后,编辑负载中的正文并将您的请求正文添加到其中。确保转义双引号。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多