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 を超えると、バッチ全体が拒否されます。
修正方法
- ≤25 アクションのグループにチャンク分割 し、チャンクごとに1回の
BatchWriteItemを送信します。 UnprocessedItemsを処理します —BatchWriteItemは処理しなかったアイテムを返すことがあります(スロットリング)。それらを指数バックオフで再試行してください。これは有効な25アイテムバッチの中でも通常起こります。- 各バッチを 16 MB 未満に保ちます — 大きなアイテムでは、1回の呼び出しで25個未満にする必要があるかもしれません。
- バッファリングしてくれるヘルパーを使います — boto3 の
Table.batch_writer()は書き込みをチャンク分割し、未処理アイテムを自動で再送します(Java SDK の Enhanced Client / v1 DynamoDBMapper も未処理アイテムを再試行します)。低レベルクライアントと JavaScript ドキュメントクライアントは、大きすぎるバッチを 分割しません。
DynoTable で測る
データを一括ロードする前に、DynoTable でアイテムサイズを抜き取り確認しましょう — ⌘K でサンプルのアイテムを開き、それぞれが 400 KB 未満に収まっていることを確かめます。アイテムサイズ計算ツールはバッチのペイロードサイズを見積もるので、ローダーを走らせる前に安全なチャンクサイズを選べます。
フルインポートを走らせる前に、ステージング(⌘S)で開発用テーブルに対して小さなバッチ書き込みを試しましょう。プロファイルの切り替えは ⌘P、設定は Settings → Profiles で行い、Test Connection を実行します。AWS に接続するとインストールを参照してください。
出典
- BatchWriteItem — Amazon DynamoDB API Reference (2026-07-13 時点で検証)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide (2026-07-13 時点で検証)
関連するエラー
- Too many items requested for the BatchGetItem call — 読み取り側の制限(100 アイテム)。
- Provided list of item keys contains duplicates — 1回の BatchWriteItem 内に同じキーが2回。
- ProvisionedThroughputExceededException — UnprocessedItems として現れるスロットリング。
- Code example: BatchWriteItem in Node.js · in Python (boto3) — UnprocessedItems リトライ付きのチャンク書き込み。
- 学習: DynamoDB のバッチ操作
参考資料
- BatchWriteItem — Amazon DynamoDB API Reference
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。