Framework open-source de AWS para construir aplicaciones serverless con una sintaxis simplificada de CloudFormation, CLI para desarrollo local y despliegue integrado.
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.
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"SAM CLI proporciona un conjunto completo de herramientas para el ciclo de desarrollo:
# 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# 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 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-devSAM 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 GetUsersFunctionAccelerate detecta cambios en el código y actualiza solo las funciones modificadas, evitando redespliegues completos del stack de CloudFormation.
| Criterio | SAM | CDK | Recomendación |
|---|---|---|---|
| Complejidad del proyecto | Aplicaciones serverless puras | Infraestructura mixta/compleja | SAM para APIs simples, CDK para arquitecturas híbridas |
| Experiencia del equipo | Ops/DevOps con YAML | Developers con TypeScript/Python | Alinear con expertise existente |
| Desarrollo local | sam local nativo | Herramientas de terceros | SAM para testing local frecuente |
| Reutilización de código | Templates YAML | Constructs programáticos | CDK para componentes reutilizables |
| Tiempo de despliegue | Rápido con Accelerate | Más lento, stacks grandes | SAM para iteración rápida |
| Ecosistema | AWS serverless específico | Todo AWS + community | CDK para integración amplia |
| Debugging | Limitado a serverless | Debugging completo | Según necesidades de debugging |
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 AuthStackResources:
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 SharedLayerSAM 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.
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 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.
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.
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.
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 personal de experimentos con arquitecturas serverless: prototipos, patrones y aprendizajes sobre aplicaciones event-driven en AWS.