Servicio de cómputo serverless de AWS que ejecuta código en respuesta a eventos sin necesidad de aprovisionar ni administrar servidores, escalando automáticamente desde cero hasta miles de ejecuciones concurrentes.
AWS Lambda es el servicio de Functions as a Service (FaaS) de Amazon que permite ejecutar código sin aprovisionar ni administrar servidores. Subes tu función, defines qué eventos la disparan, y AWS se encarga del aprovisionamiento, escalado automático, alta disponibilidad y monitoreo.
Lambda funciona bajo un modelo de ejecución basado en eventos: cuando ocurre un trigger (request HTTP, mensaje en cola, archivo subido a S3), AWS aprovisiona un entorno de ejecución, ejecuta tu código y cobra únicamente por el tiempo de cómputo utilizado. Este modelo elimina la necesidad de mantener servidores idle y permite escalado instantáneo desde cero hasta miles de ejecuciones concurrentes.
El servicio soporta múltiples runtimes (Python, Node.js, Java, Go, .NET, Ruby) y permite despliegues tanto con archivos ZIP como con imágenes de contenedor, ofreciendo flexibilidad para diferentes arquitecturas y casos de uso.
Lambda opera con un ciclo de vida específico que impacta directamente el rendimiento y costos:
Durante la fase de inicialización, Lambda ejecuta cualquier código fuera del handler — ideal para inicializar conexiones de base de datos, clientes HTTP o configuraciones que pueden reutilizarse entre invocaciones.
import json
import logging
import os
import boto3
from botocore.exceptions import ClientError
from aws_lambda_powertools import Logger, Tracer, Metrics
from aws_lambda_powertools.logging import correlation_paths
from aws_lambda_powertools.metrics import MetricUnit
# Inicialización fuera del handler (reutilizada entre invocaciones)
logger = Logger()
tracer = Tracer()
metrics = Metrics()
# Cliente DynamoDB reutilizable
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['TABLE_NAME'])
@logger.inject_lambda_context(correlation_id_path=correlation_paths.API_GATEWAY_REST)
@tracer.capture_lambda_handler
@metrics.log_metrics(capture_cold_start_metric=True)
def lambda_handler(event, context):
"""
Procesa eventos de API Gateway con manejo de errores estructurado
y observabilidad completa usando Lambda Powertools.
"""
try:
# Extraer datos del evento
body = json.loads(event.get('body', '{}'))
user_id = body.get('user_id')
if not user_id:
logger.error("Missing user_id in request body")
return {
'statusCode': 400,
'body': json.dumps({'error': 'user_id is required'})
}
# Operación de negocio con trazabilidad
with tracer.subsegment("dynamodb_operation"):
response = table.get_item(Key={'user_id': user_id})
if 'Item' not in response:
logger.info(f"User {user_id} not found")
metrics.add_metric(name="UserNotFound", unit=MetricUnit.Count, value=1)
return {
'statusCode': 404,
'body': json.dumps({'error': 'User not found'})
}
# Éxito
user_data = response['Item']
logger.info(f"Successfully retrieved user {user_id}")
metrics.add_metric(name="UserRetrieved", unit=MetricUnit.Count, value=1)
return {
'statusCode': 200,
'body': json.dumps(user_data, default=str)
}
except ClientError as e:
logger.error(f"DynamoDB error: {e.response['Error']['Message']}")
metrics.add_metric(name="DynamoDBError", unit=MetricUnit.Count, value=1)
return {
'statusCode': 500,
'body': json.dumps({'error': 'Internal server error'})
}
except Exception as e:
logger.exception("Unexpected error occurred")
metrics.add_metric(name="UnexpectedError", unit=MetricUnit.Count, value=1)
return {
'statusCode': 500,
'body': json.dumps({'error': 'Internal server error'})
}Lambda Layers permiten compartir código, bibliotecas y configuraciones entre múltiples funciones:
Un Layer puede contener hasta 250 MB (descomprimido) y una función puede usar hasta 5 Layers. Los Layers se montan en /opt durante la ejecución, permitiendo que el runtime acceda a las bibliotecas automáticamente.
Desde 2020, Lambda soporta imágenes de contenedor como alternativa a los archivos ZIP:
| Aspecto | ZIP Package | Container Image |
|---|---|---|
| Tamaño máximo | 250 MB (comprimido) | 10 GB |
| Tiempo de despliegue | Rápido (segundos) | Moderado (minutos) |
| Flexibilidad runtime | Runtimes predefinidos | Runtime completamente customizable |
| Herramientas | SAM, Serverless Framework | Docker, ECR |
| Cold start | Optimizado | Ligeramente mayor |
Las imágenes de contenedor son ideales para funciones con dependencias pesadas (ML models, bibliotecas científicas) o cuando necesitas control total sobre el runtime environment.
Los cold starts impactan la latencia inicial de las funciones. Estrategias de mitigación:
Provisioned Concurrency: Mantiene entornos pre-inicializados
SnapStart (Java únicamente):
Optimizaciones arquitecturales:
AWS Lambda Powertools proporciona utilidades para logging estructurado, métricas y trazabilidad:
Powertools está disponible para Python, TypeScript, Java y .NET, siguiendo las mismas APIs y patrones en todos los runtimes.
Lambda cobra por tres componentes principales:
Requests: $0.20 por millón de requests Duration: $0.0000166667 por GB-segundo de ejecución Provisioned Concurrency: $0.0000041667 por GB-segundo de capacidad reservada
Memory tuning: Más memoria = más CPU = ejecución más rápida
Architecture patterns:
Free tier: 1M requests gratuitos + 400,000 GB-segundos mensuales
Para lógica ejecutada en el edge de CloudFront:
| Característica | Lambda@Edge | CloudFront Functions |
|---|---|---|
| Runtime | Node.js, Python | JavaScript (ES5) |
| Duración máxima | 30s | 1ms |
| Memoria máxima | 3008 MB | 2 MB |
| Triggers | 4 eventos CloudFront | 2 eventos CloudFront |
| Costo | Más caro | Más barato |
| Casos de uso | A/B testing, auth | URL rewrites, headers |
Cada función Lambda requiere un execution role que define qué servicios AWS puede acceder. Principios de seguridad:
Lambda representa un cambio fundamental en el modelo de cómputo: de «servidores que ejecutan aplicaciones» a «funciones que responden a eventos». Para arquitecturas event-driven, este modelo ofrece ventajas significativas: escalado automático, pago por uso real, y eliminación de la gestión de infraestructura.
Sin embargo, Lambda no es una solución universal. Las limitaciones de duración (15 minutos), el modelo de estado stateless, y los cold starts lo hacen inadecuado para aplicaciones de larga duración o con requisitos de latencia extremadamente bajos. La decisión entre Lambda y contenedores tradicionales debe considerar patrones de tráfico, requisitos de rendimiento, y complejidad operacional.
Modelo de computación en la nube donde el proveedor gestiona la infraestructura automáticamente, permitiendo ejecutar código sin aprovisionar ni administrar servidores, pagando solo por el uso real.
Servicio de gestión de identidad y acceso de AWS que controla quién puede hacer qué en tu cuenta, con políticas granulares basadas en el principio de mínimo privilegio.
Patrón arquitectónico donde los componentes se comunican mediante eventos asíncronos, permitiendo sistemas desacoplados, escalables y reactivos.
Diseño de arquitectura para escalar un segundo cerebro personal a un sistema de producción con AWS serverless — desde el prototipo actual hasta casos de uso especializados en legal, investigación y comunidad.
Colección de 13 módulos Terraform publicados en el Terraform Registry para desplegar arquitecturas serverless en AWS, con 12 ejemplos que cubren desde ECS básico hasta CRUD full-stack con DynamoDB y AgentCore con MCP.
Backend serverless de producción para un grafo de conocimiento personal — DynamoDB, Lambda, Bedrock, MCP, Step Functions. La implementación de la arquitectura descrita en el ensayo «Del prototipo a producción».
GitHub App serverless que auto-aprueba pull requests después de que CI pasa, con revisión de código opcional vía Amazon Bedrock. Cinco repositorios: app TypeScript/Probot, módulo Terraform AWS (Lambda + API Gateway + Secrets Manager + SQS DLQ), módulo Terraform GitHub (webhooks), infra de despliegue y repo de pruebas.
Servicio de orquestación serverless de AWS que coordina múltiples servicios en workflows visuales usando Amazon States Language (ASL), con manejo de errores, reintentos y ejecución paralela integrados.
Servicio de colas de mensajes completamente administrado de AWS que desacopla componentes de aplicaciones distribuidas, garantizando la entrega de mensajes con escalabilidad ilimitada.
Servicio de mensajería pub/sub de AWS que distribuye mensajes a múltiples suscriptores simultáneamente, habilitando patrones de fan-out y notificaciones a escala.
Framework open-source de AWS para construir aplicaciones serverless con una sintaxis simplificada de CloudFormation, CLI para desarrollo local y despliegue integrado.
Bus de eventos serverless de AWS que conecta aplicaciones usando eventos, permitiendo arquitecturas desacopladas y event-driven con enrutamiento basado en reglas.
Base de datos NoSQL serverless de AWS con latencia de milisegundos a cualquier escala, ideal para aplicaciones que requieren alto rendimiento y escalabilidad automática.
Servicio managed de AWS para crear, publicar y gestionar APIs REST, HTTP y WebSocket que actúan como puerta de entrada a funciones Lambda y otros servicios backend.