DynamoDB BatchWriteItem avec l'AWS CLI
aws dynamodb batch-write-item insère ou supprime jusqu'à 25 éléments en une seule commande (16 Mo au total, 400 Ko par élément). Les écritures vont dans --request-items sous forme de carte table → entrées PutRequest/DeleteRequest en DynamoDB JSON — et tu dois vérifier UnprocessedItems dans la sortie, car le lot dans son ensemble n'est pas atomique.
Code
aws dynamodb batch-write-item \
--request-items '{
"Music": [
{"PutRequest": {"Item": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, "AlbumTitle": {"S": "Danzon"}, "Year": {"N": "1994"}}}},
{"PutRequest": {"Item": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}, "AlbumTitle": {"S": "Danzon"}, "Year": {"N": "1994"}}}},
{"DeleteRequest": {"Key": {"Artist": {"S": "Ella Fitzgerald"}, "SongTitle": {"S": "Misty"}}}}
]
}'Quand tout aboutit, la carte des restes de la sortie est vide :
{
"UnprocessedItems": {}
}Explication
--request-items— une carte nom de table → un tableau de jusqu'à 25 entréesPutRequest/DeleteRequest(une commande peut couvrir plusieurs tables). ChaquePutRequest.Itema besoin de la clé primaire complète ; chaqueDeleteRequest.Keyn'est que la clé. Les valeurs sont en DynamoDB JSON — les nombres sont des chaînes sousN.- Pas une transaction — chaque insertion/suppression est atomique individuellement, mais le lot dans son ensemble ne l'est pas. Besoin de tout-ou-rien ? Utilise
transact-write-items. UnprocessedItems— la CLI ne relance pas automatiquement un lot partiel. Si la carte n'est pas vide (la limitation de débit en est la cause habituelle), relance la commande avec cette carte exacte comme--request-items— elle est déjà au bon format — en espaçant les tentatives.- Pas de mises à jour, pas de conditions —
batch-write-itemne peut pas exprimerupdate-item,--condition-expression, ni--return-values; une insertion sur une clé existante remplace silencieusement l'élément entier. Des clés en double, une insertion+suppression sur le même élément, >25 requêtes, un élément >400 Ko, ou >16 Mo au total font chacun que DynamoDB rejette le lot entier. - Astuce : garde la carte dans un fichier et passe
--request-items file://writes.json— mettre 25 éléments entre guillemets shell en ligne est un supplice.
À faire visuellement
Écrire du DynamoDB JSON imbriqué entre guillemets shell est source d'erreurs. Le DynamoDB Expression Builder construit des cartes de valeurs typées et copie des commandes CLI prêtes à l'emploi, et le calculateur de taille d'élément vérifie chaque élément par rapport au plafond de 400 Ko.
Pour ajouter, éditer et supprimer des éléments en masse dans une interface graphique — import CSV/JSON au lieu d'échappement JSON — télécharge DynoTable.
Exemples liés
- DynamoDB BatchWriteItem en Node.js — la même écriture par lot avec l'AWS SDK v3.
- Écriture par lot DynamoDB en Python — le
batch_writer()de boto3 fait la boucle de relance pour toi. - DynamoDB PutItem avec l'AWS CLI — l'écriture d'un seul élément que ceci regroupe en lot.
- Opérations par lot dans DynamoDB — limites, échec partiel, et quand le regroupement en lot est payant.
- "Too many items requested for the BatchWriteItem call" — plus de 25 requêtes d'insertion/suppression dans un seul lot.
- "Provided list of item keys contains duplicates" — deux requêtes touchant la même clé dans un seul lot.
References
- BatchWriteItem — Amazon DynamoDB API Reference
- batch-write-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.