¿Qué es Serverless?
Serverless es un modelo de ejecución en la nube donde el proveedor gestiona completamente la infraestructura subyacente: servidores, sistemas operativos, parches, escalado y alta disponibilidad. El desarrollador solo escribe y despliega código — funciones o aplicaciones — sin preocuparse por dónde o en qué máquina corre.
El nombre puede ser engañoso: los servidores sí existen, simplemente son invisibles para el desarrollador. Lo que desaparece es la responsabilidad de gestionarlos. El modelo de facturación cambia radicalmente: en lugar de pagar por servidores encendidos 24/7, pagas solo por el tiempo de ejecución real de tu código, medido en milisegundos.
AWS Lambda
AWS Lambda es el servicio FaaS de Amazon y el núcleo de la arquitectura serverless en AWS. Permite ejecutar funciones en respuesta a eventos sin aprovisionar ni gestionar servidores. Lambda soporta múltiples runtimes: Python, Node.js, Java, Go, Ruby, .NET y runtimes personalizados via Lambda Layers.
¿Cómo funciona Lambda?
Cuando se dispara un evento que tiene Lambda como destino, AWS asigna un execution environment: un microVM aislado (basado en Firecracker) con el runtime seleccionado, el código de la función y las variables de entorno. Lambda ejecuta el handler, captura el resultado y devuelve la respuesta al invoker.
Si llegan múltiples eventos simultáneamente, Lambda lanza múltiples instancias en paralelo de forma automática — hasta el límite de concurrencia configurado. AWS gestiona completamente este escalado: no hay configuración de auto-scaling groups ni load balancers.
Triggers — ¿qué puede activar Lambda?
Lambda es una arquitectura completamente event-driven: la función solo corre cuando algo la dispara. AWS ofrece integraciones nativas con decenas de servicios como triggers:
ObjectCreated, ObjectRemoved. Útil para procesar archivos al subirse — ETL, resize de imágenes, validaciones.
HTTP/REST/WebSocket requests. Lambda como backend de APIs sin servidor — el patrón más común en producción.
Procesa batches de mensajes o eventos de streaming. Lambda lee del stream o queue en polling automático.
Reacciona a cambios en tablas DynamoDB (INSERT, MODIFY, REMOVE). Ideal para sincronización y auditoría.
Cron expressions para tareas programadas. Reemplaza los cronjobs de servidor con Lambda + EventBridge Rules.
Fan-out: un mensaje en SNS puede disparar múltiples Lambdas en paralelo. Patrón pub/sub sin servidor.
Cold starts — el talón de Aquiles
Un cold start ocurre cuando Lambda no tiene un execution environment disponible y debe crear uno nuevo desde cero: inicializar el microVM, cargar el runtime, descargar el paquete de la función e inicializar las dependencias. Este proceso puede agregar entre 100ms y varios segundos de latencia antes de que el handler siquiera comience a ejecutar.
Primera invocación después de un período sin tráfico, escalado horizontal a más concurrencia que environments activos, o después de un deploy nuevo que invalida los environments existentes.
Runtimes lentos (Java/C# vs Python/Node), paquetes de despliegue grandes, Lambda dentro de VPC (inicialización de ENI), y dependencias pesadas que tardan en importar.
AWS mantiene N environments pre-inicializados y calientes. El cold start desaparece para esas invocaciones. Tiene costo adicional — solo úsalo en funciones críticas de latencia.
Importa solo lo que necesitas (no `import boto3` completo si solo usas S3), usa Lambda Layers para dependencias compartidas y prefiere runtimes rápidos como Python o Node.js.
Amazon API Gateway
API Gateway es el servicio de AWS para crear, publicar y gestionar APIs REST, HTTP y WebSocket a escala. Es el complemento natural de Lambda para exponer funciones como endpoints HTTP. Gestiona autenticación (IAM, Cognito, API Keys), throttling, CORS, transformación de requests/responses y despliegue en stages (dev/staging/prod).
AWS SAM — Serverless Application Model
SAM es el framework open-source de AWS para definir, construir y desplegar aplicaciones serverless como infraestructura como código (IaC). Es una extensión de CloudFormation con sintaxis simplificada para recursos Lambda, API Gateway, DynamoDB y Step Functions. Incluye SAM CLI para desarrollo local.
¿Cuándo usar Serverless?
APIs con tráfico variable o impredecible — ETL ligero activado por eventos (S3, SQS) — Cron jobs y tareas programadas — Webhooks y notificaciones — Procesamiento de archivos al subirse — Microservicios con bajo acoplamiento — MVPs y prototipos que necesitan escalar sin ops.
Procesos de larga duración (>15 min) — Cargas de trabajo de Big Data intensivas (usa EMR o Glue) — Aplicaciones con estado persistente en memoria — APIs con latencia p99 ultra estricta (<50ms) — Workloads con cómputo constante 24/7 (EC2 será más barato).
Serverless vs enfoques tradicionales
| Característica | Serverless (Lambda) | EC2 / VM | Containers (ECS/EKS) |
|---|---|---|---|
| Gestión de infraestructura | Cero | Total | Parcial |
| Escalado automático | Instantáneo | Manual / ASG | Con configuración |
| Modelo de costo | Pay-per-use (ms) | Pay-per-hour (siempre) | Pay-per-hour (por task) |
| Cold starts | Sí (mitigable) | No aplica | Solo al inicio del task |
| Duración máxima por request | 15 minutos | Sin límite | Sin límite práctico |
| Curva de aprendizaje | Baja | Media | Alta (Kubernetes) |
| Ideal para tráfico 24/7 alto | Costoso | Óptimo | Óptimo |
Resumen de comandos esenciales
| # | Operación | Comando |
|---|---|---|
| 01 | Invocar Lambda directo | aws lambda invoke --function-name MiFn out.json |
| 02 | Ver logs recientes | aws logs tail /aws/lambda/MiFn --follow |
| 03 | Actualizar código | aws lambda update-function-code --zip-file f.zip |
| 04 | Listar funciones | aws lambda list-functions |
| 05 | Build SAM | sam build |
| 06 | Test local | sam local invoke NombreFn --event e.json |
| 07 | API local | sam local start-api --port 3000 |
| 08 | Deploy a AWS | sam deploy --guided |