我想使用DynamoDB Streams在S3上进行增量DynamoDB备份。我有一个lambda读取dynamodb流并将文件写入S3。为了标记已经读取的碎片,我将ExclusiveStartShardId登录到配置文件中。阅读AWS Dynamodb流
我要做的就是:
- 描述流(使用登录ExclusiveStartShardId)
- 获取流的碎片
- 对于那些CLOSED(具有EndingSequenceNumber)我做了以下的所有碎片:
- 获取特定分片的分片迭代器(shardIteratorType:'TRIM_HORIZON')
- 迭代通过碎片和提取记录直到NextShardIterator成为空
这里的问题是,我只读封闭的碎片,为了获得新的记录,我必须等待(未定量电流的时间)它将被关闭。
看来,最后的碎片通常是OPEN状态(有NO EndingSequenceNumber)。如果我从上面的伪代码中删除对EndingSequenceNumber的检查,那么最终会出现无限循环,因为当我点击最后一个分片时,总是显示NextShardIterator。如果提取的项目为0,我也无法检查,因为碎片中可能存在“间隙”。
在本教程中numChanges为了阻止无限循环http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.LowLevel.Walkthrough.html#Streams.LowLevel.Walkthrough.Step5
什么是在这种情况下,最好的办法是使用?
我还发现了类似的问题:Reading data from dynamodb streams。不幸的是我找不到我的问题的答案。
您是否将DynamoDB流设置为Lambda函数的事件源?从您的描述中,它几乎听起来像您正在尝试自己进行流式轮询。 – garnaat
我的lambda的事件源是Scheduled Event:hourevent(它每小时执行一次)。当lambda执行时,我试图从某个“检查点”读取流并备份新数据。 – bpavlov