Entender el modelo de ejecución de Lambda

Aplicaciones sin servidor con AWS Lambda

Claudio Canales

Senior DevOps Engineer

Ejecución automática

AWS orientado a eventos

  • Lambda ejecuta código cuando ocurre un evento.
  • Ejemplo: subida a S3 -> redimensionar imagen.
  • Distintos triggers, mismo patrón.
Aplicaciones sin servidor con AWS Lambda

Inactivo hasta el trigger

Inactivo -> evento -> ejecutar -> parar

  • Inactivo: no se ejecuta nada.
  • Evento: el handler corre y luego para.

Analogía: luz con sensor de movimiento

  • Como una luz con sensor: inactiva hasta que se activa.
  • El trigger cambia de "off" a "on".
Aplicaciones sin servidor con AWS Lambda

¿Qué es AWS Lambda?

AWS Lambda en breve

  • Servicio de cómputo orientado a eventos.
  • Escala automáticamente según demanda.
  • Pagas solo por el tiempo de ejecución.
Aplicaciones sin servidor con AWS Lambda

Cómo Lambda ejecuta tu código

Flujo de ejecución de Lambda

  • Un origen de eventos activa Lambda.
  • Lambda pasa un payload de evento a tu handler.
  • El handler devuelve un resultado.
Aplicaciones sin servidor con AWS Lambda

Escalar según la demanda

Escalar crea más entornos

  • Más eventos: más invocaciones en paralelo.
  • Lambda crea más entornos.
  • Pueden ocurrir cold starts por entorno nuevo.
Aplicaciones sin servidor con AWS Lambda

La función handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: payload de entrada (JSON).
  • context: metadatos de ejecución.
  • return: salida (o éxito/error).

El handler recibe event y context

Aplicaciones sin servidor con AWS Lambda

El objeto event

Payload de evento de almacenamiento de objetos

Evento S3: bucket + clave de objeto.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Mismo trabajo: extrae lo necesario.

Payload de evento de solicitud HTTP

Evento API: método, ruta, body.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Distintos triggers, distinto JSON.
Aplicaciones sin servidor con AWS Lambda

El objeto context

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Tiempo restante antes del timeout.
  • aws_request_id ID de la solicitud para trazas.
Aplicaciones sin servidor con AWS Lambda

Ejecución sin estado

Reutilización en warm start vs reinicio

  • Cada invocación es independiente.
  • Puede haber reutilización; no garantizada.
  • Guarda el estado fuera de Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # puede reiniciarse
    return counter
Aplicaciones sin servidor con AWS Lambda

Cold starts

Cronología de cold start

  • Nuevo entorno de ejecución.
  • Carga código y dependencias.
  • Ejecuta init y luego el handler.
Aplicaciones sin servidor con AWS Lambda

Warm starts

Cronología de warm start

  • Reutiliza el entorno existente.
  • Omite la mayor parte de la inicialización.
  • El handler se ejecuta antes.
Aplicaciones sin servidor con AWS Lambda

Init, invoke, freeze

Ciclo de vida del entorno de ejecución

  • Init se ejecuta una vez por entorno.
  • El handler en cada invocación.
  • Entre ejecuciones, el entorno puede congelarse.
Aplicaciones sin servidor con AWS Lambda

Optimizar para cold starts

# init (una vez por entorno)
import boto3
s3 = boto3.client('s3')
# handler (cada invocación)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init una vez vs handler por invocación

  • Pon imports y clientes del SDK fuera del handler.
Aplicaciones sin servidor con AWS Lambda

¡Vamos a practicar!

Aplicaciones sin servidor con AWS Lambda

Preparing Video For Download...