Hoy, me gustaría discutir una herramienta de DevOps: Terraform, que usamos mucho en Apiumhub.

Como todos sabemos, el objetivo del movimiento DevOps es hacer que el código siempre esté en un estado desplegable y mantenible. En lugar de hacer una nueva versión cada 3 meses porque el entorno de la herramienta rara vez debe ser tocado, puedes tener hasta una docena o más versiones por día.

La gestión de la configuración es la parte esencial de la metodología de DevOps y las herramientas como Chef, Puppet, Terraform están en el corazón de los ecosistemas de desarrollo de software. Terraform está ganando popularidad y en este artículo me gustaría mostrar sus beneficios y casos de uso.

¿Qué es Terraform?

Terraform es una herramienta de aprovisionamiento de servidores. Cuando se trata de Terraform, no se está ligado a una imagen de servidor, sino a una infraestructura completa que puede contener servidores de aplicaciones, bases de datos, servidores CDN, balanceadores de carga, cortafuegos y otros. Mientras que las herramientas de administración de configuración aseguran que cada servidor individual esté en el estado deseado, una herramienta de aprovisionamiento de servidores como Terraform asegura que la infraestructura en su conjunto esté en el estado deseado.

Terraform es una herramienta gratuita y de código abierto creada por HashiCorp y escrita en el lenguaje de programación Go. Puede ser usado para aprovisionar infraestructuras enteras que se extienden a través de múltiples proveedores de nubes públicos y privados como AWS, Google Cloud, Microsoft Azure, OpenStack y otros. Gestiona los recursos externos (dispositivos de red, software como servicio, plataforma como servicio, etc.) con “proveedores”.

Básicamente, Terraform permite a los programadores construir, cambiar y versionar la infraestructura de forma segura y eficiente. Terraform puede ayudar con la multinube teniendo un flujo de trabajo para todas las nubes. Terraform trata la infraestructura como código (IaC), es el ejemplo de la próxima generación de sistemas de orquestación de configuración que trae una nueva capa de características y funcionalidades a la mesa.

Terraform es una aplicación con estado. Lo que significa que mantiene un registro de todo lo que construye en sus entornos de nubes, de modo que si necesitas cambiar algo o eliminar algo más tarde, Terraform sabrá lo que construyó, y puede volver y hacer esos cambios por ti.

Beneficios de Terraform

  • Orquestación, no sólo configuración
  • Infraestructura inmutable
  • Código declarativo, no de procedimiento
  • Arquitectura de sólo clientes
  • Portabilidad
  • Automatización
  • Fiabilidad
  • Dependencias de recursos claramente mapeadas
  • Flujo de trabajo consistente
  • Una experiencia de usuario elegante
  • Comunidad fuerte

