对所有记录调用 DynamoDB 流触发器

DynamoDB stream trigger invoke for all records

我正在尝试从 DynamoDB table 设置 ElasticSearch 导入过程。我已经创建了 AWS Lambda 并启用了带有触发器的 DynamoDB 流,该触发器为每个 added/updated 记录调用我的 lambda。现在我想执行初始种子操作(将当前在我的 DynamoDB table 中的所有记录导入 ElasticSearch)。我怎么做?有什么方法可以使 table 中的所有记录成为 "reprocessed" 并添加到流中(这样它们就可以由我的 lambda 处理)?还是编写一个单独的函数来手动读取 table 中的所有数据并将其发送到 ElasticSearch - 所以基本上有 2 个 lambdas:一个用于初始数据迁移(只执行一次并由我手动触发),另一个用于同步新记录(由 DynamoDB 流事件触发)?

感谢大家的帮助:)

取决于您的数据集有多大,您将无法在 Lambda 中为您的数据库播种,因为最大超时为 300 seconds(编辑:现在是 15 分钟,感谢@matchish)。

您可以启动一个 EC2 实例并使用 SDK 执行 DynamoDB scan operation 并批量写入您的 Elasticsearch 实例。

您也可以使用 Amazon EMR to perform a Map Reduce Job to export to S3 并从那里处理您的所有数据。

我会编写一个脚本来处理 dynamodb 中的每条记录。对于 dynamodb 中的每个项目,添加一个名为 migratedAt 的新 属性 或任何您想要的。添加此 属性 将触发 dynamodb 流,进而触发您的 lambda 处理程序。根据您的问题,您的 lambda 处理程序已经处理了更新,因此那里没有变化。