What is AWS Sam CLI?

AWS SAM CLI: La Guía Definitiva para Serverless

28/04/2018

Valoración: 4.39 (7356 votos)

El desarrollo de aplicaciones serverless ha revolucionado la forma en que construimos y desplegamos software en la nube. Sin embargo, gestionar todos los recursos, dependencias y configuraciones puede volverse complejo rápidamente. Aquí es donde entra en juego la AWS SAM CLI, una herramienta de línea de comandos diseñada específicamente para simplificar y acelerar todo el ciclo de vida del desarrollo de aplicaciones sin servidor en el ecosistema de Amazon Web Services.

What is the AWS serverless application model (Sam) CLI?
The AWS Serverless Application Model (SAM) CLI is a toolkit designed to simplify the process of building serverless applications on AWS. It provides a command-line interface that allows developers to quickly create, build, test, and deploy serverless applications using AWS resources like AWS Lambda, API Gateway, S3, and more.

Si alguna vez te has sentido abrumado por la configuración manual de funciones Lambda, API Gateways o tablas DynamoDB, esta guía es para ti. Exploraremos en profundidad qué es SAM CLI, cómo instalarla correctamente evitando los problemas más comunes y cómo utilizar sus comandos más potentes para llevar tus proyectos del código local a la producción en la nube de manera eficiente y estructurada.

Índice de Contenido

¿Qué es Exactamente AWS SAM CLI?

La AWS Serverless Application Model (SAM) Command Line Interface (CLI) es una herramienta de código abierto que actúa como tu asistente personal para el desarrollo serverless en AWS. En esencia, es una extensión de CloudFormation, el servicio de Infraestructura como Código (IaC) de AWS, pero con una sintaxis simplificada y comandos especializados para tareas serverless.

Su principal objetivo es automatizar y estandarizar la creación, prueba, empaquetado y despliegue de aplicaciones. En lugar de definir cada recurso de AWS con la verbosa sintaxis de CloudFormation, SAM te permite usar una plantilla abreviada, el famoso archivo template.yaml. En este archivo, defines tus funciones Lambda, APIs, bases de datos y otros recursos de una manera mucho más concisa y legible. Luego, la SAM CLI se encarga de traducir esta plantilla simplificada al formato completo de CloudFormation y gestionar todo el proceso de despliegue por ti.

Instalación de AWS SAM CLI: Superando los Obstáculos

Antes de sumergirnos en los comandos, es crucial tener la herramienta correctamente instalada. El proceso puede variar ligeramente según tu sistema operativo y, como veremos, existen métodos más sencillos que los recomendados oficialmente en algunos casos.

Prerrequisitos Indispensables:

  • Una cuenta de AWS activa.
  • La AWS CLI instalada y configurada con tus credenciales (aws configure).
  • Docker instalado y en ejecución (esencial para pruebas locales y compilaciones en contenedores).

Instalación en Linux

Históricamente, la documentación oficial recomendaba usar Homebrew para instalar SAM CLI en Linux, lo que generaba frustración en muchos desarrolladores. Este método a menudo causaba conflictos con las versiones de Python ya existentes en el sistema. Afortunadamente, existe una forma mucho más directa y limpia.

La mejor manera de instalar SAM CLI en Linux es a través de pip, el gestor de paquetes de Python:

pip3 install aws-sam-cli

Este comando utiliza tu instalación de Python 3 existente y evita las dependencias y posibles problemas que introducía Homebrew. Es simple, rápido y se integra perfectamente en un entorno de desarrollo de Python. A partir de septiembre de 2023, AWS ya no mantiene el instalador de Homebrew, por lo que este método es aún más recomendable.

Instalación en macOS

Para los usuarios de macOS, el proceso de instalación es bastante sencillo. Puedes usar el instalador nativo (.pkg) proporcionado por AWS. Un error común durante la instalación es la falta de permisos de escritura. Si el instalador falla, asegúrate de:

  • Ejecutarlo como administrador.
  • Seleccionar un directorio de instalación para el que tu usuario tenga permisos de escritura.

Aunque Homebrew sigue siendo una opción a través de un repositorio gestionado por la comunidad, el instalador nativo suele ser la ruta más fiable.

Instalación en Windows

