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.
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.
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.
Los principales beneficios que nos proporciona Terraform son:
Terraform tiene dos componentes principales con los que trabaja internamente:
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.
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.
Terraform se controla con unos pocos comandos básicos, que son:
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