AWS DynamoDB 流:我可以保留记录超过 24 小时吗?

问题描述

我有一个表的 dynamoDB 流和 lambda 触发器。 lambda 触发器基本上将 dynamoDB 表同步到 DocumentDB。

如果 DocumentDB 停机超过 24 小时怎么办。如何将 dynamoDB 中发生的所有活动(放置、删除、更新)放回流中,以便 lambda 触发器可以访问记录并将数据同步到 DocumentDB。

我看到 dynamoDB 流最多可以保留 24 小时的记录。

解决方法

默认情况下,它与常规 Kinesis 的最大保留时间为 7 天不同,DynamoDB 背后的 Kinesis 的最大保留时间为 24 小时,超过最大重试次数后将丢弃消息并在 24 小时后删除消息。

所以,我们需要构建一个异常处理流程,一个这样的方法

  • 创建一个具有更高 MessageRetentionPeriod(最多 14 天)的 SQS 队列,并设置 RedrivePolicy maxReceiveCount 不重试。
  • 在 Lambda 上设置 Destination on Failure 到 SQS。
  • 可以稍微修改相同的 Lambda 以从 Kinesis 或 SQS 读取,或者可以使用不同的 Lambda 从 SQS 读取。

当无法写入 DocumentDb 时,从 Lambda 中抛出错误。这会将记录发送回 Kinesis/SQS。这样我们最多可以逃脱 14 天。我们也可以将 SQS 上的一个 DLQ 添加到另一个 SQS,它可以将 14 天后剩余的消息发送到 DLQ,并将目的地发送到持久存储。