Nesting Levels have exceeded supported limits

TL;DR — DynamoDB はドキュメント型(マップ M と リスト L)を互いに 32 レベルの深さ までネストできます。それより深い構造は ValidationException で拒否されます。データモデルをフラット化する、深いブランチを別のアイテムに分割する、または深すぎるサブツリーを単一のシリアライズされた文字列として格納してください。

意味

ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits: Attributes in the item have nested levels beyond supported limit

(これはこの検証失敗に対して AWS がドキュメント化する表現です。正確な言い回しは操作によってわずかに異なることがあります。)属性値はスカラー、またはそれ自体がさらに値を含む map/list にできます。DynamoDB はそのネストを 32 レベル に制限します。同じ上限が式にも適用されます: ドキュメントパスの最大深度は 32 なので、それより深く参照することもできません。制限はマップとリストの深度を数え、属性の数ではありません。それを超えると HTTP 400 の ValidationException で、検証時に捕捉され、ドキュメントが再構築されるまでリトライ不可です。

発生する理由

  • 深く再帰的なデータ — 32 レベルを超えてマップ内のマップとしてシリアライズされたツリー/グラフ構造(組織図、コメントスレッド、ネストされたカテゴリ)。
  • 汎用シリアライザー — 深度ガードなしに任意のネストされた JSON をそのまま DynamoDB ドキュメント型にマーシャルするコード。
  • 偶発的な自己ネスト — アイテムを繰り返し自身の中にラップするバグ。
  • ネストが決して制限されなかったドキュメントデータベースから 移行されたドキュメント

修正方法

  1. モデルをフラット化します — 深いサブ構造を、ますます深いマップではなく、トップレベル属性や複合キーのレイアウトに引き上げます。
  2. 複数のアイテムに分割します — 深いブランチを同じパーティションキー配下の別々のアイテムとしてモデリングします(シングルテーブルの隣接パターン)。
  3. 深いサブツリーをシリアライズします — 照会する必要がなければ、深すぎる部分を1つの JSON 文字列属性として格納します(DynamoDB に対して不透明なので、その内部深度はもはや数えられません)。
  4. マーシャリング層に 深度ガードを追加し、ドキュメントが黙って制限を超えて成長できないようにします。

DynoTable で測る

ネストした属性は、書き込む前に DynoTable で確認しましょう — ⌘K でアイテムを開き、JSON ビューアでマップ/リストのフィールドを展開すれば、構造がどこまで深いかが分かります。ステージング(⌘S)を使えば put/update をプレビューし、コミット前に深さのエラーを捕まえられます。

深さの確認と合わせてアイテムサイズ計算ツールも使ってください — 深いネストは、アイテムを 400 KB の上限に近づけることも多いからです。Local と AWS を切り替えて試すときは ⌘P を使います。セットアップ: AWS に接続するインストール

出典

関連するエラー

参考資料

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

Console なしで DynamoDB を扱う

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

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