如何在node.js AWS Dynamodb中使用batchWriteItem

时间:2018-08-15 01:16:40

标签: node.js amazon-web-services aws-lambda amazon-dynamodb

我对AWS有点陌生,因此在尝试使用node.js开发一个简单的Lambda函数时遇到了一些问题。 在发电机数据库中,我有一个名为“ Game”的表,其属性为“ gamepk”,“ user”,“ result”。 在Lambda函数的一个示例中,我想插入“游戏”元素的集合(集合中元素的数量可以变化)。 我一直在阅读一些教程,它说我应该使用batchWriteItem,但是由于Game元素的集合是可变的,所以我不知道该如何进行。

有人可以在节点js中编写一个函数来解决我的问题吗? 谢谢你的时间。

lambda函数接收的JSON示例如下:

{
    "games": [{
            "gamepk": "1",
            "user": "rolo",
            "result": "1-0"

        },
        {
            "gamepk": "2",
            "user": "jhon",
            "result": "1-1"
        }
    ]

}

2 个答案:

答案 0 :(得分:3)

这应该可以满足您的需求。

  1. 创建新的Lambda函数
  2. 选择节点版本6
  3. 选择一个角色或创建一个具有DynamoDB访问权限的新角色!
  4. 在Web控制台中打开创建的功能
  5. 将代码段波纹管粘贴到Cloud 9编辑器中

    const AWS = require('aws-sdk/global');
    
    exports.handler = (event, context, callback) => {
    // The event parameter is the input to your lambda function
    console.log(JSON.stringify(event));
    let lambdaInput = event['PROPERTY_NAME_DEFINED_IN_POST'];
    let games = [];
    let documentClient = new AWS.DynamoDB.DocumentClient();
    
    lambda.forEach(item => {
      games.push({
        PutRequest: {
          Item: {
            gamepk: item['gamepk'],
            user: item['user'],
            result: item['result']
          }
        }
      });
    });
    
    let params = {
        RequestItems: {
            'TABLE_NAME': games
        }
    };
    
    documentClient.batchWrite(params, function(err, data) {
        if (err) {
            callback(err);
        } else {
            callback(null, data);
        }
    });
    }
    

保存功能,然后您将要选择顶部的下拉菜单,其中显示“选择测试事件”,然后选择“配置测试事件”。

这将打开一个新对话框,只需保存主文本区域中的JSON并为测试指定名称并保存。

现在从“选择测试事件”下拉列表中选择您刚刚进行的测试,然后单击右上角的“测试”。

可以在AWS Javascript SDK

找到该文档

答案 1 :(得分:0)

作为answer的附加帮助,您可以使用环境变量并按以下方式使用它:

const MI_TABLE = process.env.MI_TABLE

  let params = {
      RequestItems: {
           [ MI_TABLE ] : games
      }
  };

return await batchWrite(params);