Hola mundo!
Este es mi primer post, soy Pepe Molinero, DevOps especializado en arquitectura AWS, y espero que lo que os voy a contar os resulte útil. Todo surgió a partir de una experiencia que tuve recientemente y que me hizo replantearme cómo gestiono mi infraestructura.
He escuchado y leído en varios sitios sobre el servicio de AWS SAM y su funcionamiento como IaC que desconocía, ya que solo había trabajado con Terraform y no sabía que se tenía tanto en cuenta. Por lo que me informé sobre AWS SAM o AWS Serverless Application Model, que es un framework especializado para el desarrollo de aplicaciones serverless en AWS. Su principal fortaleza radica en simplificar la definición y despliegue de funciones Lambda, API Gateway y otros servicios relacionados, utilizando plantillas YAML que se traducen en CloudFormation. Esto resulta en un flujo de trabajo optimizado para proyectos enfocados exclusivamente en serverless.
Por otro lado, ya conocía Terraform, que para el que no la haya trabajado mucho, solo comentar que es una herramienta de IaC de carácter agnóstico, es decir, que permite gestionar infraestructuras en múltiples nubes. Con su lenguaje declarativo HCL, Terraform se suele conocer más por su capacidad para manejar infraestructuras complejas, gestionar el estado y facilitar la reutilización mediante módulos y variables. Esta flexibilidad lo ha convertido en la elección más común en entornos empresariales y multi-cloud.
Características Principales y Diferencias Clave
AWS SAM se centra en el ámbito serverless, ofreciendo comandos integrados como sam build
y sam deploy
que facilitan el empaquetado, testeo y despliegue de funciones Lambda. Su sintaxis simplificada y optimizada permite a los desarrolladores concentrarse en la lógica de la aplicación sin preocuparse demasiado por la infraestructura subyacente.
En cambio, Terraform sobresale por su capacidad para gestionar una infraestructura completa y heterogénea. Su manejo de estado, que puede ser local o remoto, permite un control detallado sobre los cambios en la infraestructura, mientras que su soporte para módulos facilita la organización y el mantenimiento en entornos complejos.
Comparativa y Casos de Uso
Si bien AWS SAM está diseñado específicamente para aplicaciones serverless, Terraform se posiciona como la herramienta ideal cuando se requiere gestionar una infraestructura variada o cuando se trabaja en un entorno multi-cloud. Por ejemplo, para proyectos enfocados en funciones Lambda y otros servicios sin servidor, SAM ofrece una experiencia directa y simplificada. En cambio, si además de las funciones serverless se requiere la creación de redes, bases de datos u otros recursos, Terraform brinda la versatilidad necesaria para un manejo integral.
La integración en pipelines de CI/CD también varía según la herramienta. Con SAM, el flujo suele incluir etapas de empaquetado, construcción y despliegue mediante sus comandos propios, aprovechando la potencia de CloudFormation. Terraform, en cambio, se basa en la ejecución de terraform plan
y terraform apply
, gestionando el estado de manera centralizada y permitiendo una mayor flexibilidad al integrarse con diversas herramientas de automatización.
Integración Conjunta: Una Opción Viable
En 2022, AWS anunció oficialmente el soporte para integrar AWS SAM con Terraform, lo que abrió la puerta a una colaboración más estrecha entre ambas herramientas. Esta iniciativa permite a los equipos aprovechar lo mejor de cada una, combinando la especialización de SAM en aplicaciones serverless con la robustez y flexibilidad de Terraform para gestionar la infraestructura general.
Un enfoque común es utilizar Terraform para definir y provisionar la infraestructura base en AWS – como VPCs, roles IAM y buckets S3 – incluyendo una configuración superficial de las funciones Lambda. Paralelamente, AWS SAM se encarga de detallar la configuración serverless, permitiendo definir aspectos específicos como triggers, variables de entorno y configuraciones de API Gateway.
Esta integración requiere delimitar claramente las responsabilidades de cada herramienta para evitar solapamientos o conflictos en la gestión del estado. Además, es importante orquestar el pipeline de CI/CD de forma que, primero, se genere y empaquete la aplicación serverless con SAM, y luego Terraform se encargue de desplegar el paquete en el contexto de la infraestructura predefinida.
En este post he querido compartir mi viaje de descubrimiento en el que, partiendo de mi conocimiento en IaC con Terraform, me adentré en el mundo de AWS SAM y su integración conjunta. Aunque se trata de un tema que ha resonado especialmente en 2022 y 2023, recabar la información y documentarla me ha servido para tener una idea más clara de sus usos.
Si queréis seguir informándoos, os recomiendo echar un vistazo al post de Kasun de Silva en Dev.to, que realizó un excelente análisis comparativo en 2023.
Y para aquellos que deseen hacer una prueba en local, AWS publicó en 2023 una guía bastante clara y con el paso a paso de la implementación usando una Lambda, todo en el entorno local pero perfectamente funcional en la nube. Podéis consultarla aquí.
Top comments (0)