对所有记录调用 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 处理程序已经处理了更新,因此那里没有变化。
我正在尝试从 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 处理程序已经处理了更新,因此那里没有变化。