Resumen
HashiCorp Terraform y Red Hat® Ansible® Automation Platform son productos de automatización con raíces open source que adoptan un enfoque de infraestructura como código (IaC) para automatizar los entornos de TI.
La evaluación de estas soluciones para su empresa no es una simple comparación, ya que no existe una forma "correcta" de automatizar ni una herramienta de automatización para usar, al igual que no existe una única forma de resolver un problema. Lo que su empresa necesita es completamente diferente de lo que requiere otra empresa en su mismo sector.
Términos de automatización que debe conocer
Mientras investigaba soluciones de automatización, seguramente ha visto muchos términos utilizados para describir las diferencias clave y las funciones de los productos. Definamos algunos de los más comunes y exploremos cómo se relacionan entre sí y con Ansible y Terraform.
Coordinación es la ejecución ordenada de varios flujos de trabajo. En cada flujo de trabajo se ejecuta una o más tareas. Se los coordina en conjunto para automatizar la configuración y la gestión de sistemas, aplicaciones y servicios complejos. Esta coordinación generalmente sigue reglas preestablecidas que se definen en una política. También se pueden coordinar varias soluciones de automatización. Estas, a su vez, ejecutan los flujos de trabajo de automatización.
Tanto Ansible como Terraform pueden actuar como coordinadores, ya que pueden invocar múltiples flujos de trabajo de automatización en secuencia siguiendo políticas específicas. Ansible tiene módulos integrados para conectarse y administrar otras herramientas de automatización (incluido Terraform). Como resultado, puede estandarizar su enfoque de la automatización en todo su entorno de TI, con Ansible como el lenguaje común de alto nivel para todos los equipos.
Implementación es el proceso de crear y preparar infraestructura de TI para aplicaciones y servicios.
Tanto Ansible como Terraform pueden implementar (y quitar) la infraestructura de TI. Ansible también puede implementar aplicaciones y servicios.
La gestión de la configuración es el proceso de definir y conservar la configuración de la infraestructura, las aplicaciones y los servicios.
Como muchas otras soluciones de automatización, Ansible y Terraform pueden definir configuraciones y aplicarlas a varios objetivos de infraestructura. Sin embargo, su enfoque de la gestión de la configuración es diferente. Terraform utiliza un enfoque llamado programación declarativa, en el que se intenta conservar la configuración de una infraestructura de TI mediante la definición de un estado deseado. Ansible utiliza un enfoque de programación procedimental (o imperativa), en el que se intenta conservar la configuración de una infraestructura de TI mediante la definición de los pasos para alcanzar un estado deseado. Cada proceso se detalla a continuación.
Un enfoque de infraestructura como código (IaC) define e implementa la infraestructura con código que se ejecutará automáticamente, en lugar de utilizar procesos manuales. Si las empresas tratan a la infraestructura de TI como código, pueden automatizar las tareas de gestión y, por lo tanto, beneficiarse de las prácticas recomendadas de desarrollo de software y reducir los errores humanos.
Tanto Ansible como Terraform son herramientas de IaC, aunque, como se mencionó, la programación que utiliza cada solución es diferente.
La programación declarativa es un método de escribir código para describir el resultado deseado del programa, en lugar de detallar cómo hacerlo. Se centra en el estado final, en lugar de los comandos y pasos específicos necesarios para llegar allí.
Terraform usa el lenguaje de configuración HashiCorp (HCL) como su lenguaje de automatización y un enfoque de programación declarativa. Esto significa que la secuencia de comandos que Terraform debe ejecutar para lograr los cambios de configuración requeridos no son visibles ni conocidos por el usuario final.
La programación procedimental o imperativa es un método de escritura de código para proporcionar a la computadora una lista de instrucciones (una guía paso a paso) para completar una tarea. Se centra en el proceso, en lugar del estado final. Para su lenguaje de automatización, Ansible usa YAML, un lenguaje de serialización de datos comprensible para las personas. La sintaxis YAML se interpreta y ejecuta de manera procedimental, lo que significa que el flujo de trabajo de automatización se ejecuta en la secuencia en la que se escribió.
La programación que utiliza Ansible puede ser tanto declarativa como procedimental; muchos módulos funcionan de forma declarativa, mientras que otros módulos prefieren un enfoque de programación procedimental. Además, algunas creaciones en el lenguaje de Ansible, como condicionales y bucles, permiten a los usuarios definir una lógica procedimental. Esta combinación le ofrece la flexibilidad de concentrarse en lo que necesita hacer, en lugar de cumplir estrictamente con un paradigma.
La inmutabilidad de la configuración significa que la configuración (de una infraestructura o una aplicación) no se puede cambiar. Por ejemplo, la implementación de la versión más reciente de una aplicación requiere que se elimine y reemplace la versión anterior, en lugar de modificarla y actualizarla. Los recursos se destruyen y se recrean automáticamente.
Terraform utiliza un enfoque de infraestructura inmutable, lo cual ayuda a los usuarios a dar los primeros pasos rápidamente, ya que pueden activar fácilmente los recursos, probar algo y luego eliminarlo. Sin embargo, puede volverse compleja y difícil de administrar según el tamaño de la infraestructura. Aunque Ansible está diseñado asumiendo la mutabilidad de la configuración, algunos flujos de trabajo de automatización pueden diseñarse para adoptar el enfoque de inmutabilidad.
La mutabilidad de la configuración significa que la configuración (de una infraestructura o una aplicación) se puede cambiar. Por ejemplo, las versiones más recientes de las aplicaciones se pueden aplicar actualizando o modificando el recurso existente en lugar de eliminarlo o reemplazarlo.
Ansible está diseñado asumiendo la mutabilidad de la configuración. La ventaja de este enfoque es que los flujos de trabajo de automatización son fáciles de entender y de solucionar. Sin embargo, en determinados casos, puede resultar complicado quitar recursos sin conocer el orden correcto de las operaciones.
El desajuste en la configuración ocurre cuando una infraestructura cambia debido a modificaciones manuales, no aprobadas o no supervisadas a lo largo del tiempo, y esas modificaciones no se registran ni se rastrean de manera sistemática. Estos cambios suelen responder a emergencias o complejidad excesiva, factores que pueden disuadir a los empleados de seguir el proceso establecido. Como resultado, es frecuente que las grandes empresas tengan desajustes en la configuración.
Un enfoque de IaC ayuda con el desajuste, pero es fundamental implementar gestión adicional. Ansible lo ayuda a combatir estos desajustes con playbooks de Ansible (flujos de trabajo de automatización) que se pueden configurar para detectar desajustes. Cuando esto sucede, envía una notificación a la persona adecuada que realice la modificación requerida y regrese el sistema a su estado original.
Como Ansible utiliza un enfoque de programación procedimental, los desarrolladores pueden comprender con mayor facilidad cuándo y dónde está cambiando su configuración de automatización, lo cual agiliza el aislamiento de una parte específica de la configuración y la corrección del desajuste. Según la complejidad de la infraestructura de TI, puede ser mucho más desafiante realizar cambios de configuración en las soluciones de automatización que usan un enfoque de programación declarativa (como Terraform). Como resultado, a veces las empresas de TI prefieren usar Ansible para realizar cambios de configuración simples en lugar de volver a configurar de manera integral un sistema de TI completo con una solución como Terraform.
¿Qué solución de automatización es mejor?
Sería mejor preguntar lo siguiente: "¿Qué necesita su empresa para su caso práctico particular?" Debe evaluar sus desafíos y requisitos comerciales específicos y elegir la solución (o soluciones) que funcione mejor. Algunos problemas se adaptan mejor a un enfoque, mientras que otros pueden resolverse mejor con otro. Y, a veces, una combinación de soluciones es la clave del éxito.
Si bien Terraform y Ansible Automation Platform son ofertas de automatización populares, y herramientas favoritas de DevOps, las soluciones tienen funciones muy diferentes. Terraform se especializa en la implementación de infraestructura de nube pública, que es uno de los muchos casos prácticos en el mundo de la automatización de TI, y Ansible Automation Platform aborda una amplia gama de casos prácticos de automatización. En lugar de un enfoque único para la automatización, Ansible Automation Platform ofrece distintos enfoques para abordar una variedad de problemas. Y si nuestros clientes encuentran un problema particular que se resuelve mejor al combinar dos soluciones de automatización, Ansible Automation Platform puede integrarse a otros productos de los principales proveedores de nube, como Amazon Web Services (AWS) CloudFormation, Microsoft Azure Resource Manager y Google Cloud Platform (GCP) Cloud Deployment Manager, así como Helm y Terraform.
Muchos de nuestros clientes utilizan varias soluciones de automatización al mismo tiempo. Cuando implementan aplicaciones en la nube, por ejemplo, suelen comenzar implementando la infraestructura de la nube con CloudFormation o Terraform y, luego, establecen la configuración continua de aplicaciones y procesos con Ansible Automation Platform.
Otros clientes invierten exclusivamente en Ansible Automation Platform porque quieren automatizar más que solo el caso práctico de implementación en la nube. Por ejemplo, es posible que deseen automatizar los procesos de seguridad, como la investigación de amenazas o la respuesta a incidentes, junto con los procesos de red, como la reconfiguración de enrutadores y conmutadores.
Estos clientes desean estandarizar su enfoque de la automatización en todos los casos prácticos para maximizar el retorno sobre la inversión.
Terraform vs. Ansible: ¿Es realmente una competencia?
Con la variedad de ofertas de automatización empresarial disponibles, es fundamental comprender las características, las funciones y, lo que es más importante, lo que funciona mejor para las necesidades específicas de su empresa.
Con la tecnología de open source como característica principal, Red Hat Ansible Automation Platform es un producto de suscripción probado y reforzado que ofrece soporte del ciclo de vida completo para las empresas. Está diseñado a partir de la comunidad Ansible, que se beneficia de la experiencia y la inteligencia de sus miles de colaboradores globales. Ansible Automation Platform está diseñada para ayudar a las empresas a crear, gestionar y ajustar sus cargas de trabajo de automatización. Ofrece una base flexible, estable y centrada en la seguridad para implementar soluciones de automatización integrales, incluida la automatización para la nube híbrida, las ubicaciones de extremo, las redes, la seguridad, la infraestructura y muchos otros casos prácticos.
Terraform se destaca como una herramienta de implementación y eliminación de infraestructura en la nube con un enfoque de IaC. Es una herramienta específica con un propósito específico. Ansible ofrece una solución de automatización multipropósito entre dominios. Ambas tienen comunidades open source activas y productos comerciales downstream con soporte adecuado. Tienen sus propias fortalezas y, cuando se combinan, funcionan bien y aumentan la eficiencia de muchas empresas. En pocas palabras, la elección de una solución de automatización no siempre es una opción de "una u otra", ya que a menudo es un "y".