DynamoDB TransactWriteItems con la AWS CLI
aws dynamodb transact-write-items agrupa hasta 100 escrituras en una operación de todo o nada — o se aplican todas las acciones, o ninguna. Las acciones van en --transact-items como un array JSON que mezcla Put, Update, Delete y ConditionCheck, cada una con una condición opcional.
Code
aws dynamodb transact-write-items \
--transact-items '[
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
"UpdateExpression": "SET #upd0 = #upd0 - :one",
"ConditionExpression": "#upd0 >= :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}}
}
},
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
"UpdateExpression": "SET #upd0 = if_not_exists(#upd0, :zero) + :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}, ":zero": {"N": "0"}}
}
}
]'Al tener éxito, el comando no imprime nada y sale con 0. Si alguna condición falla, toda la transacción se cancela:
An error occurred (TransactionCanceledException) when calling the TransactWriteItems
operation: Transaction cancelled, please refer cancellation reasons for specific
reasons [ConditionalCheckFailed, None]Explicación
--transact-items— hasta 100 accionesPut/Update/Delete/ConditionCheck, 4 MB agregados, valores en DynamoDB JSON. Las acciones pueden abarcar tablas (misma cuenta + Región), pero dos acciones no pueden apuntar al mismo item — eso por sí solo cancela la transacción.- Los motivos de cancelación viajan en el mensaje de error en el orden de las acciones — los códigos incluyen
ConditionalCheckFailed,TransactionConflict(otra transacción tocó un item a mitad de vuelo — seguro de volver a ejecutar),ProvisionedThroughputExceededyValidationError;Nonemarca las acciones inocentes. Aquí la condición de la primera actualización (Awards >= 1) falló; la segunda acción estaba bien. ConditionCheck— afirma una condición sobre un item que la transacción no modifica y veta toda la transacción si falla.--client-request-token— pasa un token fijo para hacer las reejecuciones idempotentes durante 10 minutos; volver a ejecutar el comando exacto tras un timeout no puede entonces aplicar las escrituras dos veces.- Coste — las escrituras transaccionales facturan aproximadamente 2× las WCU de las escrituras simples (preparar + confirmar). Para atomicidad sobre un solo item, una escritura condicional es la herramienta más barata.
- Consejo: guarda el array de acciones en un archivo y pásalo con
--transact-items file://transaction.json.
Hazlo visualmente
Las expresiones de condición y de actualización dentro de cada acción son la parte delicada — el DynamoDB Expression Builder las ensambla con los mapas de nombre/valor y copia comandos listos para ejecutar.
Para editar items y revisar las expresiones generadas en una interfaz gráfica — descarga DynoTable.
Ejemplos relacionados
- DynamoDB TransactWriteItems en Node.js — la misma transacción con AWS SDK v3.
- DynamoDB TransactWriteItems en Python — la misma transacción con boto3.
- DynamoDB BatchWriteItem con la AWS CLI — escrituras en masa cuando no necesitas atomicidad.
- Transacciones de DynamoDB — aislamiento, idempotencia y cuándo valen la pena las transacciones.
- DynamoDB TransactionCanceledException — cada código de motivo de cancelación, descifrado.
- "Too many actions in a TransactWriteItems call" — los límites de 100 acciones y 4 MB de la transacción.
- "Transaction request cannot include multiple operations on one item" — una acción por item, por transacción.
References
- TransactWriteItems — Amazon DynamoDB API Reference
- transact-write-items — AWS CLI Command Reference
- Amazon DynamoDB transactions: how it works — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.