Ciclo de vida del evento: reintentos, DLQ y destinos

Aplicaciones sin servidor con AWS Lambda

Claudio Canales

Senior DevOps Engineer

Ciclo de vida del evento de un vistazo

  • Lambda invoca tu handler.
  • El handler o bien tiene éxito o falla.
  • Si falla, los reintentos y el enrutado deciden el siguiente paso.

Flujo del ciclo de vida del evento

Aplicaciones sin servidor con AWS Lambda

Dos formas en que aparecen los fallos

Síncrono

  • El caller espera y recibe un error.

Asíncrono

  • Primero se confirma al caller.
  • Lambda reintenta en segundo plano.
  • El manejo de fallos depende del modo de invocación.

Rutas de fallo síncrono vs asíncrono

Aplicaciones sin servidor con AWS Lambda

Los reintentos son normales

  • Los reintentos suelen ser una función, no un bug.
  • Un fallo transitorio puede tener éxito al siguiente intento.
  • Los reintentos pueden duplicar procesos; tu handler debe contemplarlo.

Analogía de rellamada de reintentos

Aplicaciones sin servidor con AWS Lambda

Reintentos en el tiempo

  • Los reintentos recuperan fallos transitorios.
  • Pero el mismo evento puede ejecutarse varias veces.
  • Idempotencia y buen manejo de errores son esenciales.

Cronología de intentos de reintento

Aplicaciones sin servidor con AWS Lambda

Cuándo los reintentos son peligrosos

  • Reintentos son arriesgados si el trabajo no es idempotente.
  • Ejemplos: cobrar una tarjeta, enviar un email.
  • Usa claves de idempotencia y actualizaciones seguras para que los duplicados no dañen.

Objetivo de idempotencia

Aplicaciones sin servidor con AWS Lambda

DLQ (Dead-Letter Queue)

  • Un lugar seguro para eventos que fallan tras reintentos.
  • A menudo una cola SQS, la cola gestionada de mensajes de AWS.
  • Inspecciona el payload, corrige el problema y reenvía.

Analogía de objetos perdidos de la DLQ

Aplicaciones sin servidor con AWS Lambda

DLQ vs destinos

Analogía de objetos perdidos de la DLQ

  • Captura eventos fallidos tras reintentos.
  • Úsala para investigar.

Diagrama de enrutamiento de destinos

  • Enruta resultados en éxito o fallo.
  • Construye rutas explícitas de éxito y fallo.
Aplicaciones sin servidor con AWS Lambda

Destinos: rutas de éxito y fallo

  • En éxito, envía el resultado a onSuccess.
  • En fallo, envía detalles a onFailure.
  • Esto hace explícito el siguiente paso.

Diagrama de enrutamiento de destinos

Aplicaciones sin servidor con AWS Lambda

Ajustar la política de reintentos

  • Ajusta cuántas veces reintenta Lambda.
  • Limita la antigüedad del evento para evitar datos obsoletos.
  • Más reintentos mejoran fiabilidad pero aumentan duplicados y demora.

Controles de política de reintentos

Aplicaciones sin servidor con AWS Lambda

Antigüedad máxima del evento: fecha de caducidad

  • La antigüedad máxima es una política de caducidad.
  • Si un evento es muy antiguo, procesarlo puede no tener sentido.
  • Compromiso: menos eventos tardíos, conducta más oportuna.

Analogía de caducidad por antigüedad del evento

Aplicaciones sin servidor con AWS Lambda

Observabilidad: dónde mirar

  • Los logs dicen qué pasó.
  • Las métricas dicen con qué frecuencia pasa.
  • Las alarmas te ayudan a detectar picos rápido.

Logs vs métricas

Aplicaciones sin servidor con AWS Lambda

Qué hacer con los eventos fallidos

  • Inspecciona el payload y el error.
  • Corrige la causa raíz.
  • Reenvía el evento y luego monitoriza errores y throughput.

Ciclo de recuperación de eventos fallidos

Aplicaciones sin servidor con AWS Lambda

Conclusiones clave

  • La fiabilidad viene de reintentos, enrutado y observabilidad.
  • Errores síncronos llegan al caller.
  • Errores asíncronos requieren reintentos más DLQ o destinos.
  • Así los fallos siguen visibles.

Diagrama de la fórmula de fiabilidad

Aplicaciones sin servidor con AWS Lambda

¡Vamos a practicar!

Aplicaciones sin servidor con AWS Lambda

Preparing Video For Download...