我想使用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