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

AWS SAM

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

evergreen#aws#sam#serverless#cloudformation#cli#local-development

¿Qué es?

AWS SAM (Serverless Application Model) es un framework open-source que simplifica la definición, construcción y despliegue de aplicaciones serverless. Extiende AWS CloudFormation con recursos de alto nivel específicamente diseñados para arquitecturas serverless, proporcionando una sintaxis más concisa y expresiva para definir funciones Lambda, APIs, bases de datos y flujos de eventos.

SAM transforma templates YAML declarativos en stacks completos de CloudFormation, generando automáticamente recursos como roles IAM, políticas de seguridad y configuraciones de API Gateway. El framework incluye un CLI robusto que permite desarrollo local, testing y despliegue con un flujo de trabajo optimizado para iteración rápida.

A diferencia de otros frameworks de Infrastructure as Code, SAM está específicamente optimizado para patrones serverless comunes, reduciendo significativamente el boilerplate necesario para configurar aplicaciones basadas en eventos y APIs REST.

Anatomía de un template SAM

Un template SAM típico define recursos serverless con una sintaxis simplificada:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
 
Globals:
  Function:
    Runtime: nodejs20.x
    Timeout: 30
    Environment:
      Variables:
        NODE_ENV: production
 
Parameters:
  Environment:
    Type: String
    Default: dev
    AllowedValues: [dev, staging, prod]
 
Resources:
  # API REST con múltiples endpoints
  UserApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Ref Environment
      Cors:
        AllowMethods: "'GET,POST,PUT,DELETE'"
        AllowHeaders: "'Content-Type,Authorization'"
        AllowOrigin: "'*'"
 
  # Función Lambda con eventos HTTP
  GetUsersFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/handlers/users/
      Handler: get.handler
      Events:
        GetUsers:
          Type: Api
          Properties:
            RestApiId: !Ref UserApi
            Path: /users
            Method: get
 
  # Función con evento DynamoDB Stream
  ProcessUserChanges:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/handlers/streams/
      Handler: userChanges.handler
      Events:
        UserStream:
          Type: DynamoDB
          Properties:
            Stream: !GetAtt UsersTable.StreamArn
            StartingPosition: TRIM_HORIZON
            BatchSize: 10
 
  # Tabla DynamoDB con stream habilitado
  UsersTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: !Sub "${Environment}-users"
      AttributeDefinitions:
        - AttributeName: userId
          AttributeType: S
      KeySchema:
        - AttributeName: userId
          KeyType: HASH
      BillingMode: PAY_PER_REQUEST
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES
 
Outputs:
  ApiEndpoint:
    Description: "API Gateway endpoint URL"
    Value: !Sub "https://${UserApi}.execute-api.${AWS::Region}.amazonaws.com/${Environment}/"
    Export:
      Name: !Sub "${AWS::StackName}-ApiEndpoint"

Flujo de desarrollo con SAM CLI

SAM CLI proporciona un conjunto completo de herramientas para el ciclo de desarrollo:

Inicialización y estructura

# Crear proyecto desde template
sam init --runtime nodejs20.x --name my-serverless-app
 
# Estructura generada
my-serverless-app/
├── template.yaml          # Definición de infraestructura
├── src/
│   └── handlers/          # Código de funciones Lambda
├── events/                # Eventos de prueba
└── tests/                 # Tests unitarios e integración

Desarrollo local

# Construir aplicación
sam build
 
# Invocar función específica localmente
sam local invoke GetUsersFunction --event events/get-users.json
 
# Levantar API Gateway local
sam local start-api --port 3000
 
# Levantar Lambda local para debugging
sam local start-lambda --debug-port 5858

Despliegue y sincronización

# Despliegue guiado (primera vez)
sam deploy --guided
 
# Despliegue rápido
sam deploy
 
# SAM Accelerate para iteración rápida
sam sync --watch --stack-name my-app-dev

SAM Accelerate: iteración ultra-rápida

SAM Accelerate permite sincronización en tiempo real durante el desarrollo, reduciendo el tiempo de feedback de minutos a segundos:

# Modo watch con sync automático
sam sync --watch --stack-name my-app-dev
 
# Sync selectivo por recursos
sam sync --code --stack-name my-app-dev
 
# Sync con hot-reload para función específica
sam sync --watch --code --resource-id GetUsersFunction

Accelerate detecta cambios en el código y actualiza solo las funciones modificadas, evitando redespliegues completos del stack de CloudFormation.

