Récupérer tous les éléments de DynamoDB avec l'AWS CLI
L'AWS CLI cache la pagination. aws dynamodb scan effectue autant d'appels de service de 1 Mo que la table l'exige et imprime un seul résultat combiné : la commande qui lit dix éléments et celle qui en lit dix millions sont la même commande.
C'est là toute la commodité, et tout le piège. Le nombre d'appels, la mémoire et la facture augmentent tous avec la table, alors que la ligne reste une ligne.
Code
aws dynamodb scan --table-name 'Music'La sortie combinée contient tous les éléments de la table :
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}Explication
--no-paginateest l'interrupteur « un seul appel » — il empêche la CLI de suivre le curseur, donc tu obtiens la première page et rien d'autre. Bien pour jeter un œil, faux pour une lecture complète (comment fonctionne le curseur).--page-sizechange le nombre d'appels, pas la sortie — AWS le dit sans détour : "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." Sers-t'en quand une grande page expire, jamais pour économiser de l'argent. Le coût de lecture est identique dans les deux cas.--max-itemsest l'endroit où la sortie s'arrête et oùNextTokencommence — il imprime ce nombre d'éléments plus un jeton de reprise pour--starting-token. Règle-le sur la même valeur que--page-size: AWS avertit que des valeurs différentes "can get unexpected results with missing or duplicated items".--querys'exécute sur ta machine — c'est du JMESPath sur le résultat imprimé, appliqué après que chaque élément a été lu et facturé.--projection-expression(plus--expression-attribute-namespour les mots réservés) est celle que DynamoDB voit, et elle réduit la réponse, pas la facture. Une--filter-expressionécarte elle aussi les éléments après leur facturation (Scan avec un filtre).- Tout est mis en tampon, puis rencontre un pager — la CLI accumule toutes les pages avant d'imprimer, et la CLI v2 envoie par défaut le résultat dans
lesssur macOS et Linux oumoresur Windows. Sur une grande table, c'est à la fois un pic de mémoire et un terminal bloqué. Ajoute--no-cli-pager, ou metsAWS_PAGERà une chaîne vide, et découpe avec--max-items. - Le scan parallèle marche aussi depuis le shell — lance N copies avec
--segment i --total-segments N, chacune paginant automatiquement sa propre tranche. Même coût total, temps d'exécution bien plus court (quand ça vaut le coup).
Le faire visuellement
Une commande d'une ligne peut être une commande coûteuse. Le calculateur de tarifs DynamoDB met un chiffre sur une lecture complète de ta table avant que tu ne la lances.
DynoTable parcourt la table dans une grille plutôt que dans un tampon de terminal, et exportera le Scan derrière cette grille sous forme de commande aws dynamodb. Télécharge DynoTable.
Exemples liés
- Récupérer tous les éléments en Node.js — la même lecture complète avec une boucle explicite.
- Récupérer tous les éléments en Python — la même lecture complète avec le paginateur de boto3.
- DynamoDB Scan avec l'AWS CLI — scanner avec une
--filter-expression. - Les scans parallèles — Segment/TotalSegments, nombre de workers, et quand s'en soucier.
- Pourquoi mon Scan DynamoDB est-il lent et coûteux ? — le modèle de coût et comment l'éviter.
- DynamoDB ProvisionedThroughputExceededException — lire toute la table est la façon classique de la déclencher.
- "The provided starting key is invalid" — une clé de reprise abîmée dans la boucle de pagination.
Références
- 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
Dernière vérification le 2026-07-28 par rapport à la documentation officielle AWS liée ci-dessus.