19/08/2006
En el mundo del desarrollo en la nube, la agilidad y la eficiencia son cruciales. Las arquitecturas serverless han emergido como una solución poderosa, permitiendo a los desarrolladores centrarse en el código sin preocuparse por la gestión de servidores. Aquí es donde entra en juego AWS SAM (Serverless Application Model), un framework de código abierto que simplifica enormemente la creación y el despliegue de este tipo de aplicaciones en Amazon Web Services. Si eres un desarrollador que trabaja en un entorno Windows y buscas dar tus primeros pasos en el universo serverless de AWS, esta guía te llevará de la mano a través de todo el proceso, desde los conceptos fundamentales hasta el despliegue de tu primera aplicación.

Entendiendo la Infraestructura como Código (IaC)
Antes de sumergirnos en AWS SAM, es fundamental comprender el concepto sobre el que se construye: la Infraestructura como Código o IaC. Este enfoque consiste en gestionar y aprovisionar la infraestructura de TI (servidores, bases de datos, redes, etc.) a través de archivos de configuración legibles por máquina, en lugar de hacerlo mediante configuración manual o herramientas interactivas. Se utilizan ficheros comúnmente escritos en formatos como YAML o JSON, que describen el estado deseado del entorno. La gran ventaja es que permite automatizar, replicar y versionar la infraestructura de la misma manera que se hace con el código de una aplicación, garantizando consistencia y eliminando errores humanos. Herramientas como AWS SAM, Terraform o AWS CDK son pilares de esta práctica.
¿Qué es Exactamente AWS SAM?
AWS Serverless Application Model (SAM) es una extensión de AWS CloudFormation diseñada específicamente para simplificar la forma en que se definen y despliegan los recursos de aplicaciones sin servidor. Proporciona una sintaxis abreviada y más intuitiva para declarar funciones Lambda, APIs de API Gateway, tablas de DynamoDB y los permisos de IAM que los conectan. En esencia, escribes una plantilla SAM más concisa y, durante el despliegue, SAM la transforma en una plantilla de CloudFormation mucho más detallada y completa, que es la que finalmente AWS utiliza para aprovisionar los recursos en tu cuenta.
Los Dos Pilares de AWS SAM
Para funcionar, AWS SAM se apoya en dos componentes principales que trabajan en conjunto:
- La Plantilla SAM (template.yaml): Es el corazón de tu proyecto. Se trata de un archivo YAML donde defines todos los componentes de tu aplicación serverless. Siguiendo una especificación clara, describes tus funciones Lambda, los eventos que las disparan (como una petición HTTP a un endpoint de API Gateway), las bases de datos que utiliza y las políticas de seguridad necesarias. Es tu plano maestro para la infraestructura.
- La AWS SAM CLI: Es tu herramienta de trabajo en la línea de comandos. Una vez instalada en tu sistema Windows, te proporciona un conjunto de comandos para todo el ciclo de vida de tu aplicación. Con la SAM CLI puedes inicializar un nuevo proyecto, construir y empaquetar tu código, probar y depurar tus funciones localmente en un entorno que simula la nube de AWS, y finalmente, desplegar tu aplicación.
Guía Paso a Paso: Tu Primera Aplicación con SAM en Windows
Una vez que tienes la AWS SAM CLI instalada en tu máquina con Windows (proceso que generalmente implica descargar un instalador MSI desde la documentación oficial de AWS y seguir los pasos), estás listo para crear y desplegar. A continuación, te mostramos el flujo de trabajo completo utilizando una plantilla de ejemplo "Hello World".
Paso 1: Inicialización del Proyecto
El primer paso es crear la estructura base de tu proyecto. Abre tu terminal de preferencia (como PowerShell o Command Prompt) y ejecuta el siguiente comando. Este iniciará un asistente interactivo que te guiará en la configuración.

