Comprender las herramientas de IaC: Cloudformation vs Terraform

AWS CloudFormation y Terraform: ¿no está seguro de cuál elegir? Este artículo te ayudará a tomar una decisión inteligente.

Cloud Computing ha revolucionado el mundo de DevOps. Ya no es solo una palabra de moda; está aquí y está aquí para cambiar la forma en que desarrollamos y mantenemos nuestras aplicaciones. Si bien existen innumerables razones por las que debe usar la computación en la nube para todas las escalas de negocios, existe una pequeña limitación: debe aprovisionar su infraestructura manualmente.

Tienes que ir a las consolas de tus proveedores de nube y decirles exactamente lo que quieres. Esto funciona bien para casos de uso pequeños, pero ¿qué sucede si tiene diferentes personas que realizan cambios de configuración en la consola? Podría terminar con una infraestructura súper complicada que solo se volverá más y más difícil de mantener. No existe una forma eficiente de colaborar o realizar un seguimiento de los cambios en la infraestructura en la nube. Bueno, en realidad lo hay. La infraestructura como código.

La infraestructura como código es un término muy popular en la computación en la nube. Es el proceso de administrar su infraestructura de TI usando código. Si, eso es correcto. En lugar de ir a la consola y hacer todo manualmente; La infraestructura como código, también conocida como IAAC o IAC, le permite escribir archivos de configuración, que luego aprovisionan su infraestructura en la nube. IAC nos brinda beneficios como consistencia, mantenimiento fácil y rápido, y no deja lugar para errores humanos.

Uso de IAC con Amazon Web Services

AWS es el servicio de computación en la nube líder en el mundo, con el doble de participación de mercado que el siguiente proveedor de nube después de él. Hay más de 200 servicios en AWS que pueden atender a cientos y miles de casos de uso.

Al comenzar a utilizar IAC con AWS, a menudo reducirá sus opciones a la Formación en la nube de AWS y la herramienta de código abierto, Terraformar. Al tratar de elegir entre los dos, comprender la multitud de funciones que ofrecen ambas herramientas puede ser bastante abrumador. En este artículo, veremos las diferencias entre AWS CloudFormation y Terraform para ayudarlo a decidir qué herramienta se adapta mejor a sus necesidades.

Terraform frente a AWS CloudFormation: diferencias

Modularidad

Cuando se utiliza IAC en grandes organizaciones, la modularidad puede ser un factor importante para elegir la herramienta adecuada.

Formación de nubes

CloudFormation no tiene soporte nativo para módulos. Le permite usar algo llamado pilas anidadas como módulos.

Por ejemplo, puede tener una configuración estándar de cómo desea aprovisionar un depósito S3 en su organización. Entonces, crea una plantilla estándar de CloudFormation que crea depósitos S3. Ahora, cuando un usuario final desea crear el depósito de S3, puede usar esta plantilla de CloudFormation como una pila anidada y crear un depósito de S3 estándar.

También hay un servicio menos conocido de AWS, el Catálogo de servicios de AWS que puede ayudarlo con la modularidad de su AWS CloudFormation. Service Catalog es un servicio de AWS diseñado específicamente para organizaciones que desean limitar el alcance de los servicios de AWS para cumplir con los requisitos de cumplimiento, seguridad, costo o rendimiento. ¿Y adivina qué? AWS Service Catalog utiliza plantillas de CloudFormation en el backend.

Entendamos esto rápidamente con un ejemplo. Los buckets de S3, si no se usan correctamente, pronto pueden ser catastróficos para sus datos confidenciales. Tomemos el mismo ejemplo, desea tener una forma estándar de cómo desea usar S3 en su organización. La primera opción es crear la plantilla de pila anidada, que se puede usar dentro de otras pilas de CloudFormation y es igualmente buena.

Si no desea que los usuarios tengan que usar esta plantilla estándar como una pila anidada, puede usar AWS Service Catalog. Service Catalog permitirá a los usuarios usar esta plantilla estándar desde la interfaz de usuario de la consola y especificar algunos parámetros, para ligeras personalizaciones. Esto le permitirá controlar cómo se aprovisiona la infraestructura en sus cuentas de AWS y evitar escenarios no deseados.

Terraformar

Terraform tiene soporte nativo para módulos. Le permite crear configuraciones estándar muy parecidas a AWS CloudFormation y usarlas en otras configuraciones de terraformación.

Dado que Terraform es una herramienta de código abierto, también puede encontrar y utilizar algunos módulos de código abierto prefabricados en el Registro de Terraform. También puede crear sus propios módulos con sus propias configuraciones y alojarlos en un registro de módulo privado.

Personalmente, preferiría usar Terraform en lugar de CloudFormation si la modularidad fuera un requisito importante.

Usar una pila anidada en CloudFormation no es tan fácil como usar módulos en Terraform. El factor principal es que pasar datos de una plantilla CFN a la pila anidada puede ser bastante complicado.

