Skip to main content

Los beneficios de utilizar Terraform

Hace un tiempo publiqué una serie de artículos donde os presentaba y mostraba el funcionamiento de Powershell DSC como un primer contacto con el paradigma de IaC (Infraestructura as Code). Hoy os traigo esta nueva serie sobre Terraform, donde seguiremos profundizando en este paradigma.

¿Qué es Terraform?

 

Terraform es una herramienta de orquestación de código abierto de la compañía HashiCorp que nos permite la codificación de infraestructura de manera segura y eficiente.

Desde el punto de vista de DevOps, Terraform es una herramienta muy útil, que nos proporciona una manera fácil y ágil de desarrollar en uno o varios ficheros la configuración de nuestra infraestructura. Esto es de gran utilidad en caso de desastre, ya que además de los backups, sistemas de alta disponibilidad y disaster recovery que podamos tener, gracias a los ficheros de Terraform tendríamos otro punto más sobre el que apoyarnos a la hora de recuperar y restaurar los servicios. También nos ofrece un punto ágil de restauración en caso de que algo en nuestras aplicaciones dejen de funcionar, permitiéndonos mantener todas nuestras configuraciones en el tiempo. E incluso podremos fácilmente replicar esta arquitectura en otros clientes o adaptarla para replicarla en otros proveedores cloud.

¿Por qué Terraform?

 

Los servicios en la nube hacen que las infraestructuras se vuelvan más complejas debido a la gran cantidad de servicios que ofrecen los proveedores. Gracias a Terraform podemos crear pequeños ficheros de configuración para cada servicio o unificar en un fichero todos los componentes iguales de un mismo servicio, lo cual nos permitirá mantener nuestra infraestructura de manera fácil y ágil.

Terraform nos permite construir, cambiar y crear distintas versiones de infraestructura mediante un lenguaje declarativo sencillo. Además, podemos crear componentes de bajo nivel como instancias de computación, almacenamiento y redes, pero también componentes de alto nivel como entradas de DNS, características de SaaS, etc.

La potencia que nos brinda este software es que no trabaja únicamente con un proveedor, sino que nos admite trabajar con gran cantidad de proveedores como Amazon Web Services (AWS), Oracle, Atlassian, Cloudflare, Google y Azure, entre otros. Terraform nos ofrece un lenguaje de programación para controlar a todos los proveedores.

Igual que ocurría en el caso de PowerShell DSC, con Terraform podemos mantener una configuración de estado deseado, y en el caso de que algún usuario cambie algo desde la consola de administración web del proveedor, al lanzar de nuevo un plan o un apply de nuestro código, el sistema rápidamente nos resaltará los cambios que se han producido.

Beneficios de Terraform:

 

Los principales beneficios que nos proporciona Terraform son:

  • Admite crear infraestructuras en gran cantidad de proveedores.
  • Nos permite administrar tanto infraestructuras grandes como una sola aplicación.
  • Proporciona una sintaxis fácil y única que permite administrar casi cualquier recurso independientemente de la plataforma y servicio.
  • Los ficheros de Terraform pueden ser compartidos y reutilizables para generar nuevos entornos y ser fácilmente exportables a otros clientes.
  • Los modelos de datos pueden ser versionados, y de esta forma muy sencilla observar el progreso de nuestro servicio.
  • También nos permite controlar los cambios en la infraestructura de manera simple y ágil.

¿Cómo funciona Terraform?

 

Terraform tiene dos componentes principales con los que trabaja internamente:

  • Fuentes de datos
  • Proveedores

Fuentes de datos

Básicamente utiliza dos fuentes de entrada de datos para trabajar:

· Ficheros “.tf” que nosotros creamos con la configuración deseada de cada componente que vamos a instalar. Podemos tener tantos ficheros de este tipo como nos resulte cómodo a nosotros para mantener nuestros entornos.

· Fichero de estado. Se trata de un fichero “terraform.tfstate”, mantenido por Terraform, donde guarda la configuración de nuestra infraestructura en cada momento.

El Terraform Core coge la información de su fichero de estado y compara la información que le proporcionamos en los ficheros de configuración que nosotros hemos desarrollado, estableciendo las diferencias entre el estado actual y cuál es la configuración del resultado final. Calcula lo que se debe crear, actualizar o eliminar para aprovisionar la infraestructura.

Proveedores

Los proveedores pueden ser proveedores de nube como AWS, Azure, OCI u otra IaaS (Infraestructure as a Service). Pero también puede ser un proveedor de componentes de más alto nivel como Kubernetes u otras herramientas de PaaS (Platform as a Service). Lo que nos permitiría crear infraestructuras en varios niveles, es decir, podemos crear primero una infraestructura en Azure, AWS, etc. y después de esto podríamos crear clusters de Kubernetes e incluso servicios dentro de los clusters.

Principales comandos de Terraform:

 

Terraform se controla con unos pocos comandos básicos, que son:

  • Terraform init: inicializa el directorio de trabajo y provee de los archivos de configuración necesarios para el funcionamiento de la herramienta.
  • Terraform plan: este comando crea un plan de ejecución, que como comentábamos anteriormente compara el estado actual con los cambios realizados en los ficheros “.tf” y nos indica que cambios son necesarios para lograr el estado deseado.
  • Terraform apply: primero analiza los cambios necesarios, como hace en el plan. Luego, si estamos conformes, los aplica en la infraestructura.
  • Terraform destroy: permite destruir toda la infraestructura gestionada por Terraform. Pide confirmación antes de realizar esta acción.
  • Terraform rm state: en la misma línea del comando anterior, si no quisiéramos destruir toda la infraestructura, sino dejar de gestionar algún recurso concreto con Terraform, usaríamos este comando. Esto permite dejar únicamente de gestionarlo con Terraform, no lo destruiría físicamente de la consola del proveedor.

En un próximo artículo os mostraré cómo se instala y posteriormente se trabaja con Terraform en Azure.

Autor del artículo

David Martínez Bonaque, senior specialist de Consultoría Tecnológica de Deloitte