sam initEl asistente te hará una serie de preguntas. Para nuestro ejemplo, seguiremos esta ruta:
- Which template source would you like to use? Elige `1 - AWS Quick Start Templates`.
- Choose an AWS Quick Start application template: Elige `1 - Hello World Example`.
- Use the most popular runtime and package type? Puedes presionar 'Y' para usar Node.js o elegir 'N' para seleccionar otro runtime como Python. Para este ejemplo, asumiremos que seleccionamos Node.js (`-r nodejs18.x` si lo hicieras manualmente).
- Would you like to enable X-Ray tracing? Elige `N` (No) por ahora.
- Would you like to enable monitoring using CloudWatch Application Insights? Elige `N` (No) por ahora.
- Project name [sam-app]: Dale un nombre a tu proyecto, por ejemplo, `mi-primera-app-sam`.
Al finalizar, SAM habrá creado una carpeta con el nombre de tu proyecto y una estructura de archivos similar a esta:
-- mi-primera-app-sam |-- events | `-- event.json |-- hello-world | |-- app.js | |-- package.json | `-- tests | `-- unit | `-- test-handler.js |-- README.md |-- samconfig.toml `-- template.yamlAquí, `template.yaml` es tu plantilla SAM y `hello-world/app.js` contiene el código de tu función Lambda.
Paso 2: Construcción y Empaquetado del Proyecto
Antes de poder desplegar la aplicación, necesitas construirla. Este proceso empaqueta el código de tu aplicación y sus dependencias en un formato listo para ser subido a AWS. Navega dentro del directorio de tu proyecto en la terminal y ejecuta:
cd mi-primera-app-sam sam buildEste comando creará una nueva carpeta llamada `.aws-sam` dentro de tu proyecto. Esta carpeta contiene los artefactos de construcción que se utilizarán en el siguiente paso.
Paso 3: Despliegue de la Aplicación
¡Llegó el momento de llevar tu aplicación a la nube! Para este paso, es indispensable que tengas tus credenciales de AWS configuradas en tu máquina. El comando `sam deploy` se encargará de todo el proceso. Usaremos la bandera `--guided` la primera vez para que nos ayude a configurar el despliegue.
sam deploy --guidedNuevamente, se iniciará un asistente interactivo:
- Stack Name: Es el nombre que tendrá tu pila en AWS CloudFormation. Puedes usar el nombre del proyecto, `mi-primera-app-sam`.
- AWS Region: Especifica la región de AWS donde quieres desplegar, por ejemplo, `us-east-1`.
- Confirm changes before deploy: Presiona `Y` (Sí). Esto te mostrará los cambios que se aplicarán antes de confirmarlos.
- Allow SAM CLI IAM role creation: Presiona `Y`. Permite que SAM cree los roles de IAM necesarios para que tus recursos funcionen.
- Disable rollback: Presiona `N` (No). Es una buena práctica mantener el rollback activado para que, si algo falla, la pila vuelva a su estado anterior.
- HelloWorldFunction may not have authorization defined, Is this okay?: Presiona `Y`. Para este ejemplo simple, la API será pública.
- Save arguments to configuration file: Presiona `Y`. Esto guardará tus respuestas en el archivo `samconfig.toml` para que los futuros despliegues sean más rápidos (solo necesitarás ejecutar `sam deploy`).
Una vez que confirmes todo, la SAM CLI comenzará el proceso de despliegue. Podrás ver en tu terminal cómo se crean los recursos. Al finalizar, te proporcionará una URL de salida (el endpoint de tu API Gateway). ¡Puedes copiar esa URL en tu navegador o usar una herramienta como Postman para probar tu primera aplicación serverless!
Comparativa: AWS SAM vs Otras Herramientas IaC
Es útil entender dónde se posiciona SAM en comparación con otras herramientas populares de Infraestructura como Código en el ecosistema de AWS.

| Característica | AWS SAM | AWS CloudFormation Nativo | AWS CDK |
|---|---|---|---|
| Enfoque | Declarativo (YAML) | Declarativo (YAML/JSON) | Programático (TypeScript, Python, etc.) |
| Sintaxis | Abreviada y optimizada para serverless | Verbosa y muy detallada | Uso de lenguajes de programación estándar |
| Curva de Aprendizaje | Baja-Media | Media-Alta | Depende del conocimiento del lenguaje |
| Ideal para | Desarrollo rápido de aplicaciones serverless | Gestión completa y granular de toda la infraestructura de AWS | Equipos que prefieren definir la infraestructura con lógica de programación |
Preguntas Frecuentes (FAQ)
¿Qué es la especificación de la plantilla de AWS SAM?
Es el conjunto de reglas y la sintaxis abreviada que utilizas en tu archivo `template.yaml`. Es una superclase de la sintaxis de CloudFormation, lo que significa que puedes usar cualquier recurso de CloudFormation dentro de una plantilla SAM, pero también tienes acceso a los tipos de recursos simplificados de SAM como `AWS::Serverless::Function` o `AWS::Serverless::Api`.
¿El comando `sam build` compila mi código?
No exactamente en el sentido tradicional para lenguajes como Node.js o Python. Lo que `sam build` hace es copiar el código fuente y las dependencias a una estructura de directorios preparada para el empaquetado y despliegue. Para lenguajes compilados como Go o Java, sí invocaría el proceso de compilación necesario.
¿Puedo probar mi función Lambda sin desplegarla en AWS?
¡Sí! Una de las características más potentes de la AWS SAM CLI es la capacidad de invocar y probar tus funciones localmente. Puedes usar el comando `sam local invoke` para ejecutar una función una vez, o `sam local start-api` para iniciar un servidor de API local que simula API Gateway, permitiéndote probar tus endpoints desde tu máquina.
¿Qué sucede si elimino la pila desde la consola de CloudFormation?
Si eliminas la pila (Stack) creada por `sam deploy` directamente desde la consola de AWS CloudFormation, todos los recursos que se crearon como parte de esa pila (la función Lambda, el rol de IAM, la API Gateway, etc.) serán eliminados permanentemente de tu cuenta de AWS. Es la forma correcta de limpiar los recursos de un proyecto que ya no necesitas.
Si quieres conocer otros artículos parecidos a Despliegue Serverless con AWS SAM en Windows puedes visitar la categoría Juegos.