Para Windows, AWS proporciona un instalador MSI de 64 bits que guía al usuario a través de un asistente de instalación. Es el método más simple y recomendado, ya que se encarga de agregar el ejecutable de SAM al PATH del sistema automáticamente, permitiéndote ejecutar los comandos sam desde cualquier terminal (CMD, PowerShell, etc.).

Is Sam a good CLI for Linux?
The SAM (Serverless Application Model) CLI can be frustrating to use on Linux, especially during installation. However, I recently learned two things that simplify both installation and operation. I’m sharing these tips in the hope that they’ll be helpful to you as well.

El Poder del Contenedor: `sam build --use-container`

Uno de los mayores desafíos al desarrollar funciones Lambda es asegurarse de que el entorno de compilación local coincida con el entorno de ejecución real en la nube. Las dependencias que tienen componentes compilados nativamente (como algunas librerías de Python o Node.js) pueden funcionar en tu máquina pero fallar en Lambda.

La solución de SAM CLI a este problema es el flag --use-container. Al ejecutar:

sam build --use-container

Le estás diciendo a SAM que no use tu sistema operativo local para compilar el código. En su lugar, descargará una imagen de Docker que replica el entorno de ejecución de AWS Lambda exacto que especificaste en tu template.yaml. Todo el proceso de compilación y empaquetado ocurre dentro de este contenedor.

Ventajas:

  • Consistencia: Elimina el clásico "funciona en mi máquina". Si se compila en el contenedor, funcionará en Lambda.
  • Manejo de Dependencias Nativas: Resuelve sin problemas las dependencias complejas que requieren compilación específica para la arquitectura de Lambda.

Desventajas:

  • Dependencia de Docker: Debes tener Docker instalado y funcionando.
  • Descarga Inicial: La primera vez que lo uses para un runtime específico, descargará una imagen de Docker que puede pesar varios gigabytes. Afortunadamente, esta imagen se guarda en caché para usos futuros.

Comandos Esenciales de SAM CLI que Debes Dominar

Ahora que tenemos todo configurado, exploremos los comandos que usarás en tu día a día para desarrollar aplicaciones serverless.

`sam init` - El Inicio de Todo

Este comando arranca un nuevo proyecto serverless. En lugar de empezar desde un archivo en blanco, `sam init` te presenta un asistente interactivo para generar una estructura de proyecto básica con código de ejemplo y un archivo template.yaml preconfigurado.

sam init

Te preguntará qué plantilla deseas usar (por ejemplo, un "Hello World" con API Gateway) y en qué lenguaje (runtime) quieres trabajar. También puedes especificar el runtime directamente con un flag:

sam init --runtime python3.9 --name mi-primera-app

`sam build` - Preparando el Paquete

Este comando es el responsable de procesar tu template.yaml, descargar las dependencias de tu función Lambda (desde `requirements.txt` para Python o `package.json` para Node.js) y organizar todo en una carpeta de salida (.aws-sam/build) lista para ser empaquetada o desplegada.

sam build

Es un paso intermedio crucial que asegura que todo tu código y sus dependencias están correctamente estructurados. Como vimos antes, puedes combinarlo con --use-container para una compilación más robusta.

`sam local start-api` - Pruebas Locales Rápidas

Quizás uno de los comandos más valiosos de SAM CLI. Te permite ejecutar tu aplicación serverless completa en tu máquina local. Levanta un servidor HTTP que emula a API Gateway y ejecuta tus funciones Lambda en contenedores Docker locales cada vez que se invoca un endpoint.

sam local start-api

Esto te permite probar tus APIs y funciones con herramientas como Postman o `curl` sin tener que desplegar nada en AWS, lo que acelera drásticamente los ciclos de desarrollo y depuración.

What is AWS Sam CLI?
AWS SAM CLI guides initializing, building, deploying, modifying, testing, and deleting Hello World application on AWS Cloud. What is the AWS Serverless Application Model (AWS SAM)? AWS SAM simplifies serverless development, enabling local testing, deployment, and infrastructure as code for AWS Lambda functions, API Gateway, and other resources.

`sam deploy` - El Despliegue a la Nube

Una vez que has construido y probado tu aplicación, este es el comando final para llevarla a producción. `sam deploy` empaqueta tu código, lo sube a un bucket de S3 y luego utiliza CloudFormation para crear o actualizar la pila de recursos en tu cuenta de AWS.

sam deploy --guided

