AWS CLI で DynamoDB のすべてのアイテムを取得する

AWS CLI はページネーションを隠します。aws dynamodb scan はテーブルが必要とするだけ 1 MB のサービス呼び出しを繰り返し、1 つにまとめた結果を出力します。つまり 10 件を読むコマンドと 1000 万件を読むコマンドは同じコマンドです。

それが便利さであり、罠でもあります。呼び出し回数もメモリも請求額もテーブルに比例して増える一方、コマンドは 1 行のままです。

コード

aws dynamodb scan --table-name 'Music'

まとめられた出力にはテーブル内のすべてのアイテムが入ります。

{
    "Items": [
        {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
    ],
    "Count": 1287,
    "ScannedCount": 1287
}

解説

  • --no-paginate は単一呼び出しのスイッチです — CLI がカーソルを追うのを止めるので、最初の 1 ページだけが得られます。様子を見るには十分ですが、全件読み取りには不適切です(カーソルの仕組み)。
  • --page-size が変えるのは呼び出し回数であって出力ではありません — AWS ははっきりこう述べています。"Changing the page size doesn't affect the output; it affects only the number of API calls that need to be made to generate the output." 大きなページがタイムアウトするときに使うもので、節約のために使うものではありません。読み取りコストはどちらでも同じです。
  • --max-items は出力が止まり NextToken が始まる場所です — その件数のアイテムに加えて、--starting-token 用の再開トークンを出力します。これと --page-size は同じ数字にしてください。値が違うと "can get unexpected results with missing or duplicated items" になると AWS は警告しています。
  • --query は手元のマシンで動きます — 出力された結果に対する JMESPath で、すべてのアイテムが読まれ課金された後に適用されます。DynamoDB が見るのは --projection-expression予約語には --expression-attribute-names も)のほうで、これは請求額ではなくレスポンスを小さくします。--filter-expression も、課金された後にアイテムを捨てます(フィルター付きの Scan)。
  • すべてがバッファリングされ、そしてページャーに出会います — CLI は出力前に全ページを溜め込み、CLI v2 は既定で結果を macOS と Linux では less、Windows では more に流します。大きなテーブルではメモリのスパイクと固まったターミナルが同時に来ます。--no-cli-pager を足すか AWS_PAGER を空文字列にして、--max-items で切り分けてください。
  • 並列スキャンはシェルからも使えます--segment i --total-segments N を付けた N 個のコピーを実行すれば、それぞれが自分のスライスを自動ページネーションします。総コストは同じで、実時間は大幅に短くなります(割に合う場面)。

ビジュアルに行う

1 行のコマンドが高価なコマンドであることもあります。DynamoDB 料金計算ツールは、実行する前にテーブルの全件読み取りに値段を付けます。

DynoTable はターミナルのバッファではなくグリッドでテーブルをページ送りし、そのグリッドの裏にある Scan を aws dynamodb コマンドとしてエクスポートし直せます。DynoTable をダウンロードしてください。

関連する例

参考資料

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

このリクエストをビジュアルに組み立てる

この操作を無料の DynamoDB クエリビルダーで組み立て — キー条件、フィルタ、インデックス、Limit、ソート順、ページネーションループ — 実行可能な SDK v3・CLI・boto3 のプログラムとしてコピーして戻れます。

DynamoDB クエリビルダーを開く

Console なしで DynamoDB を扱う

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

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