Fundamentos de la arquitectura dirigida por eventos

Aplicaciones sin servidor con AWS Lambda

Claudio Canales

Senior DevOps Engineer

Recap: un modelo mental de Lambda

  • Fuente del evento: lo que dispara Lambda.
  • Payload del evento: JSON que describe lo sucedido.
  • Handler: código que lo procesa.
  • Resultado: respuesta o efecto secundario.
  • Logs: donde depuras problemas.

Flujo de ejecución de Lambda

Aplicaciones sin servidor con AWS Lambda

Los eventos son mensajes

  • Un evento describe algo que ocurrió.
  • Suele ser un JSON con metadatos.
  • Tu handler extrae campos y actúa.

Analogía del timbre para eventos

Aplicaciones sin servidor con AWS Lambda

Fuentes comunes de eventos en AWS

  • Amazon S3 dispara eventos en subidas.
  • Amazon SQS es una cola gestionada que entrega mensajes.
  • DynamoDB Streams produce un registro de cambios.
  • Cada uno genera un payload JSON distinto.

Fuentes de eventos: S3 vs SQS vs Streams

Aplicaciones sin servidor con AWS Lambda

Invocación sincrónica vs asincrónica

  • Sincrónico: quien llama espera el resultado.
  • Asincrónico: recibe acuse; el evento se procesa después.

Analogía sincrónico vs asincrónico

Aplicaciones sin servidor con AWS Lambda

Fundamentos de la arquitectura dirigida por eventos

  • Los eventos llegan como JSON desde servicios de AWS.
  • El modo de invocación cambia dónde aparecen los errores.
  • Los payloads varían: parsea y valida de forma defensiva.
  • Asume reintentos y duplicados.

Puntos clave

Aplicaciones sin servidor con AWS Lambda

Los payloads son contratos

  • Los payloads son contratos: el emisor define la forma.
  • Tu handler debe saber dónde están los campos.
  • Extrae lo necesario, valida, procesa y registra.

Contrato de payload y flujo de parseo

Aplicaciones sin servidor con AWS Lambda

Payload de ejemplo: evento de SQS

Payload de evento SQS anotado

  • Records es el lote.
  • body es una cadena.
  • messageId ayuda a trazar y desduplicar.
Aplicaciones sin servidor con AWS Lambda

Paso a paso: iterar sobre Records

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Lee Records con un valor seguro por defecto.
  • Recorre cada registro y extrae el body.
  • Registra lo importante y devuelve.

Recorrer Records

Aplicaciones sin servidor con AWS Lambda

Paso a paso: parsear JSON del body con seguridad

import json
def lambda_handler(event, context):
    records = event.get("Records") or [{}]
    body = records[0].get("body", "{}")
    payload = json.loads(body)
    oid = payload.get("order_id")
    return json.dumps({"order_id": oid})
  • body es una cadena; parsea con json.loads.
  • Lee con un valor seguro por defecto como "{}".
  • Extrae order_id y devuelve JSON con json.dumps.

Flujo de parseo de body

Aplicaciones sin servidor con AWS Lambda

Checklist de parseo defensivo

Checklist de parseo defensivo

  • Registra la forma del evento una vez al conocer una fuente nueva.
  • Usa .get() y valores por defecto para campos opcionales.
  • Valida campos obligatorios y devuelve errores claros.
  • Maneja lotes vacíos y claves faltantes.
Aplicaciones sin servidor con AWS Lambda

Diseña para reintentos y duplicados

  • Muchas fuentes usan entrega al menos una vez.
  • Puede haber duplicados.
  • Diseña handlers idempotentes para que duplicar el proceso sea correcto.

Reintentos y duplicados

Aplicaciones sin servidor con AWS Lambda

Idempotencia en la práctica

  • Elige una clave única, como messageId u order_id.
  • Guarda cada clave procesada en DynamoDB.
  • Si la clave existe, omite el trabajo.

Flujo de decisión de idempotencia

Aplicaciones sin servidor con AWS Lambda

Puntos clave

  • Los eventos llegan como JSON desde servicios de AWS.
  • El modo de invocación cambia dónde aparecen los errores.
  • Los payloads varían: parsea y valida de forma defensiva.
  • Asume reintentos y duplicados.

Puntos clave

Aplicaciones sin servidor con AWS Lambda

¡Vamos a practicar!

Aplicaciones sin servidor con AWS Lambda

Preparing Video For Download...