【问题标题】:How to sent data triggered lambda function?如何发送数据触发 lambda 函数?
【发布时间】:2018-03-08 16:26:46
【问题描述】:

我想从 DynamoDb 发送更改的数据触发 lambda 函数。然后我想将这些更改的数据保存在不同的 DynamoDb 表中。

编程语言: NodeJs

DynomaDb
流启用:是
查看类型:新旧图片

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.`);
};

它不工作。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @VijayanathViswanathan '使用严格'; console.log('加载函数'); export.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); });回调(空,Successfully processed ${event.Records.length} records.); };
  • 但这是抛出错误@VijayanathViswanathan
  • 请更新您有问题的代码,以便对社区中的所有其他人有所帮助。谢谢:)
  • 谢谢@VijayanathViswanathan :)

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


【解决方案1】:

DynamoDB 流和 Lambda 可用于上述用例。

1) 启用 DynamoDB 表上的 DynamoDB 流以流式传输数据

2) 创建一个 Lambda 函数以使用流并写入另一个 DynamoDB 表。可以使用多种编程语言 (API) 创建 Lambda 函数。您可以使用 AWS SDK 创建 lambda 函数。

更多详情请参考以下链接。

Full documentation

Enable Streams and Lambda - Cross region replication use case

流视图类型:-

StreamViewType — 指定将写入 每当修改表中的数据时流:

KEYS_ONLY——仅修改项的关键属性。

NEW_IMAGE - 整个项目,在修改后显示。

OLD_IMAGE — 整个项目,与修改前的一样。

NEW_AND_OLD_IMAGES — 商品的新旧图像。

活动名称:-

record.eventName 在 DynamoDB 表中更新数据时应该有 MODIFY

record.dynamodb 应该具有基于 Stream 视图类型的值。如果您选择了NEW_AND_OLD_IMAGES,那么它应该同时具有旧值和新值。

eventName —(字符串)执行的数据修改类型 在 DynamoDB 表上:

INSERT - 一个新项目被添加到表中。

MODIFY - 一个或多个现有项目的属性被修改。

REMOVE - 项目已从表中删除

【讨论】:

  • 我使用节点 js。流已启用,流视图类型为 new_and_old_images。但是我不明白 lambda 函数如何捕获更改的数据? @notionquest
  • @BurhanYılmaz 更新了详细信息以识别事件名称(插入、修改或删除)。
【解决方案2】:

你想把它改成这样:

exports.handler = async function(event, context, callback) {
    console.log(JSON.stringify(event, null, 2));
    event.Records.forEach(function(record) {
        console.log(record.eventID);
        console.log(record.eventName);
        console.log('DynamoDB Record: %j', record.dynamodb);
    });
    callback(null, "message");
};

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 2020-05-09
    • 2021-12-28
    • 2020-05-05
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多