← Volver al catálogo

AWS Lambda

En una frase: Ejecuta tu código como funciones por evento, sin servidores y pagando por milisegundo
Documentación oficial: Documentación de AWS Lambda ↗

Qué es

AWS Lambda ejecuta tu código (una función) cuando ocurre un evento: una petición HTTP (HyperText Transfer Protocol: protocolo de la web), un fichero nuevo en S3 (Simple Storage Service), un mensaje en una cola, una programación horaria… AWS arranca, escala y apaga los entornos de ejecución por ti. No pagas por tener nada encendido: pagas por invocación y por la duración, medida en milisegundos.

Conceptos clave

  • Límites principales: hasta 15 minutos por invocación, memoria de 128 MB a 10.240 MB (la CPU (Central Processing Unit: procesador) crece en proporción a la memoria), almacenamiento /tmp de 512 MB a 10.240 MB y carga útil de 6 MB en invocación síncrona (petición y respuesta) y 1 MB en asíncrona.
  • Modelos de invocación:
  • Concurrencia: número de ejecuciones simultáneas (1.000 por región por defecto, ampliable). La concurrencia reservada garantiza y a la vez limita la de una función. La concurrencia aprovisionada mantiene entornos preparados para evitar arranques en frío.
  • Arranque en frío (cold start): latencia extra al crear un entorno nuevo. Se mitiga con concurrencia aprovisionada o con SnapStart (Java, Python y .NET).
  • Versiones y alias: versiones inmutables; un alias puede repartir tráfico entre dos versiones (despliegue canary).
  • Capas (layers): código o dependencias compartidas, hasta 5 por función. También se pueden desplegar imágenes de contenedor de hasta 10 GB.
  • Lambda en una VPC (Virtual Private Cloud): accede a recursos privados (RDS (Relational Database Service), ElastiCache). Para salir a internet necesita un NAT Gateway (Network Address Translation: traducción de direcciones de red); para S3 o DynamoDB, mejor endpoints de VPC.
  • URL (Uniform Resource Locator: dirección web) de función: endpoint HTTPS (HTTP Secure: HTTP cifrado con TLS) propio de una función, sin API Gateway.

Casos de uso típicos

  • Backends de APIs serverless con API Gateway.
  • Procesar ficheros al subirlos a S3 (miniaturas, validación, extracción de metadatos).
  • Consumidores de colas y flujos (SQS, Kinesis, DynamoDB Streams).
  • Tareas programadas con EventBridge Scheduler (sustituye a un cron en una instancia).
  • Automatización de operaciones: reaccionar a eventos de la cuenta (por ejemplo, etiquetar recursos nuevos).

Cuándo NO usarlo

  • Procesos que duran más de 15 minutos: mejor ECS (Elastic Container Service)/Fargate, AWS Batch o dividir el trabajo con Step Functions.
  • Cargas muy estables y continuas con uso alto de CPU: contenedores o instancias pueden salir más baratos.
  • Aplicaciones que necesitan estado local persistente o conexiones de larga duración.
  • Latencia ultrabaja y predecible sin tolerar ningún arranque en frío, salvo que se pague concurrencia aprovisionada.

Comparativa con servicios parecidos

NecesidadLambdaFargate (ECS/EKS)EC2 (Elastic Compute Cloud)
Gestión de servidoresNingunaNinguna (gestionas contenedores)Toda (SO (sistema operativo), parches)
Duración máxima15 minSin límiteSin límite
Modelo de cobroPor invocación y msPor vCPU y memoria por segundoPor instancia encendida
Mejor paraEventos y tráfico variableServicios en contenedoresControl total o software legado

Modelo de precios

Se paga por número de invocaciones y por GB-segundo (memoria configurada por duración, redondeada al milisegundo). La arquitectura Arm (Graviton) es más barata que x86. La concurrencia aprovisionada, el almacenamiento /tmp adicional y la transferencia de datos se cobran aparte. El nivel gratuito mensual (1 millón de peticiones y 400.000 GB-segundo) no caduca.

Seguridad y alta disponibilidad

  • Cada función tiene un rol de ejecución con sus permisos (mínimo privilegio).
  • Una política basada en recurso define quién puede invocarla (S3, SNS, otra cuenta…).
  • Variables de entorno cifradas con KMS (Key Management Service); para secretos, mejor Secrets Manager.
  • Se ejecuta en varias zonas de disponibilidad de forma automática. En una VPC conviene configurar subredes de al menos dos zonas.

Así lo uso en Kopi

Todo el backend de Kopi son funciones Lambda pequeñas en Node.js, de un solo propósito y sin framework: API Gateway resuelve la ruta y cada función es un handler. El código común vive en una capa compartida. Además de las que están detrás de la API (Application Programming Interface: interfaz para que los programas se comuniquen), hay funciones disparadas por eventos: el disparador de registro de Cognito y una función que reacciona a cada objeto nuevo en S3 para mantener DynamoDB sincronizado. Con el tráfico de un proyecto personal, el coste de Lambda cabe en el nivel gratuito.

Trampas de examen

  • "Más de 15 minutos": no es Lambda; piensa en Fargate, Batch o Step Functions.
  • "Evitar arranques en frío": concurrencia aprovisionada o SnapStart, no más memoria (ayuda algo, pero no lo evita).
  • "Una función no debe consumir toda la concurrencia" o "proteger una base de datos": concurrencia reservada.
  • "Lambda en VPC sin salida a internet": falta un NAT Gateway (en subred pública) o un endpoint de VPC.
  • "Muchas conexiones a RDS desde Lambda": RDS Proxy.
  • "Despliegue gradual": alias con tráfico ponderado (con CodeDeploy).

Preguntas de práctica

Preguntas originales escritas para estos apuntes. No son preguntas reales de examen.

Fuentes