问题描述
我有一个表的 dynamoDB 流和 lambda 触发器。 lambda 触发器基本上将 dynamoDB 表同步到 DocumentDB。
如果 DocumentDB 停机超过 24 小时怎么办。如何将 dynamoDB 中发生的所有活动(放置、删除、更新)放回流中,以便 lambda 触发器可以访问记录并将数据同步到 DocumentDB。
我看到 dynamoDB 流最多可以保留 24 小时的记录。
解决方法
默认情况下,它与常规 Kinesis 的最大保留时间为 7 天不同,DynamoDB 背后的 Kinesis 的最大保留时间为 24 小时,超过最大重试次数后将丢弃消息并在 24 小时后删除消息。
所以,我们需要构建一个异常处理流程,一个这样的方法
- 创建一个具有更高
MessageRetentionPeriod
(最多 14 天)的 SQS 队列,并设置 RedrivePolicymaxReceiveCount
不重试。 - 在 Lambda 上设置
Destination on Failure
到 SQS。 - 可以稍微修改相同的 Lambda 以从 Kinesis 或 SQS 读取,或者可以使用不同的 Lambda 从 SQS 读取。
当无法写入 DocumentDb 时,从 Lambda 中抛出错误。这会将记录发送回 Kinesis/SQS。这样我们最多可以逃脱 14 天。我们也可以将 SQS 上的一个 DLQ 添加到另一个 SQS,它可以将 14 天后剩余的消息发送到 DLQ,并将目的地发送到持久存储。