设置 CDC 应用程序时 Lambda 是正确的选择吗

Is Lambda right choice when setting up CDC application

我正在尝试针对 AWS 中的事务数据库实施 CDC,并将其加载到 Snowflake 数据库中。我能够捕获从 Postgres 数据库到 S3 存储桶的更改。

这些是接下来的步骤 - 1) 针对 S3 存储桶设置事件通知并触发 lambda (#1) 2) Lambda #1 将创建一条消息,其中包含与文件关联的数据和发布时间戳,并将此消息发送到 FIFO SQS 队列,这将触发另一个 lambda (#2) 3) Lambda #2 将 运行 COPY INTO 语句,将数据写入 Snowflake

这是一个想到的问题- 当 Lambda #2 被触发时,如果一批记录失败,我们如何停止调用未来的调用? 由于这是一个 CDC 应用程序,我们必须维护从源数据库到 Snowflake 的事务更改顺序。 Lambda #2 是正确的选择吗?

在使用 Lambda 函数捕获将要迁移的 CDC events.The 数据量时,需要考虑一些注意事项。
对于重要的数据更改 - 您需要注意 Lambda limits,例如 3GB 内存、512MB 存储等。如果数据恰好很大,这可能会导致 lambda 函数失败。

现在回答您的问题 - 执行 COPY INTO 的 Lambda #2 - 您可能希望它跟踪一些状态,指示最后处理的消息 ID、时间戳等是什么。这样后续的 lambda 函数就不会在出现故障时被触发。 所以你的 lambda2 看起来像:
1. 获取 SQS 事件详细信息 - 检查 dynamo 或 RDS table 之前是否处理过相同的事件或之前是否失败。还要检查是否有任何过去的事件处于失败状态。如果已采取补救措施,则触发警报。 2. 将事件存储到 dynamo DB 或 RDS table .
3.执行处理.
4. 在成功/失败时更新 table。

这是 mailtobash 关于使用 lambda

的另一个回答

” 如果您可以通过添加 python 作业来利用现有的 EC2,那么它可能是一个更简单的设计。作为一种实践,我们会在 Lambda 是唯一可用的技术选择时使用它——例如 API 网关上的自定义授权程序、不常用的服务、S3 上的事件等。如果您有一组 运行您维护的 EC2,那么您可能不需要依赖 Lambdas “