Terraform, un aliado en la infraestructura de software

POR IRAK MIGUEL / SRE II DEVOPS
Los viejos "alquimistas del software" recordarán todas esas historias dantescas que ocurrían al levantar un servidor, como los pasos que se requerían, e iban desde cablear un rack, instalar una bahía de discos duros o un KVM (switch de Keyboard, Video, Mouse), hasta lo tortuoso de instalar un Sistema Operativo Linux con sus drivers y makefiles. Afortunadamente, ahora contamos con alternativas que reducen costos operativos y económicos, entre las que se encuentran Terraform, que es una solución novedosa y robusta para trabajar infraestructura.

Antes entendíamos a la infraestructura como el conjunto de periféricos físicos, softwares y cableados que constituyen y ayudan a operar un servidor. Ahora agregamos al concepto un nuevo término: plataforma en nube, que es un conjunto de herramientas que habitan en servidores virtuales y que nos permiten albergar nuestros desarrollos.

Esto nos lleva a enfrentar nuevos retos y a buscar apoyo en nuevos aliados para resolverlos. Terraform es uno de ellos, pues nos permite instalar firewall, discos duros virtuales e imágenes de Linux o Windows de forma sencilla y ágil.

¿Qué es Terraform?

Terraform es una herramienta desarrollada por HashiCorp, basada en el principio IaC (Infrastructure as Code) y cuyo objetivo es que los desarrolladores puedan gestionar la infraestructura de forma declarativa y ordenada.

Con este software se puede definir y desplegar infraestructura en diferentes servicios proporcionados por proveedores como Amazon Web Service (AWS), Microsoft Azure, Google Cloud Platform (GCP), entre otros más.

Imagen: tomada de Terraform

¿Cómo ayuda Terraform?

Lo interesante de todo esto es que, en su mayoría, los proveedores de servicios en la nube ofrecen interfaces gráficas diseñadas bajo la biblia de UIX y pensadas para dummies, las cuales nos van ayudando a instalar y a administrar de manera "sencilla" infraestructura robusta y sólida.

Entonces, ¿para qué complicar el proceso con Terraform si palomeando una casilla o eligiendo algunos elementos de una lista podemos levantar una infraestructura confiable?

Pues la solución a esta pregunta, y quizá a otras más, es que Terraform y su fina transformación, Terragrunt, dan a nuestra infraestructura cualidades, como reproducibilidad, automatización, portabilidad, paralelismo y colaboración.

  • Reproducibilidad: es la capacidad de versionar la configuración de la infraestructura, lo que facilita la reproducción exacta de entornos en diferentes etapas de desarrollo.
  • Automatización: permite automatizar el proceso de aprovisionamiento y gestión de infraestructura, lo que implica el ahorro de tiempo.
  • Colaboración: al utilizar archivos de configuración todo el equipo puede contribuir al desarrollo y al mantenimiento de la infraestructura de manera más efectiva.
  • Portabilidad: es agnóstico al proveedor, lo que significa que puedes migrar fácilmente entre diferentes proveedores de la nube o mantener infraestructura, tanto en la nube como en entornos locales.
  • Paralelismo: es capaz de gestionar recursos en paralelo, lo que acelera el despliegue y la modificación de infraestructura en entornos complejos.

Terragrunt es el aliado más confiable de Terraform

Aunque Terraform resuelve todos los desafíos planteados por sí solo, Terragrunt es un wrapper que permite organizar de manera más eficiente y segura la infraestructura.

Terragrunt permite la reutilización de código, una gestión de estados que evita las colisiones en los cambios que realizan los miembros del equipo y un manejo más eficiente de las variables, entre otras cosas más que facilitan el manejo de Terraform.

Lo básico que debemos aprender de Terraform

Aprender Terraform suena complicado si lo vemos desde el punto de vista de que existen muchos componentes entre todos los proveedores de infraestructura y de que cada proveedor tiene sus propias configuraciones. A continuación, mencionamos sus conceptos más básicos:

  • Comandos: la realidad es que la mayoría de los desarrollos sólo ocupan un  número pequeño del universo de recursos existentes y, aunado a que los   comandos principales son cinco, esto se vuelve más sencillo.

  1. init: prepara tu directorio de trabajo para otros comandos.
  2. validate: verifica si la configuración es válida.
  3. plan: muestra los cambios requeridos por la configuración actual.
  4. apply: crea o actualiza la infraestructura.
  5. destroy: destruye la infraestructura creada previamente.

  • Proveedores: quizá la parte más importante sea conocer la infraestructura que se quiere manejar, ya que conociendo la forma correcta de configurar los servicios del proveedor será más fácil generar en Terraform las declaraciones de la infraestructura que se desea.
  • Variables: es útil aprender cómo definir y utilizar variables. Terraform admite  el uso de variables que permiten parametrizar la configuración y reutilizar  bloques de código.

En los años recientes, Terraform se ha convertido en un aliado para los especialistas en ingeniería de confiabilidad del sitio (SER, por sus siglas en inglés) y la cultura del DevOps, ayudándolos a automatizar tareas de infraestructura, pero también a mantener un control más organizado y accesible sobre la infraestructura.

Por eso, cada vez más organizaciones y empresas lo implementan para el control de su infraestructura, lo cual lo vuelve de interés general y un motivo más para conocerlo.