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 acciones Put / 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), ProvisionedThroughputExceeded y ValidationError; None marca 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 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

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.