DynamoDB Streams を使用して、S3 で DynamoDB の増分バックアップを実行したいと考えています。dynamodb ストリームを読み取り、ファイルを S3 に書き込むラムダがあります。既に読み込まれたシャードをマークするために、ExclusiveStartShardId を構成ファイルにログインさせました。
私がすることは:
- ストリームを記述します (ログに記録された ExclusiveStartShardId を使用)
- ストリームのシャードを取得する
- CLOSED (EndingSequenceNumber を持つ)
のすべてのシャードに対して、次のことを行います。
- 特定のシャードのシャード イテレーターを取得します (shardIteratorType: 'TRIM_HORIZON')
- NextShardIterator が null になるまで、シャードを反復処理してレコードをフェッチする
ここでの問題は、閉じられたシャードのみを読み取り、新しいレコードを取得するために、それが閉じられるまで (未定の時間) 待たなければならないことです。
通常、最後のシャードはOPEN状態のようです (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。残念ながら、私の質問に対する答えは見つかりませんでした。