Too many items requested for the BatchWriteItem call

TL;DR — BatchWriteItem が1回の呼び出しで受け付けるのは最大 25 件の put/delete アクション(かつ合計 ≤16 MB)です。25 を超えて送ったため、DynamoDB がリクエスト全体を拒否しました。アイテムを25個以下のチャンクに分割し、チャンクごとに1回の BatchWriteItem を発行してください。

意味

ValidationException: 1 validation error detected: Value '<your request>' at 'requestItems' failed to satisfy constraint: Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1]

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchWriteItem call

<your request> の位置には、シリアライズされたリクエスト全体がそのまま返ってきます — 26アイテムのバッチでおよそ 12,000 文字になります。

BatchWriteItem は個々の PutRequest/DeleteRequest アクションを1つ以上のテーブルにまたがってバッチ化しますが、1回の呼び出しは 25 アクション16 MB のデータに固定上限されています。いずれかの制限を超えると、DynamoDB は何も書き込む前にリクエスト全体を拒否します。これは HTTP 400 の ValidationException で、クライアント側の問題であり、バッチのサイズを変更するまでリトライ不可です。

発生する理由

  • 1回の呼び出しで大きなコレクションを書き込み — 数百アイテムの配列をチャンク分割せずそのまま BatchWriteItem に渡している。
  • 境界が誤ったチャンクループ — 件数でバッチ化しているが25を超える制限を使っている、あるいは off-by-one で26個を通してしまっている。
  • アクション数ではなくテーブル数を数えている — 25 の制限はリクエスト内の全テーブルにまたがるアクションの合計であり、テーブルごとではありません。
  • ペイロードが大きすぎる — アクションが ≤25 でも、いずれか1アイテムが 400 KB を超える、または合計リクエストが 16 MB を超えると、バッチ全体が拒否されます。

修正方法

  1. ≤25 アクションのグループにチャンク分割 し、チャンクごとに1回の BatchWriteItem を送信します。
  2. UnprocessedItems を処理しますBatchWriteItem は処理しなかったアイテムを返すことがあります(スロットリング)。それらを指数バックオフで再試行してください。これは有効な25アイテムバッチの中でも通常起こります。
  3. 各バッチを 16 MB 未満に保ちます — 大きなアイテムでは、1回の呼び出しで25個未満にする必要があるかもしれません。
  4. バッファリングしてくれるヘルパーを使います — boto3 の Table.batch_writer() は書き込みをチャンク分割し、未処理アイテムを自動で再送します(Java SDK の Enhanced Client / v1 DynamoDBMapper も未処理アイテムを再試行します)。低レベルクライアントと JavaScript ドキュメントクライアントは、大きすぎるバッチを 分割しません

DynoTable で測る

データを一括ロードする前に、DynoTable でアイテムサイズを抜き取り確認しましょう — ⌘K でサンプルのアイテムを開き、それぞれが 400 KB 未満に収まっていることを確かめます。アイテムサイズ計算ツールはバッチのペイロードサイズを見積もるので、ローダーを走らせる前に安全なチャンクサイズを選べます。

フルインポートを走らせる前に、ステージング(⌘S)で開発用テーブルに対して小さなバッチ書き込みを試しましょう。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行い、Test Connection を実行します。AWS に接続するインストールを参照してください。

出典

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。