1

DynamoDB Streams を使用して、S3 で DynamoDB の増分バックアップを実行したいと考えています。dynamodb ストリームを読み取り、ファイルを S3 に書き込むラムダがあります。既に読み込まれたシャードをマークするために、ExclusiveStartShardId を構成ファイルにログインさせました。

私がすることは:

  1. ストリームを記述します (ログに記録された ExclusiveStartShardId を使用)
  2. ストリームのシャードを取得する
  3. 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。残念ながら、私の質問に対する答えは見つかりませんでした。

4

1 に答える 1

1

DynamoDB ストリームを Lambda 関数のイベント ソースとしてアタッチしてみませんか? 次に、Lambda がストリームのポーリングと必要に応じた関数の呼び出しを処理します。詳しくはこちらをご覧ください。

于 2016-06-15T12:26:42.473 に答える