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 をダウンロードしてください。
参考資料
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。
2026-07-28 に @aws-sdk/client-dynamodb 3.1095.0 経由で DynamoDB Local 3.3.0 に対して計測・再現しました — 上記の要素数、ネストの境界、セットの往復、エラー文字列は推定ではなくエンジンの出力です。エラー文字列の文言は実サービスでは異なることがあります。