No existe un lugar estándar donde se puedan compartir las plantillas de CloudFormation. Tiene el catálogo de servicios de AWS, pero esa es solo una forma de aplicar algunas reglas para crear infraestructura a través de la consola. Estamos todos sobre el código. Al usar el catálogo de servicios, aunque los archivos de CloudFormation encapsulan algunas tareas complicadas, aún debe realizar la tarea manual de ir a la consola y especificar los parámetros para crear su infraestructura.

Terraform, por otro lado, tiene un método establecido para crear, mantener y compartir los módulos. Puede ver los requisitos exactos de los módulos en el Registro de módulos de Terraform y usarlos en sus archivos de terraform muy fácilmente.

Control y gobierno sobre la Infraestructura

Si desea limitar los recursos que su gente puede crear en sus cuentas de AWS: tanto AWS CloudFormation como Terraform le brindan los medios para hacerlo.

Hablemos primero de CloudFormation. CloudFormation en sí mismo no ofrece ningún control sobre cómo se usan las plantillas, pero puede usar las políticas de AWS IAM para permitir que los usuarios de su cuenta de AWS solo usen las plantillas estándar de CloudFormation para la creación de recursos. En nuestro ejemplo de depósito de S3, es posible que desee limitar todos los permisos de «Creación de S3» para los usuarios y solo permitirles crear depósitos de S3 desde AWS Service Catalog o Nested Stacks.

Terraform le permite controlar qué recursos pueden crear sus usuarios usando una política como herramienta de código Centinela. Sentinel le permite aplicar políticas detalladas basadas en lógica para permitir o denegar acciones de usuario a través de Terraform. Por ejemplo, puede denegar todos los recursos que crean depósitos S3 y solo permitir que los usuarios creen depósitos S3 desde un módulo estándar.

Administración del Estado

Tanto AWS CloudFormation como Terraform necesitan realizar un seguimiento de los recursos que mantienen.

Terraform almacena el estado de su infraestructura en un archivo de estado. Este archivo se almacena localmente de forma predeterminada; sin embargo, puede almacenarlo en backends remotos como S3 y hacer que varios usuarios realicen cambios en el mismo conjunto de infraestructura.

CloudFormation no mantiene un archivo de estado, al menos no uno que podamos ver. CloudFormation es un servicio gestionado, por lo que realiza todo el mantenimiento del estado y las comprobaciones en segundo plano.

Tanto AWS CloudFormation como Terraform tienen un medio para que usted compruebe qué cambios se realizarán en su infraestructura. En Terraform, puede ejecutar un comando: «plan de terraform» y cómo Terraform planea aplicar sus cambios de configuración. En CloudFormation, los usuarios pueden ver esta información a través de conjuntos de cambios.

Idioma

Terraform utiliza el lenguaje de configuración de HashiCorp, HCL, un lenguaje creado por HashiCorp. Es muy similar a JSON con características y capacidades integradas adicionales.

Las plantillas de CloudFormation están escritas 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 sencillos (en su mayor parte).

CloudFormation: de forma predeterminada, CloudFormation revierte todos sus cambios en caso de que falle un cambio de pila. Esta es una buena característica y se puede desactivar para fines de depuración.

Terraform: Terraform no revertirá automáticamente sus cambios en caso de que falle. Esto no es un problema, ya que siempre puede ejecutar el comando terraform destroy para eliminar la configuración aprovisionada a medias y reiniciar una ejecución de Terraform nuevamente.

Alcance

Terraform no se limita a la nube de AWS. El factor más importante al elegir entre Terraform y CloudFormation es que Terraform admite otros proveedores y servicios en la nube.

Entonces, si planea usar IAC para varias plataformas en la nube, Terraform es su mejor opción. CloudFormation, aunque es una herramienta poderosa, solo se limita a AWS. Al usar Terraform, puede configurar la infraestructura e implementar su aplicación en múltiples plataformas en la nube, lo que hace que su aplicación esté más disponible y sea más sólida.

Soporte de características

Por lo general, a medida que AWS implementa nuevos servicios y características, CloudFormation se actualizará antes que Terraform, ya que es un servicio de AWS. A partir de ahora, ambas herramientas cubren la mayoría de los servicios y características de estos servicios. Esto puede ser un pequeño inconveniente de usar Terraform, sin embargo, tenemos una solución.

También existe la posibilidad de que cree una pila de CloudFormation dentro de su código de Terraform. Entonces, si usa Terraform y no tiene una función, puede configurar temporalmente una pila de CloudFormation dentro de su código de Terraform.

Apoyo técnico

El plan de soporte técnico pagado de AWS también cubre el soporte de CloudFormation.

HashiCorp también ha pagado planes de soporte técnico en Terraform.

Conclusión

Tanto AWS CloudFormation como Terraform son herramientas poderosas y completamente desarrolladas. Las diferencias anteriores lo ayudarán a tomar una decisión informada para elegir la herramienta según sus requisitos. Como sugerencia personal, si planea usar múltiples plataformas en la nube en el futuro o actualmente está usando varias nubes, debe usar Terraform como una ventanilla única para todas sus necesidades. Si está buscando una herramienta IAC solo para AWS, tanto AWS CloudFormation como Terraform son un juego justo.

Si está interesado en aprender Terraform, consulte estos cursos en línea.