La solicitud de transacción no puede incluir múltiples operaciones en un artículo
TL;DR: dos acciones en la misma TransactWriteItems solicitud tienen como objetivo el mismo elemento (la misma clave principal). DynamoDB requiere que cada elemento de una transacción sea único, por lo que rechaza toda la llamada antes de ejecutar cualquiera de ellas. Contraiga las acciones duplicadas en una o mueva una de ellas a una escritura separada.
Qué significa
ValidationException: Transaction request cannot include multiple operations on one itemUna petición TransactWriteItems agrupa hasta 100 acciones (Put, Update, Delete, ConditionCheck) que se confirman todas o fallan todas. Una regla estricta de esa API es que ninguna acción puede apuntar al mismo Item — DynamoDB identifica un Item por su clave primaria completa, y cada clave puede aparecer como máximo una vez. Es un ValidationException HTTP 400, detectado antes de que la transacción se ejecute, y no es reintentable tal cual.
Por qué ocurre
- Un
ConditionCheckmás una escritura sobre la misma clave — intentaste afirmar una condición sobre un Item y también hacerle unUpdate/Deleteen la misma transacción. En su lugar, incorpora la condición alConditionExpressionde la escritura. - Dos escrituras a la misma clave — p. ej. un
Puty unUpdatepara el mismo Item, a menudo de un bucle que no deduplica por clave. - Un lote generado con claves duplicadas — un ORM o capa de mapeo emitió la misma clave de partición+ordenación dos veces.
- La misma clave en dos acciones diferentes entre tablas que crees diferentes — el Item se identifica únicamente por
{tabla, PK, SK}; una repetición dentro de la misma tabla lo dispara.
Cómo solucionarlo
- Deduplica por clave primaria antes de construir la transacción — cada
{PK, SK}puede aparecer una vez. - Fusiona un
ConditionChecken la escritura que protege: pon la afirmación en el propioConditionExpressionde ese Item en lugar de añadir una acciónConditionCheckseparada. - Combina dos mutaciones en un solo
Updateusando un únicoUpdateExpression(SET/ADD/REMOVE) en lugar de dos acciones. - Divide la lógica multipaso inevitable en transacciones o escrituras separadas si las operaciones realmente no se pueden expresar como una sola acción.
- Registra las claves primarias de tu array
TransactItems. Las claves duplicadas son fáciles de pasar por alto en lotes generados — imprime cada{PK, SK}antes de enviar.
Revisa primero en DynoTable
Antes de construir una transacción multi-Item, lista las claves de destino en DynoTable — abre la tabla con ⌘K y confirma que cada clave primaria es única en tu lista de acciones. El modo de preparación (⌘S) te deja probar una transacción de un solo Item antes de escalar.
Fusiona las comprobaciones de condición en las escrituras con el Expression Builder. Cambia de perfil con ⌘P; consulta Conectar a AWS e Instalar.
Fuentes
- TransactWriteItems — Amazon DynamoDB API Reference (verificado 2026-07-13)
- Amazon DynamoDB Transactions: How it works (verificado 2026-07-13)
Errores relacionados
- TransactionCanceledException — la transacción se analizó pero una condición o un conflicto la canceló en la confirmación.
- Too many items in a TransactWriteItems call — más de 100 acciones en una transacción.
- ValidationException (descripción general)
- Ejemplo de código: TransactWriteItems in Node.js — una transacción multi-Item válida para adaptar.
- Aprende: DynamoDB transactions
Referencias
- TransactWriteItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.