Casos de uso de Terraform

  • Terraform puede utilizarse para codificar la configuración necesaria para una aplicación Heroku, asegurando que todos los complementos necesarios estén disponibles, pero puede ir más allá: configurar DNSimple para establecer un CNAME, o configurar Cloudflare como un CDN para la aplicación. Lo mejor de todo es que Terraform puede hacer todo esto en menos de 30 segundos sin usar una interfaz web.
  • La arquitectura de 2 niveles más común es un conjunto de servidores web que utilizan un nivel de base de datos. Se agregan niveles adicionales para servidores API, servidores de caché, mallas de enrutamiento, etc. Este patrón se utiliza porque los niveles se pueden escalar de forma independiente y proporcionan una separación de las preocupaciones. Terraform es una herramienta ideal para construir y gestionar estas infraestructuras. Cada nivel puede describirse como una colección de recursos, y las dependencias entre cada nivel se manejan automáticamente. Terraform se asegura de que el nivel de la base de datos esté disponible antes de que se inicien los servidores web y de que los equilibradores de carga estén al tanto de los nodos web. Cada nivel puede entonces ser escalado fácilmente usando Terraform modificando un único valor de configuración de conteo. Debido a que la creación y el aprovisionamiento de un recurso está codificado y automatizado, el escalado elástico con la carga se vuelve trivial.
  • A un cierto tamaño de organización, se convierte en un gran desafío para un equipo de operaciones centralizado gestionar una infraestructura grande y creciente. En cambio, resulta más atractivo hacer una infraestructura de “autoservicio”, permitiendo a los equipos de producto gestionar su propia infraestructura utilizando las herramientas proporcionadas por el equipo central de operaciones. Utilizando Terraform, el conocimiento de cómo construir y escalar un servicio puede ser codificado en una configuración. Las configuraciones de Terraform pueden ser compartidas dentro de una organización permitiendo a los equipos de clientes utilizar la configuración como una caja negra y utilizar Terraform como una herramienta para gestionar sus servicios.
  • Los escritores de software pueden proporcionar una configuración de Terraform para crear, suministrar y poner en marcha una demostración en proveedores de nubes como AWS. Esto permite a los usuarios finales hacer fácilmente una demostración del software en su propia infraestructura, e incluso permite ajustar los parámetros como el tamaño del clúster para probar más rigurosamente las herramientas a cualquier escala.
  • Es una práctica común tener tanto un entorno de producción como de puesta en escena o de control de calidad. A medida que el entorno de producción crece y se hace más complejo, se hace cada vez más oneroso mantener un entorno de puesta en escena actualizado. Usando Terraform, el entorno de producción puede ser codificado y luego compartido con la puesta en escena.  Estas configuraciones pueden ser usadas para crear rápidamente nuevos entornos para probar y luego ser fácilmente eliminados. Terraform puede ayudar a domar la dificultad de mantener entornos paralelos, y hace que sea práctico crearlos y destruirlos de forma elástica.
  • Terraform puede ser usado para codificar la configuración de las redes definidas por el software. Esta configuración puede ser utilizada por Terraform para configurar y modificar automáticamente los ajustes mediante la interfaz con la capa de control. Esto permite versionar la configuración y automatizar los cambios. Por ejemplo, AWS VPC es una de las implementaciones de SDN más utilizadas y puede ser configurada por Terraform.
  • Los programadores de recursos pueden ser tratados como un proveedor, permitiendo a Terraform solicitar recursos de ellos. Esto permite que Terraform se utilice en capas: para configurar la infraestructura física que ejecuta los programadores así como el aprovisionamiento en la red programada.
  • Terraform es agnóstica a la nube y permite que una sola configuración sea usada para manejar múltiples proveedores, e incluso para manejar dependencias cruzadas de la nube. Esto simplifica la gestión y la orquestación, ayudando a los operadores a construir infraestructuras multinube a gran escala.
  • Además, con Terraform puede escribir archivos de configuración declarativos, colaborar y compartir configuraciones, evolucionar y versionar su infraestructura, automatizar el aprovisionamiento, definir la infraestructura como código para gestionar el ciclo de vida completo: crear nuevos recursos, gestionar los existentes y destruir los que ya no se necesitan.
  • Crear una infraestructura reproducible: entornos reproducibles de producción, puesta en escena y desarrollo. Con Terraform ha compartido módulos para patrones de infraestructura comunes y puede combinar múltiples proveedores de forma consistente. Terraform facilita la reutilización de configuraciones para infraestructuras similares, ayudándole a evitar errores y ahorrar tiempo.
  • Comparta la infraestructura como código. Terraform permite a los equipos revisar, comentar e iterar rápidamente sobre la infraestructura como código. Terraform permite tener una gestión de estado (almacenamiento, visualización, historia y bloqueo), interfaz de usuario web para ver y aprobar las ejecuciones de Terraform, ejecuciones colaborativas y registro de módulos privados. 
  • Automatizar los flujos de trabajo consistentes y crear un conducto para el aprovisionamiento de Infraestructura como Código. 
  • Integración de VCS (Azure DevOps, Bitbucket, GitHub y GitLab). Con Terraform puede habilitar el flujo de trabajo de GitOps y tener notificaciones de eventos de ejecución (a través de Slack o webhooks). También ofrece un completo HTTP API para integrarse con otras herramientas y servicios.

Debido a que Terraform utiliza una sintaxis simple, puede aprovisionar la infraestructura a través de múltiples centros de datos de nubes y en las instalaciones, y puede reabastecer la infraestructura de manera segura y eficiente en respuesta a los cambios de configuración, es actualmente una de las herramientas de automatización de infraestructura más populares disponibles. Si su organización planea desplegar un entorno híbrido de nube o multinube, es probable que quiera o necesite conocer Terraform.

Si desea saber más sobre Terraform, aquí tiene un brillante vídeo de IBM explicando Terraform: Video