El flag --guided es extremadamente útil la primera vez que despliegas, ya que te guía a través de una serie de preguntas para configurar el despliegue, como el nombre de la pila, la región y si deseas confirmar los cambios antes de aplicarlos. Estas configuraciones se guardan en un archivo `samconfig.toml` para que los despliegues posteriores sean tan simples como ejecutar `sam deploy`.

Tabla Comparativa de Comandos Clave

ComandoPropósito Principal¿Cuándo Usarlo?
sam initInicializar un nuevo proyecto serverless.Al comenzar un proyecto desde cero.
sam buildCompilar el código y las dependencias.Antes de probar localmente o desplegar. Cada vez que cambias el código o las dependencias.
sam local start-apiEmular la API Gateway y las funciones Lambda localmente.Durante el desarrollo para probar y depurar rápidamente sin desplegar en AWS.
sam deployDesplegar la aplicación en la nube de AWS.Cuando la aplicación está lista para ser probada en un entorno de staging o para pasar a producción.

Solución de Problemas Comunes (Troubleshooting)

Incluso con las mejores herramientas, a veces surgen problemas. Aquí tienes cómo solucionar algunos de los errores más frecuentes.

  • Error en Linux: "Cannot connect to the Docker daemon"
    Este error significa que SAM CLI no puede comunicarse con Docker. Asegúrate de que el servicio de Docker esté en ejecución. En algunas distribuciones de Linux, puede que necesites añadir tu usuario al grupo `docker` o incluso reiniciar tu instancia para que los permisos se apliquen correctamente.
  • Error de Shell: "command not found"
    Si tu terminal no reconoce el comando `sam`, significa que el directorio de instalación no está en el PATH de tu sistema. Verifica dónde se instaló el ejecutable y asegúrate de que esa ruta esté incluida en tu variable de entorno PATH.
  • Error en Linux: "version `GLIBC_2.14` not found"
    Este error indica que estás usando una versión de Linux muy antigua cuya librería C (glibc) no es compatible. La solución es actualizar tu sistema operativo a una versión más reciente o seguir las instrucciones de instalación en un entorno compatible como Amazon Linux 2, Ubuntu, etc.

Preguntas Frecuentes (FAQ)

¿Necesito Homebrew para instalar SAM CLI en Linux?

No, y de hecho no es el método recomendado. Usar `pip3 install aws-sam-cli` es una alternativa más limpia, directa y menos propensa a conflictos de dependencias.

¿Qué es un archivo `template.yaml`?

Es el corazón de tu aplicación SAM. Es un archivo de configuración en formato YAML donde defines todos los recursos de tu aplicación (funciones Lambda, APIs, tablas de base de datos, etc.) utilizando la sintaxis simplificada de SAM. Es la plantilla que SAM CLI utiliza para construir y desplegar tu infraestructura.

¿`sam local start-api` cuesta dinero?

No. Este comando se ejecuta completamente en tu máquina local utilizando Docker. No interactúa con la nube de AWS y, por lo tanto, no incurre en ningún costo. Es una herramienta de desarrollo puramente local.

¿Cuál es la diferencia entre AWS CLI y AWS SAM CLI?

La AWS CLI es una herramienta de propósito general para interactuar con casi todos los servicios de AWS. Puedes usarla para gestionar instancias EC2, buckets S3, usuarios de IAM y mucho más. La AWS SAM CLI, en cambio, está altamente especializada en el ciclo de vida de las aplicaciones serverless. Ofrece comandos de alto nivel como `build`, `local` y `deploy` que no existen en la AWS CLI genérica.

Conclusión

La AWS SAM CLI es una herramienta indispensable para cualquier desarrollador que trabaje con tecnología serverless en AWS. Transforma un proceso que podría ser tedioso y propenso a errores en un flujo de trabajo ágil, repetible y eficiente. Al dominar sus comandos principales y comprender cómo resolver los problemas comunes de instalación, estarás equipado para construir, probar y desplegar aplicaciones sin servidor a una velocidad y con una confianza que antes eran difíciles de alcanzar. Adóptala en tu próximo proyecto y experimenta de primera mano cómo puede potenciar tu productividad en la nube.

Si quieres conocer otros artículos parecidos a AWS SAM CLI: La Guía Definitiva para Serverless puedes visitar la categoría Juegos.

Subir