使用Stream + Lambda进行DynamoDB复制

时间:2018-02-07 08:08:28

标签: lambda amazon-dynamodb replication

我正在尝试使用Stream + Lambda设置DynamoDB表复制。 我想知道如何应对失败。 例如,我有表A和表B,我希望将表A中的任何更新复制到表B.

我可以使用Stream + Lambda设置触发器。 编写lambda函数以从表A中获取事件并直接写入表B.

但是,我不确定如何应对失败。 在lambda函数中,如果由于某种原因写入表B失败了该怎么办?我可以退休,但如果所有重试都失败了该怎么办?

3 个答案:

答案 0 :(得分:0)

您可以向表B添加新字段('版本')。 'version'字段将是记录添加的时间。

如果更新表B失败,您可以将失败的事件保存到某些MySql表或RDS。

您应该拥有一个查询备份表的进程,如果备份事件“version”字段大于表B上的“version”事件,则更新记录。

您还可以使用内置aws功能“cross region dynamodb replication

答案 1 :(得分:0)

使用DynamoDB流+ Lambda,您可以免费重试,直到流数据到期,这对于DynamoDB流来说是24小时。如果您的lambda因任何原因失败,它将在下次调用时重试处理失败的批处理。有关更多详细信息,请参阅本文的最后一段。 https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html。因此,您不需要在lambda代码中实现重试。

只需将您的流批量大小设置为相当大的数字(例如100),以允许批处理包含新更新和以前失败的更新(如果有)。

我不希望lambda经常失败。即使他们这样做,你免费获得的重试机制也应该照顾它。所以我不打算为它实施修复。如果lambda在没有成功执行的情况下持续失败(例如15或20分钟),我会监视lambda并触发警报。

答案 2 :(得分:0)

您可以使用全局表(请参阅https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)进行多区域,多主复制。 DynamoDB会照顾好一切。