Arquitectura 03

Event-Driven Serverless
Image Processing

Demo de una arquitectura orientada a eventos en AWS donde el procesamiento de imágenes ocurre de forma asíncrona, desacoplada y sin gestionar servidores.

Qué es esta demo

Una plataforma que recibe imágenes a través de una API REST, las almacena en Amazon S3 y desencadena automáticamente un pipeline serverless que genera tres versiones redimensionadas: 800×600, 400×300 y 150×150. Los metadatos del procesamiento se persisten en DynamoDB y se envía una notificación vía SNS.

Qué se busca demostrar

  • Desacoplamiento mediante SQS como buffer entre el evento de S3 y la ejecución de Lambda.
  • Resiliencia con reintentos automáticos (hasta 3) y Dead-Letter Queue para mensajes fallidos.
  • Escalabilidad sin provisionamiento: Lambda escala automáticamente según la carga de uploads.
  • Contenido privado servido de forma segura mediante URLs firmadas de CloudFront.

Cómo funciona el pipeline

  1. 01 API + S3

    Upload

    El usuario sube la imagen vía API REST. El backend la deposita en el bucket S3 de input bajo el prefijo image-resize/input/.

  2. 02 S3 Event Notification

    Evento disparado

    S3 emite un evento s3:ObjectCreated:* con entrega at-least-once hacia SQS en cuanto el objeto está disponible.

  3. 03 SQS

    Buffer y retry

    SQS actúa como buffer. VisibilityTimeout = 6× el timeout de Lambda. Tras 3 fallos el mensaje pasa a la DLQ.

  4. 04 Lambda (Python + Pillow)

    Procesamiento

    Lambda descarga la imagen en memoria, genera 3 versiones con Pillow y las sube a S3 output bajo resized/.

  5. 05 DynamoDB

    Persistencia

    Lambda registra el resultado en DynamoDB: status, rutas S3 de las versiones, dimensiones originales y timestamp.

  6. 06 SNS + CloudFront

    Notificación y acceso

    SNS notifica el resultado (email/webhook). Las imágenes se sirven vía CloudFront con URLs firmadas (expiran en 24 h).

Servicios AWS involucrados

S3 SQS Lambda DynamoDB SNS CloudFront IAM CloudWatch

Demo interactiva

Sube una imagen y observa cómo aparece procesada en la galería tras unos segundos. Usa el botón Actualizar para refrescar la galería.

Subir imagen

Arrastra una imagen o haz clic para seleccionar

JPEG, PNG, GIF, WebP, SVG · máx. 10 MB

Imágenes procesadas