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 100

El 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 ConditionCheck también cuentan para las 100.

Cómo solucionarlo

  1. 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).
  2. 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.
  3. Reduce el número de acciones — incorpora varias mutaciones a un Item en un solo Update con un UpdateExpression combinado.
  4. Modela el agregado de otra forma para que un solo cambio lógico toque menos Items.
  5. 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 400

Fí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

Errores relacionados

Referencias

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.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.