Jonatan Matajonmatum.com
conceptosnotasexperimentosensayos
© 2026 Jonatan Mata. All rights reserved.v2.1.1
Conceptos

AWS Lambda

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.

evergreen#aws#lambda#serverless#faas#event-driven#cloud

¿Qué es?

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.

Modelo de ejecución y ciclo de vida

Lambda opera con un ciclo de vida específico que impacta directamente el rendimiento y costos:

  1. Event trigger: Un evento dispara la función (API Gateway, S3, SQS, etc.)
  2. Environment initialization: Lambda aprovisiona un entorno de ejecución o reutiliza uno existente
  3. Runtime startup: Se inicializa el runtime y se carga el código de la función
  4. Handler execution: Se ejecuta el código de tu función
  5. Environment cleanup: El entorno puede mantenerse «caliente» para invocaciones subsecuentes

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.

Ejemplo de código: Handler con mejores prácticas

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 y gestión de dependencias

Lambda Layers permiten compartir código, bibliotecas y configuraciones entre múltiples funciones:

  • Shared libraries: Dependencias comunes (boto3, requests, pandas) empaquetadas una vez
  • Runtime customization: Extensiones de monitoreo, agentes de seguridad
  • Configuration management: Variables de entorno, certificados, archivos de configuración
  • Size optimization: Reducir el tamaño del deployment package de cada función

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.

Soporte para imágenes de contenedor

Desde 2020, Lambda soporta imágenes de contenedor como alternativa a los archivos ZIP:

AspectoZIP PackageContainer Image
Tamaño máximo250 MB (comprimido)10 GB
Tiempo de despliegueRápido (segundos)Moderado (minutos)
Flexibilidad runtimeRuntimes predefinidosRuntime completamente customizable
HerramientasSAM, Serverless FrameworkDocker, ECR
Cold startOptimizadoLigeramente 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.

Mitigación de cold starts

Los cold starts impactan la latencia inicial de las funciones. Estrategias de mitigación:

Provisioned Concurrency: Mantiene entornos pre-inicializados

  • Elimina cold starts completamente
  • Costo: pago por capacidad reservada (incluso sin uso)
  • Ideal para APIs críticas con SLAs estrictos

SnapStart (Java únicamente):

  • Pre-inicializa la JVM y cachea el estado
  • Reduce cold starts de Java de ~10s a ~200ms
  • Sin costo adicional, pero requiere funciones determinísticas

Optimizaciones arquitecturales:

  • Funciones pequeñas y enfocadas
  • Minimizar dependencias en el deployment package
  • Usar Layers para bibliotecas compartidas
  • Implementar warming strategies para funciones críticas

Lambda Powertools y observabilidad

AWS Lambda Powertools proporciona utilidades para logging estructurado, métricas y trazabilidad:

  • Structured logging: Logs en formato JSON con correlation IDs automáticos
  • Distributed tracing: Integración nativa con AWS X-Ray
  • Custom metrics: Métricas de negocio enviadas a CloudWatch
  • Idempotency: Prevención automática de procesamiento duplicado
  • Event source data classes: Parsing tipado de eventos de diferentes servicios

Powertools está disponible para Python, TypeScript, Java y .NET, siguiendo las mismas APIs y patrones en todos los runtimes.

Modelo de costos y optimización

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

Estrategias de optimización de costos

  1. Memory tuning: Más memoria = más CPU = ejecución más rápida

    • Usar AWS Lambda Power Tuning para encontrar el punto óptimo
    • Ejemplo: 512 MB puede ser más barato que 256 MB si reduce duración >50%
  2. Architecture patterns:

    • Batch processing para reducir número de invocaciones
    • Async processing con SQS para cargas no críticas
    • Caching con ElastiCache para datos frecuentemente accedidos
  3. Free tier: 1M requests gratuitos + 400,000 GB-segundos mensuales

Lambda@Edge vs CloudFront Functions

Para lógica ejecutada en el edge de CloudFront:

CaracterísticaLambda@EdgeCloudFront Functions
RuntimeNode.js, PythonJavaScript (ES5)
Duración máxima30s1ms
Memoria máxima3008 MB2 MB
Triggers4 eventos CloudFront2 eventos CloudFront
CostoMás caroMás barato
Casos de usoA/B testing, authURL rewrites, headers

Integración con IAM y seguridad

Cada función Lambda requiere un execution role que define qué servicios AWS puede acceder. Principios de seguridad:

  • Least privilege: Otorgar únicamente los permisos mínimos necesarios
  • Resource-based policies: Controlar qué servicios pueden invocar la función
  • VPC integration: Ejecutar funciones dentro de VPCs para acceso a recursos privados
  • Environment variables encryption: Usar AWS KMS para datos sensibles
  • Secrets management: Integración con AWS Secrets Manager para credenciales

¿Por qué importa?

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.

Referencias

  • AWS Lambda Developer Guide — AWS, 2024. Documentación oficial completa.
  • Lambda Powertools Documentation — AWS, 2024. Utilidades para observabilidad y mejores prácticas.
  • AWS Lambda Pricing Calculator — AWS, 2024. Calculadora oficial de costos.
  • Lambda Power Tuning — Alex Casalboni, 2024. Herramienta open source para optimización de memoria/costo.
  • Serverless Architectures with AWS Lambda — AWS, 2023. Whitepaper sobre patrones arquitecturales.
  • Lambda Container Image Support — AWS, 2020. Anuncio y guía de imágenes de contenedor.

Contenido relacionado

  • Serverless

    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.

  • AWS IAM

    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.

  • Arquitectura Orientada a Eventos

    Patrón arquitectónico donde los componentes se comunican mediante eventos asíncronos, permitiendo sistemas desacoplados, escalables y reactivos.

  • De prototipo a producción: un segundo cerebro serverless en AWS

    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.

  • Módulos Terraform para AWS Serverless

    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.

  • Segundo Cerebro Serverless

    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».

  • PR Auto-Approver

    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.

  • AWS Step Functions

    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.

  • AWS SQS

    Servicio de colas de mensajes completamente administrado de AWS que desacopla componentes de aplicaciones distribuidas, garantizando la entrega de mensajes con escalabilidad ilimitada.

  • AWS SNS

    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.

  • AWS SAM

    Framework open-source de AWS para construir aplicaciones serverless con una sintaxis simplificada de CloudFormation, CLI para desarrollo local y despliegue integrado.

  • AWS EventBridge

    Bus de eventos serverless de AWS que conecta aplicaciones usando eventos, permitiendo arquitecturas desacopladas y event-driven con enrutamiento basado en reglas.

  • AWS DynamoDB

    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.

  • AWS API Gateway

    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.

Conceptos