DynamoDB は配列を保存できますか?

はい。DynamoDB は List(L)型を使って配列を保存します。これは文字列、数値、真偽値、null、マップ、ネストしたリストなど混在した型を保持できる、順序付きのコレクションです。順序を持たない一意な値のコレクションには、String、Number、Binary の各 Set もあります。アイテムが 400 KB 未満に収まる限り、要素数の上限はありません。

リスト(順序付きの配列)

List は順序を保ち、重複と混在型を許します。JSON の配列に直接対応し、最大 32 レベルの深さまでネストできます(マップのリスト、リストのリストなど)。

文書化されたこの上限は、いちばん下の値も数に入れます。文字列を 31 個のネストした L コンテナで包むと問題なく書き込めますが、32 個目のコンテナは失敗します。同じ境界がネストした M にも当てはまります。

ValidationException: Nesting Levels have exceeded supported limits:
Attributes in the item have nested levels beyond supported limit

セット(一意な値)

  • String Set(SS)/ Number Set(NS)/ Binary Set(BS)は、1 つの型の一意な値を順序なしで保持します。
  • セットは空にできません(空にすると ValidationException になります)。

メンバーシップと一意性が重要なら Set を、順序や混在型が重要なら List を使ってください。

セットは並べ替えられ、重複は拒否されます

["zulu", "alpha", "mike"] を String Set として保存すると、["alpha", "mike", "zulu"] として読み戻されます。Number Set は数値順に並びます。["30", "4", "100"]["4", "30", "100"] を返します。同じ値を List に入れれば、書いた順序のまま返ってきます。

メンバーの重複は、静かな重複排除ではなく明確な失敗です。

ValidationException: Input collection contains duplicates

そしてセットは決して空になれないので、最後のメンバーを DELETE すると属性自体が消えます。空のセットが返ってくることを期待するコードには、代わりに属性の欠落が渡ります。長さ 0 ではなく attribute_exists でテストしてください。

実際にいくつの要素が入るのか

「要素数に上限なし」は正確ですが、行動に移しにくい答えです。使える答えは、400 KB を 1 要素あたりのコストで割ったものです。リストは 3 バイトのオーバーヘッドを持ち、そのうえで各要素は自身のサイズに 1 バイトを加えたものになります。

1 文字のパーティションキーの下にある 36 文字の UUID 文字列なら、その線は 11,070 要素 に落ち着きます。11,071 個目を足すと拒否されます。

ValidationException: Item size has exceeded the maximum allowed size

アイテムサイズ計算ツールはこの 2 つのアイテムを 409,599 バイトと 409,636 バイトと算出するので、409,600 バイトの線をエンジンとちょうど同じ位置に引いています。大きいほうを書き込むと 400 書き込みユニットかかります。

さらに詳しく

DynamoDB のデータ型を参照し、ネストした構造は JSON コンバーターで変換してください。リストやセットの属性を編集するには DynoTable をダウンロードしてください。

参考資料

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

2026-07-28 に @aws-sdk/client-dynamodb 3.1095.0 経由で DynamoDB Local 3.3.0 に対して計測・再現しました — 上記の要素数、ネストの境界、セットの往復、エラー文字列は推定ではなくエンジンの出力です。エラー文字列の文言は実サービスでは異なることがあります。

Console なしで DynamoDB を扱う

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

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