Demasiadas acciones en una llamada TransactWriteItems
TL;DR: una transacción DynamoDB tiene un límite de 100 acciones. TransactWriteItems (y TransactGetItems) rechazan una solicitud con más de 100 Put/Update/Delete/ConditionCheck acciones. Divida el trabajo en múltiples transacciones o, si no necesita atomicidad de todo o nada, use BatchWriteItem (25 por llamada) en su lugar.
Qué significa
ValidationException: 1 validation error detected: Value '<your request>' at 'transactItems' failed to satisfy constraint: Member must have length less than or equal to 100El servicio devuelve tu petición serializada entera donde aparece <your request> — para una transacción de 101 acciones eso son unos 65.000 caracteres. El hallazgo está en la última frase.
TransactWriteItems agrupa acciones que se confirman todas o se revierten todas juntas, pero una sola transacción puede contener como máximo 100 acciones, y el tamaño agregado de los Items de la transacción no puede superar los 4 MB. Pasa más y DynamoDB rechaza toda la llamada antes de ejecutar. El mensaje a menudo se lee como una restricción sobre la longitud de la lista TransactItems. Es un ValidationException HTTP 400, del lado del cliente, y no es reintentable hasta que la transacción sea más pequeña.
Por qué ocurre
- Agrupar demasiadas escrituras de forma atómica — intentar confirmar 150 puts en una transacción.
- Un bucle que añade acciones sin límite a una única lista
TransactItems. - Un fan-out que supera las 100 — una operación lógica que toca más de 100 Items y se modeló como una sola transacción.
- Contar solo las escrituras — recuerda que las acciones
ConditionChecktambién cuentan para las 100.
Cómo solucionarlo
- Divide en varias transacciones de ≤100 acciones cada una — teniendo en cuenta que cada transacción es atómica de forma independiente (no se revierten juntas).
- Reconsidera si necesitas una transacción en absoluto — si las escrituras no requieren la semántica de todo o nada,
BatchWriteItem(≤25 por llamada) es más barato y más amable con el rendimiento. - Reduce el número de acciones — incorpora varias mutaciones a un Item en un solo
Updatecon unUpdateExpressioncombinado. - Modela el agregado de otra forma para que un solo cambio lógico toque menos Items.
- Vigila el tope de 4 MB de tamaño agregado de los Items junto al límite de 100 acciones — los Items grandes pueden fallar incluso por debajo de las 100 acciones.
Reproducirlo
Una transacción con 101 acciones, una por encima del límite. El rechazo es una ValidationException normal sobre la longitud del array, no un error específico de transacciones:
const actions = Array.from({length: 101}, (_, i) => ({
Put: {TableName: 'orders', Item: {pk: {S: `T#${i}`}, sk: {S: 'META'}}}
}));
await client.send(new TransactWriteItemsCommand({TransactItems: actions}));Salida real:
ValidationException: Member must have length less than or equal to 100
HTTP 400Fíjate en la redacción: DynamoDB rechaza esto como una restricción de longitud sobre el array TransactItems, así que la cadena que recibes no menciona las transacciones en absoluto. Buscar solo el mensaje no te traerá aquí de forma evidente.
Workbench de DynoTable
Antes de confirmar más de 100 escrituras de forma atómica, inspecciona los Items de destino en DynoTable — abre la tabla con ⌘K y confirma que cada clave existe. El área de preparación (⌘S) te permite probar antes una transacción más pequeña.
Construye las actualizaciones multi-Item en el Expression Builder e incorpora las acciones duplicadas sobre una misma clave en un solo Update. Cambia de perfil con ⌘P; consulta Conectar con AWS e Instalación.
Fuentes
- TransactWriteItems — Amazon DynamoDB API Reference (verificado el 2026-07-13)
- Amazon DynamoDB Transactions: How it works (verificado el 2026-07-13)
Errores relacionados
- Transaction request cannot include multiple operations on one item — el mismo Item apuntado dos veces en una transacción.
- TransactionCanceledException — una transacción válida cancelada en la confirmación.
- Too many items requested for the BatchWriteItem call — el límite del lote no transaccional (25).
- Ejemplo de código: TransactWriteItems in Node.js — una transacción de tamaño correcto de la que partir.
- Aprende: DynamoDB transactions · Batch operations
Referencias
- TransactWriteItems — Amazon DynamoDB API Reference
- TransactGetItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- BatchWriteItem — Amazon DynamoDB API Reference
- Service, account, and table quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.
Reproducido el 2026-07-26 contra DynamoDB Local 2.x con AWS SDK for JavaScript v3.1095.0 — la salida de arriba es literal.