AWS CloudFormation y Terraform — ¿no estás seguro de cuál elegir? Este artículo te ayudará a tomar una decisión inteligente.
La computación en la nube ha revolucionado el mundo de DevOps. Ya no es solo una palabra de moda; está aquí para cambiar la forma en que desarrollamos y mantenemos nuestras aplicaciones. Aunque hay innumerables razones para utilizar la computación en la nube en todos los tamaños de negocios, hay una ligera limitación: debes aprovisionar tu infraestructura manualmente.
Debes ir a las consolas de tus proveedores de nube y decirles exactamente lo que deseas. Esto funciona bien para casos de uso pequeños, pero ¿qué pasa si tienes diferentes personas haciendo cambios de configuración en la consola? Podrías terminar con una infraestructura súper complicada que solo se volverá más difícil de mantener. No hay una forma eficiente de colaborar o hacer seguimiento de los cambios en la infraestructura de la nube. Bueno, existe la Infraestructura como Código.
Infraestructura como Código (IaC) es un término de moda en la computación en la nube. Es el proceso de gestionar tu IT IaC. Sí, es correcto. En lugar de ir a la consola y hacer todo manualmente, IaC te permite escribir archivos de configuración para aprovisionar tu infraestructura en la nube. IaC nos brinda beneficios como consistencia, mantenimiento fácil y rápido, y sin margen para errores humanos.
Usando IaC con Amazon Web Services
AWS es el servicio de computación en la nube líder en el mundo, con el doble de cuota de mercado que el siguiente proveedor de nube. Ofrece más de 200 servicios que pueden atender cientos y miles de casos de uso.
Al comenzar a usar IaC con AWS, a menudo reducirás tus opciones a AWS CloudFormation y la herramienta de código abierto Terraform. Si deseas elegir entre los dos, entender la multitud de características que ofrecen ambas herramientas puede ser abrumador. En este artículo, examinaremos las diferencias entre AWS CloudFormation y Terraform para ayudarte a decidir cuál herramienta se adapta mejor a tus necesidades.
Terraform vs. AWS CloudFormation: Diferencias
Modularidad
Cuando se utiliza IaC en grandes organizaciones, la modularidad puede ser un factor significativo en la elección de la herramienta adecuada.
CloudFormation
CloudFormation no tiene soporte nativo para módulos. En su lugar, te permite usar algo llamado pilas anidadas como módulos.
Por ejemplo, puedes crear una plantilla estándar de CloudFormation para aprovisionar un bucket S3 en tu organización. Cuando los usuarios finales deseen crear un bucket S3, pueden usar esta plantilla de CloudFormation como una pila anidada para aprovisionar el bucket S3 estándar.
También existe un servicio de AWS, el Catálogo de Servicios de AWS, que puede ayudar con la modularidad para CloudFormation. El Catálogo de Servicios de AWS está diseñado para organizaciones que necesitan limitar el alcance de los servicios de AWS para cumplir con requisitos de cumplimiento, seguridad, costos o rendimiento. Utiliza plantillas de CloudFormation en el backend.
Veamos rápidamente esto con un ejemplo. Si no se utiliza adecuadamente, los buckets S3 pueden resultar catastróficos para tus datos confidenciales. Tomemos el mismo ejemplo. Quieres tener una forma estándar de usar S3 en tu organización. La primera opción es crear la plantilla de pila anidada, que puede ser utilizada dentro de otras pilas de CloudFormation y es igualmente buena.
Alternativamente, puedes utilizar el Catálogo de Servicios de AWS, que permite a los usuarios usar esta plantilla estándar desde la interfaz de usuario de la consola y especificar algunos parámetros para personalizaciones leves. Esto te permitirá controlar cómo se aprovisiona la infraestructura en tus Cuentas de AWS y prevenir cualquier escenario no deseado.
El uso de pilas anidadas y el Catálogo de Servicios de AWS en CloudFormation también puede admitir configuraciones estándar en organizaciones grandes, aunque puede requerir más configuración manual.
Terraform
Terraform tiene soporte nativo para módulos. Te permite crear configuraciones estándar similares a las de AWS CloudFormation y usarlas en otras configuraciones de Terraform.
Dado que Terraform es una herramienta de código abierto, también puedes encontrar y utilizar algunos módulos de código abierto predefinidos en el Registro de Terraform. También puedes crear tus propios módulos con tus propias configuraciones y alojarlos en un registro de módulos privado.
El soporte nativo de Terraform para módulos proporciona un enfoque sencillo para la modularidad. Sin embargo, la gestión de módulos en un equipo grande puede requerir gobernanza adicional para garantizar un uso adecuado.
Utilizar una pila anidada en CloudFormation no es tan sencillo como usar módulos en Terraform. El factor principal es que pasar datos de una plantilla de CFN a la pila anidada puede ser complicado.
CloudFormation no tiene un repositorio centralizado para compartir plantillas. El Catálogo de Servicios de AWS te permite gestionar este proceso, pero principalmente impone reglas a través de la consola. Aunque las plantillas de CloudFormation pueden encapsular tareas complejas, los usuarios aún tendrían que especificar parámetros al crear recursos.
Por otro lado, Terraform tiene un método establecido para crear, mantener y compartir módulos. Puedes ver los requisitos exactos de los módulos en el Registro de Módulos de Terraform y usarlos fácilmente en tus archivos de Terraform.
Control y Gobernanza sobre la Infraestructura
Si deseas limitar los recursos que tu equipo puede crear en tus Cuentas de AWS, AWS CloudFormation y Terraform te proporcionan los medios para hacerlo.
CloudFormation
CloudFormation proporciona control a través de políticas IAM, lo que te permite gestionar el acceso de usuarios a recursos. Sin embargo, este control es específico de AWS, lo cual puede ser ideal si tu infraestructura está totalmente centrada en AWS.
En nuestro ejemplo de bucket de S3, es posible que desees limitar todos los permisos de “Crear S3” para los usuarios y solo permitirles crear buckets de S3 desde AWS Service Catalog o Nested Stacks.
Terraform
Terraform te permite controlar qué recursos pueden crear tus usuarios utilizando una herramienta de política como código, Sentinel. Sentinel te permitirá hacer cumplir políticas lógicas detalladas para permitir o denegar acciones de usuarios a través de Terraform. Por ejemplo, puedes denegar todos los recursos que creen buckets de S3 y solo permitir a los usuarios crear buckets de S3 desde un módulo estándar.
Gestión de Estado
AWS CloudFormation y Terraform necesitan realizar un seguimiento de los recursos que mantienen.
Terraform
Terraform almacena el estado de tu infraestructura en un archivo de estado. Este archivo se almacena localmente de forma predeterminada; sin embargo, puedes almacenarlo en backends remotos como S3 y permitir que múltiples usuarios realicen cambios en el mismo conjunto de infraestructura.
CloudFormation
CloudFormation realiza el mantenimiento del estado internamente en segundo plano, por lo que los usuarios no necesitan preocuparse por gestionar manualmente un archivo de estado. Esto es beneficioso para aquellos que desean un servicio completamente gestionado.
Tanto AWS CloudFormation como Terraform te permiten verificar qué cambios se realizarán en tu infraestructura. En Terraform, puedes ejecutar el comando “terraform plan” para ver cómo Terraform planea aplicar tus cambios de configuración. En CloudFormation, los usuarios pueden ver esta información a través de Change Sets.
Idioma
Terraform
Terraform utiliza el HashiCorp Configuration Language, HCL, un lenguaje creado por HashiCorp. Es muy similar a JSON, con características y capacidades adicionales integradas.
CloudFormation
Las plantillas de CloudFormation se escriben en formatos YAML o JSON.
Registro y Reversiones
Tanto AWS CloudFormation como Terraform tienen buenas capacidades de registro. En mi experiencia, los errores y problemas han sido bastante claros (en su mayoría).
CloudFormation
Por defecto, CloudFormation revierte todos tus cambios en caso de un cambio fallido en la pila. Esta es una buena característica, pero se puede desactivar para fines de depuración.
Terraform
Terraform no revertirá automáticamente tus cambios si falla. Esto no es un problema, ya que siempre puedes ejecutar el comando Terraform destroy para eliminar la configuración medio provisionada y reiniciar una ejecución de Terraform nuevamente.
Alcance
Terraform
El soporte multi-nube de Terraform te permite implementar infraestructura en AWS, Azure, Google Cloud y otras plataformas y proporciona flexibilidad si trabajas en un entorno multi-nube.
CloudFormation
CloudFormation está estrechamente integrado con AWS, lo que lo convierte en una buena opción para infraestructuras exclusivas de AWS pero limitado para configuraciones multi-nube.
Soporte de funciones
CloudFormation
AWS CloudFormation generalmente recibe actualizaciones primero para nuevos servicios y funciones, dada su estrecha integración con AWS.
Terraform
En casos donde Terraform carece de ciertas características de AWS, puedes integrar stacks de CloudFormation directamente en tu código de Terraform como solución alternativa.
Soporte técnico
CloudFormation
El plan de soporte técnico pagado de AWS también cubre el soporte de CloudFormation.
Terraform
HashiCorp tiene planes pagados para soporte técnico en Terraform también.
Conclusión
Tanto AWS CloudFormation como Terraform son herramientas robustas y completamente desarrolladas, cada una con sus propias ventajas. Las diferencias mencionadas anteriormente pueden ayudarte a determinar qué herramienta se adapta mejor a tus necesidades. Si planeas usar múltiples plataformas en la nube, Terraform ofrece soporte multi-nube, mientras que AWS CloudFormation es una excelente elección para entornos específicos de AWS. En última instancia, ambas herramientas son válidas y pueden gestionar eficazmente la infraestructura como código. La elección correcta depende de tus requisitos, ya sea que te enfoques solo en AWS o trabajes con varios proveedores de servicios en la nube.
Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform