Lambda 関数の DynamoDB ストリームのトラブルシューティングを行うにはどうすればよいですか?

所要時間2分
0

Amazon DynamoDB Streams を AWS Lambda 関数で使用またはトラブルシューティングしたいと考えています。

解決方法

以下は、Lambda 関数で DynamoDB ストリームを使用するにあたりよく寄せられる質問です。

DynamoDB ストリームがトリガーであるのに Lambda 関数がスケーリングされないのはなぜですか?

DynamoDB テーブルで DynamoDB ストリームをオンにすると、Amazon DynamoDB はパーティションごとに 1 つのシャードを関連付けます。たとえば、DynamoDB テーブルに 10 個のパーティションがあり、このテーブルで DynamoDB ストリームを有効にした場合、10 個のシャードがあることになります。

テーブル内のパーティションの数が増えると、ストリーム内のシャードの数も増えます。

DynamoDB テーブルの各パーティションは、最大 3000 の読み取りキャパシティーユニット (RCU)、1000 の書き込みキャパシティーユニット (WCU)、10 GB のデータを処理できます。これらのパラメータのいずれかを超えると、次のようになります。

  • テーブルへの新しいパーティションの追加。
  • DynamoDB ストリームに新しいシャードを作成します。

DynamoDB ストリームからのデータ処理を制御する方法を教えてください。

バッチサイズとバッチウィンドウは、ストリームからのデータ処理を制御するのに役立ちます。

**バッチウィンドウ:**呼び出す前にレコードを待つ時間を設定します。バッチウィンドウでは、DynamoDB ストリームからのデータ処理を制御できます。この動作はストリーム内のデータの可用性に依存することに注意してください。

バッチサイズバッチの最大レコード数を設定します。

Lambda 関数は、次の条件が満たされるまで呼び出されません。

  • ペイロードサイズが 6 MB (同期呼び出し制限) に達しました。
  • バッチウィンドウが最大値 (この例では 60 秒) に達します。
  • バッチサイズが最大値に達しました。

並列化係数はどのようにデータ処理を高速化するのに使用されますか?

並列化係数は、より多くの同時実行を可能にすることで、大量のレコードを迅速に処理します。並列化係数を設定できます (デフォルト: 1 (最大 10) ) にすると、処理されるシャードの数が増えます。並列化係数をオンにするときは、スループットを最大限に高めるために、必ずランダムまたは一意のパーティションキーを使用してください。

計算: 並列化係数 (シャードあたりの同時バッチ数)\ * シャード = 同時実行

BisectBatchonFunction Error 設定とは何ですか?

Lambda 関数が失敗した場合、BisectBatchonFunctionErrorオプションが true に設定されていると、バッチは 2 つに分割されます。分割されたバッチは、問題のあるレコードが見つかるまで再試行されます。リトライは、最大リトライ回数とレコード経過時間の設定に基づいて処理されます。

[再試行オプション]が「0」に設定されている場合、失敗したレコードの再試行は行われません。この場合、DynamoDB Stream は失敗したレコードを破棄するか、デッドレターキュー (DLQ) に送ります (設定されている場合)。

例 1

次の例では、「p」は問題レコードを表し、再試行回数は「0」に設定されています。

バッチレコード:\ [1,2,3p,4,5p]

スプリット 1:\ [3p,4,5p]

スプリット 2:\ [3p]\ [4,5p] 再試行すると\ [3p] は問題のあるレコードとして特定されたので破棄されます。または、設定されていれば DLQ に送信されます。

スプリット 3:\ [4] が処理されます。\ [5p] は破棄されるか、設定されていれば DLQ に送信されます。

例 2

次の例では、「x」は問題レコードを表します。****再試行回数は「\ -1」に設定されます。

挿入されたバッチレコード:\ [1,2,3x,4,5x]

\ [3x,4,5x]

\ [3x,4,5x]

\ [3x,4,5x]

\ [3x,4,5x]

私の DynamoDB ストリームで Lambda の Iteratorage が増えるのはなぜですか?

Lambda の Iteratorage が増加する一般的な理由は次のとおりです。

  • DynamoDB ストリームに不正なレコードがあります。
  • ストリームへの大量の書き込み操作 (PutItem から BatchWriteItem) が行われます。Lambda 関数は、大量の書き込みを処理できなくなる可能性があります。このような場合は、DynamoDB テーブルのプロビジョニング容量を増やして、1000 WCU あたりのパーティション数を増やしてください。プロビジョニングされた容量を増やすと、Lambda の同時実行数が増えます。詳細については、前のセクションの「DynamoDB ストリームがトリガーであるのに Lambda 関数がスケーリングされないのはなぜですか?」を参照してください。
  • 新しいアカウントや新しいテーブルへの移行など、DynamoDB パーティションの数が減少しました。
  • Lambda 関数にスロットリングエラーまたは関数エラーがあります。AWS Lambda は、バッチ全体が正常に処理されるか、レコードの有効期限が切れるまでレコードを再試行します。また、DynamoDB ストリームの保持期間は 24 時間です。データ損失を防ぐには、DLQ を設定するのがベストプラクティスです。DLQ が設定されている場合、AWS Lambda は、リタイアが完了するか、レコードの有効期限が切れた後に、失敗したレコードバッチを DLQ に送信します。
    Lambda 関数のエラーを解決するには、Amazon CloudWatch ログでエラーの詳細を確認してください。
  • Lambda 関数の実行時間が長くなっています。
  • エラー処理と並列化係数を最適化する必要があります。

詳細については、「Lambda IteratorAge メトリクスが増えているのはなぜですか、またそれを減らすにはどうすればよいですか?」を参照してください。

AWS公式
AWS公式更新しました 1年前