DynamoDB Streams: TrimmedDataAccessException

TL;DR — DynamoDB Streams conserva los registros durante 24 horas; los registros más antiguos se recortan y desaparecen del stream. Esta excepción significa que pediste una posición que ha sido recortada — un checkpoint de más de un día, normalmente de un consumidor que estaba caído o se quedó atrás. No puedes recuperar esos registros del stream: reanuda desde TRIM_HORIZON (el registro superviviente más antiguo) y reconcilia el hueco desde la propia tabla.

Qué significa

TrimmedDataAccessException: The data you are trying to access has been trimmed.

A diferencia de un iterador caducado — donde solo tu identificador de posición quedó obsoleto — los datos recortados se eliminan de verdad. Solicitar un iterador de shard en un SequenceNumber recortado, o leer un shard cuyos registros han envejecido, lanza esto. El stream es un búfer móvil de 24 horas, no un archivo.

Por qué ocurre

  • El consumidor estuvo caído más de 24 horas — una interrupción, un worker en pausa, un trigger deshabilitado olvidado — y su checkpoint apunta ahora a territorio recortado.
  • El retraso de procesamiento superó la retención — el consumidor se ejecuta, pero más lento que la tasa de escritura, y se desvió más de un día.
  • Un checkpoint almacenado obsoleto — reiniciar un consumidor antiguo con un SequenceNumber persistido hace semanas.
  • Leer un shard antiguo de extremo a extremo — recorrer el linaje de shards de un stream de larga duración y solicitar rangos anteriores a la retención.

Cómo solucionarlo

  1. Reanuda desde el registro disponible más antiguo y acepta el hueco:

    const {ShardIterator} = await streams.send(
      new GetShardIteratorCommand({
        StreamArn: streamArn,
        ShardId: shardId,
        ShardIteratorType: 'TRIM_HORIZON' // oldest untrimmed record
      })
    );

    Usa LATEST en su lugar si solo importa la actividad nueva.

  2. Reconcilia la ventana perdida desde la fuente de verdad — la tabla aún tiene el estado actual de cada Item. Un Scan/Query acotado sobre las claves afectadas (o una exportación para tablas grandes) reconstruye lo que los registros recortados te habrían dicho, menos las versiones intermedias.

  3. Alerta sobre el retraso del consumidor — monitoriza la antigüedad de los registros que estás procesando (o la métrica IteratorAge de Lambda) y avisa mucho antes de que se acerque a las 24 horas.

  4. ¿Necesitas más retención? Vierte el stream en un búfer duradero a medida que llegan los registros (p. ej. Kinesis Data Streams mediante patrones del adaptador de Kinesis, o persiste tú mismo los registros procesados) — DynamoDB Streams en sí no se puede extender más allá de las 24 horas.

Reconstruir el estado tras un hueco significa mirar lo que hay realmente en la tabla ahora — la aplicación de escritorio DynoTable convierte esa pasada de reconciliación en una consulta navegable en lugar de un script. ¿Dimensionando la lectura de recuperación? La calculadora de precios de DynamoDB estima el coste en RCU.

Errores relacionados

References

Última verificación el 2026-07-13 con 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.