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 をダウンロードしてください。
関連する例
- Node.js ですべてのアイテムを取得 — 明示的なループによる同じ全件読み取り。
- Python ですべてのアイテムを取得 — boto3 のページネーターによる同じ全件読み取り。
- AWS CLI での DynamoDB Scan —
--filter-expressionを使ったスキャン。 - 並列スキャン — Segment/TotalSegments、ワーカー数、そして手を出す価値があるとき。
- DynamoDB の Scan はなぜ遅くて高いのか? — コストモデルと、その回避方法。
- DynamoDB ProvisionedThroughputExceededException — テーブル全体を読むのは、これを踏む古典的な方法です。
- 「The provided starting key is invalid」 — ページネーションループで壊れた再開キー。
参考資料
- Scan — Amazon DynamoDB API Reference
- scan — AWS CLI Command Reference
- Using AWS CLI pagination options — AWS CLI User Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
最終検証日 2026-07-28、上記にリンクした公式 AWS ドキュメントに照らして確認しました。