仅获取DynamoDB表中的最新项目,并通过Lambda将其放入另一个DynamoDB表中

时间:2018-05-08 12:18:50

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

我正在尝试从一个DynamoDB表复制最新更新,并使用Lambda将它们放入另一个表中。我在DynamoDB中设置了一个触发器,当使用' Blueprint'在表格上发生新条目时更新Lambda函数。我需要帮助将最新项目放入新表中。

这是我的Lambda代码:

'use strict';

console.log('Loading function');

exports.handler = (event, context, callback) => {
    //console.log('Received event:', JSON.stringify(event, null, 2));
    event.Records.forEach((record) => {
        console.log(record.eventID);
        console.log(record.eventName);
        console.log('DynamoDB Record: %j', record.dynamodb);
    });
    callback(null, `Successfully processed ${event.Records.length} records.`);
};

这是我第一次这样做,所以任何帮助都会受到赞赏。

试图放入表#2的项目是:

{ "Item": { "Temp": "47.2", "Light": "29", "GWID": "BB00000002", "DateTm": "0\n18-05-05T16:44:39Z", "Status": "b", "ID": "AA00000024", "Hum": "29", "BatV": "3.01" } }

2 个答案:

答案 0 :(得分:0)

不确定我是否理解你,但是你检查了dynamoDB SDK来进行插入吗? https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property

答案 1 :(得分:0)

如果我做对了,即“我想在表#2中有一个项目反映了表#1中的最新项目。不是整个表#1”,则有多种方法可以完成任务您正在寻找:

  1. BatchSize设置为1。对于dynamodb表#1中的每个更改,都会调用lambda函数,并且您可以对表#2使用PutItem操作;
  2. 增加BatchSize并仅处理批处理中的最新事件。像这样:

 var uniqueEvents = _.chain(event.Records)
    .reverse()
    .uniqBy(function (record) {
      return record.dynamodb.Keys.id.S;
    })
    .value();

选择2是您的选择,比选择1更可取(聊天次数少,价格便宜)