SAM vs CDK: framework de decisión

CriterioSAMCDKRecomendación
Complejidad del proyectoAplicaciones serverless purasInfraestructura mixta/complejaSAM para APIs simples, CDK para arquitecturas híbridas
Experiencia del equipoOps/DevOps con YAMLDevelopers con TypeScript/PythonAlinear con expertise existente
Desarrollo localsam local nativoHerramientas de tercerosSAM para testing local frecuente
Reutilización de códigoTemplates YAMLConstructs programáticosCDK para componentes reutilizables
Tiempo de despliegueRápido con AccelerateMás lento, stacks grandesSAM para iteración rápida
EcosistemaAWS serverless específicoTodo AWS + communityCDK para integración amplia
DebuggingLimitado a serverlessDebugging completoSegún necesidades de debugging

Cuándo elegir SAM

  • Aplicaciones 100% serverless (Lambda + API Gateway + DynamoDB)
  • Equipos con experiencia en YAML/CloudFormation
  • Necesidad de desarrollo local frecuente
  • Proyectos con ciclos de iteración rápidos
  • Arquitecturas event-driven simples

Cuándo elegir CDK

  • Infraestructura mixta (serverless + containers + databases)
  • Equipos con fuerte background en programación
  • Necesidad de lógica compleja en templates
  • Reutilización de componentes entre proyectos
  • Integración con sistemas existentes no-serverless

Patrones avanzados con SAM

Nested stacks para modularidad

Resources:
  AuthStack:
    Type: AWS::Serverless::Application
    Properties:
      Location: ./auth/template.yaml
      Parameters:
        Environment: !Ref Environment
 
  ApiStack:
    Type: AWS::Serverless::Application
    Properties:
      Location: ./api/template.yaml
      Parameters:
        AuthStackName: !Ref AuthStack

Layers para dependencias compartidas

Resources:
  SharedLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: shared-dependencies
      ContentUri: layers/shared/
      CompatibleRuntimes:
        - nodejs20.x
    Metadata:
      BuildMethod: nodejs20.x
 
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Layers:
        - !Ref SharedLayer

¿Por qué importa?

SAM representa el punto óptimo entre simplicidad y potencia para equipos que construyen aplicaciones serverless en AWS. Mientras que CloudFormation puro requiere cientos de líneas para configurar una API simple, SAM reduce significativamente el boilerplate manteniendo toda la potencia del ecosistema AWS.

Para organizaciones que adoptan arquitecturas event-driven, SAM elimina la fricción del desarrollo local — un problema crítico en serverless donde el debugging tradicionalmente requiere despliegues costosos. La capacidad de ejecutar sam local start-api y tener una réplica local completa de la API en segundos cambia fundamentalmente la velocidad de desarrollo.

El framework también resuelve el problema de la «explosión de configuración» típica en proyectos serverless maduros, donde cada función Lambda requiere roles IAM específicos, políticas de seguridad y configuraciones de eventos. SAM genera automáticamente estas configuraciones siguiendo las mejores prácticas de AWS, reduciendo la superficie de error y mejorando la postura de seguridad.

Referencias

  • AWS Serverless Application Model — AWS, 2024. Documentación oficial completa del framework.
  • SAM CLI Command Reference — AWS, 2024. Referencia detallada de todos los comandos del CLI.
  • AWS Serverless Application Repository — AWS, 2024. Repositorio de aplicaciones SAM pre-construidas.
  • AWS SAM Policy Templates — AWS, 2024. Templates de políticas IAM para casos comunes.
  • AWS SAM GitHub Repository — AWS, 2024. Repositorio oficial con especificaciones y ejemplos.
  • Accelerating Serverless Development with AWS SAM Accelerate — AWS Compute Blog, 2021. Análisis técnico de las capacidades de sincronización rápida.

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

  • AWS CloudFormation

    Servicio nativo de AWS para definir y aprovisionar infraestructura como código usando plantillas YAML o JSON, con gestión de estado y rollback automático.

  • CI/CD

    Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.

  • Infrastructure as Code

    Práctica de definir y gestionar infraestructura mediante archivos de configuración versionados en lugar de procesos manuales. Fundamento de la automatización moderna de operaciones.

  • Laboratorio Serverless

    Laboratorio personal de experimentos con arquitecturas serverless: prototipos, patrones y aprendizajes sobre aplicaciones event-driven en AWS.

Conceptos