¿Qué es Terraform y cuáles son sus ventajas?
Las herramientas de Infraestructura como Código (IaC) nos han permitido dar un paso de gigante en lo que respecta a la automatización de las operaciones. Dentro de este contexto una de las herramientas más populares es Terraform.
¿Qué es Terraform?
Terraform es una herramienta de las englobadas con las siglas IaC (Infrastructure as Code o Infraestructura como Código en español). Es una utilidad que nos permite definir, aprovisionar y gestionar recursos de infraestructura en distintos proveedores de nube, o incluso en entornos locales.
Esta herramienta está desarrollada por HashiCorp, una empresa especializada en automatización en la nube y seguridad. Ellos han inventado un lenguaje declarativo llamado HCL (siglas de HashiCorp Configuration Language), con el cual puedes describir el estado deseado de tu infraestructura y el propio Terraform se encargará de poner en marcha tus definiciones en el proveedor de cloud que tengas.
¿Cómo funciona Terraform?
Terraform nos permite definir por medio de código las características de una infraestructura que queremos conseguir, y luego aplicarlas de manera automática. El proceso de trabajo se basa en tres fases principales:
- Fase de escritura: donde se definen los recursos de infraestructura en ficheros con código y extensión .tf.
- Fase de Planificación: realizada con el comando «terraform plan» que se encarga de definir el plan de ejecución para la definición de tu infraestructura. Esto te permite revisar el plan antes de ejecutarlo.
- Fase de Aplicación: que se realiza con el comando «terraform apply» y es cuando Terraform crea, actualiza o elimina los recursos necesarios para alcanzar el estado definido en la configuración que habías revisado en el paso anterior.
Además de todo lo anterior, el motor de Terraform mantiene un archivo de estado que refleja cómo se encuentra la infraestructura en cada momento, del que hablaremos también más adelante.
Ventajas de usar Terraform
Existen muchas ventajas de usar Terraform, en relación a realizar todos los procesos de manera manual. Vamos a enumerarlas.
Automatización y consistencia en la infraestructura
Primero, Terraform te permite automatizar el proceso de creación de la infraestructura en la nube. Esto puede quitarte bastante trabajo cuando tengas que hacer tareas repetitivas, pero además te ayuda a conseguir entornos consistentes, donde se reduce la variabilidad y se evitan los errores manuales.
Soporte para múltiples proveedores cloud
Terraform es una plataforma muy completa que ofrece soporte a una alta gama de proveedores cloud. Por supuesto, las soluciones Cloud de Arsys soportan Terraform, pero también otros proveedores.
Escalabilidad y flexibilidad en proyectos
Las ventajas de Terraform son aplicables en proyectos de todos los tamaños. Además puedes comenzar con infraestructuras simples y a medida que tu proyecto vaya creciendo, el mismo trabajo lo podrás adaptar para despliegues en infraestructuras tan complejas como llegues a necesitar.
Control de cambios y versionado
Al crear la infraestructura mediante código tenemos una gran ventaja cuando combinamos Terraform con herramientas de versionado como Git. Gracias a ellas es fácil mantener el control de las versiones por las cuales ha pasado tu infraestructura, mejorar el trabajo en equipo y mantener una trazabilidad completa de cada cambio.
Comunidad activa y gran ecosistema
Terraform no es la única herramienta de IaC, pero sí podemos decir que es una de las más populares, gracias a una amplia comunidad. Es por ello que podemos encontrar muchas herramientas basadas en Terraform, así como una documentación extensa y tutoriales de todos los niveles.
Casos de uso de Terraform
Podemos utilizar Terraform en cualquier situación donde tengamos que crear infraestructura en proveedores cloud. Dentro de este amplio espectro vamos a ver algunos casos de uso más concretos.
Despliegue de entornos de desarrollo y producción
Podemos crear entornos de desarrollo usando Terraform y aplicando los cambios en local, lo que permite que todos los desarrolladores trabajen en un entorno idéntico.
Pero además, gracias a Terraform, los mismos entornos los puedes reproducir en producción o pruebas, lo que ayuda a eliminar inconsistencias y situaciones poco deseables, como que tu código funcione en local y falle en remoto.
Gestión de infraestructuras híbridas
Hemos dicho que con Terraform puedes trabajar con diversos proveedores cloud, incluso en local. Esto también hace posible unificar la gestión de recursos en distintos tipos de nubes (públicas, privadas), así como en servidores que tengas en una oficina y en la nube. Cualquier combinación es perfectamente viable con esta herramienta híbrida y multicloud.
Automatización de despliegues en la nube
Pero sobre todo, donde más le sacamos partido es a la hora de automatizar despliegues en la nube complejos, ya que podemos crear en un mismo proceso varias máquinas virtuales, balanceadores de carga, bases de datos o redes. Todo ello lo puedes gestionar desde Terraform, así como el propio despliegue del código de tus aplicaciones.
Integración con CI/CD
Por si fuera poco, Terraform se puede usar perfectamente con pipelines de integración continua y despliegue continuo. Esto hace que mediante el lenguaje y sus herramientas puedas mejorar tus flujos a lo largo de todo el ciclo de vida de las aplicaciones.
Migraciones entre proveedores cloud
Otro detalle interesante es la facilidad de mover aplicaciones y servicios de un proveedor cloud a otro, gracias a su carácter multicloud que ofrece compatibilidad con los proveedores de servicios en la nube más importantes.
Terraform vs. otras herramientas IaC
Terraform no es la única tecnología de IaC y a pesar de su popularidad tiene algunos competidores bastante relevantes que vamos a destacar en los próximos puntos, a modo de comparativa.
Terraform vs. Ansible
Terraform es una herramienta completamente orientada en la creación y gestión de infraestructura cloud. Por su parte, Ansible está más centrada en la parte de la configuración y administración de los servidores.
Con Ansible, no obstante, también podemos crear recursos en la nube, aunque su fuerte no es ese. En realidad se trata de dos herramientas que bien podrían complementarse, de modo que podríamos crear la infraestructura cloud con Terraform y mantener la configuración por medio de Ansible.
Terraform vs. AWS CloudFormation
Otra alternativa bastante popular es AWS CloudFormation. Es una herramienta excelente pero es exclusiva para el cloud de Amazon. Su parte fuerte, por tanto, es permitir trabajar con el ecosistema de AWS de una manera más profunda.
Sin embargo, Terraform es una opción mucho más flexible, ya que es capaz de trabajar con una amplia gama de proveedores cloud, incluso con un enfoque híbrido, por lo que sus posibilidades son mucho más amplias.
Terraform vs. Pulumi
Otra alternativa que permite crear infraestructura mediante código es Pulumi. La diferencia fundamental se basa en los lenguajes que tiene cada una de las herramientas. Mientras que Terraform usa HCL, un lenguaje declarativo y propietario especializado en la creación de infraestructura, Pulumi permite hacer cosas similares usando lenguajes de programación comunes como TypeScript, Python o Go.
El lenguaje declarativo de Terraform es sencillo, por lo que no resultará demasiado difícil aprenderlo y usarlo en los planes de infraestructuras. No obstante, algunos equipos prefieren aprovechar lenguajes ya conocidos, con lo que Pulumi puede encajar entre sus planes. Aunque, al final, siempre es necesario aprender algo, como en este caso una librería con una interfaz nueva.
Cómo empezar a usar Terraform paso a paso
Ahora vamos a pasar a una parte más práctica, explicando paso a paso cómo podemos empezar a trabajar con Terraform en un proyecto y cuales son sus primeras declaraciones para definir la infraestructura.
Instalar Terraform en tu sistema
Comenzamos por instalar Terraform, para lo que será necesario descargar la herramienta desde la página oficial de instalación en el sitio web de HashiCorp.
Podrás ver que Terraform está disponible para Linux, macOS y Windows y cada uno ofrece sus propios procedimientos:
- Linux: se pueden usar los propios repositorios de algunas distribuciones. También determinados comandos de descarga con curl que ofrecen desde la propia página oficial.
- Mac: puedes usar el instalador o bien Homebrew.
- Windows: debes usar el instalador.
Una vez instalado, para verificar que está disponible en nuestro sistema podemos ejecutar el comando siguiente:
terraform -v
Configurar tu primer archivo .tf
La parte más laboriosa para trabajar con Terraforrn es la creación de los archivos de configuración para cada plan. Estos archivos los tenemos que realizar con extensión .tf y en ellos defines el estado deseado de la infraestructura que queremos producir.
Por ejemplo, para crear una máquina virtual en el cloud de Arsys, se especifica el proveedor «ionos» en un código como puedes ver a continuación:
terraform { required_providers { ionoscloud = { source = 'ionos-cloud/ionoscloud' version = '>= 6.4.10' } random = { source = 'hashicorp/random' version = '>= 3.4.3' } } } provider 'ionoscloud' { username = var.ionos_username password = var.ionos_password }
Luego, podemos definir el servidor con un código como este:
data 'ionoscloud_template' 'example' { name = 'CUBES XS' } resource 'ionoscloud_lan' 'example' { datacenter_id = ionoscloud_datacenter.demotf.id public = true name = 'Red TF' } resource 'ionoscloud_server' 'example' { name = 'Servidor Demo' availability_zone = 'AUTO' image_name = 'ubuntu:latest' type = 'CUBE' template_uuid = data.ionoscloud_template.example.id image_password = random_password.server_image_password.result datacenter_id = ionoscloud_datacenter.demotf.id volume { name = 'Demo Volumen' licence_type = 'LINUX' disk_type = 'DAS' } nic { lan = ionoscloud_lan.example.id name = 'NIC Demo' dhcp = true firewall_active = true } } resource 'random_password' 'server_image_password' { length = 16 special = false }
Estos códigos tienen varios detalles que deberías aprender a definir y son lenguajes que requieren un estudio detallado para entender cada una de las configuraciones posibles.
Nuestra recomendación es acudir a la documentación oficial pero además, queremos recomendaros un vídeo de Arsys Tech Academy donde se explica paso por paso cómo se han construido estos ficheros: Vídeo Qué es Terraform y cómo utilizarlo.
Ejecutar comandos básicos (init, plan, apply)
Una vez definida la infraestructura pasamos a la siguiente fase en la que se crea el plan. Para ello necesitamos lanzar varios comandos que van ejecutando los pasos necesarios para crear y aplicar el plan.
Comenzamos por inicializar el proyecto y descargar los plugins necesarios para nuestras definiciones de infraestructura. Lo hacemos con el comando «init».
terraform init
Luego creamos el plan y se muestran los cambios que se aplicarán en el proveedor de cloud mediante el comando «plan».
terraform plan
Si todo está como deseamos, como último paso podemos aplicar el plan con el comando «apply».
terraform apply
Administrar estados de la infraestructura
Aparte de crear infraestructura desde cero también podemos administrar el estado de la infraestructura que tenemos actualmente.
Para ello, Terraform utiliza un archivo llamado state file «terraform.tfstate». En este archivo encontramos un registro del estado actual de la infraestructura. Sin embargo en ese archivo no se debería trabajar de modo manual porque podríamos causar problemas de diversos tipos. En cambio, existen comandos que nos permiten tocar el state, e incluso ellos los tenemos que usar con cuidado.
En la documentación de Terraform encontrarás más información sobre estos pasos, ya que son bastante delicados. Incluso te enseñarán a proteger este archivo, ya que es importante que no se ande tocando, sobre todo cuando estáis trabajando en equipo. El propio Terraform ofrece herramientas para poder protegerlo.
Aplicar buenas prácticas desde el inicio
Es importante que desde el inicio del proyecto apliques prácticas adecuadas en la definición de las infraestructuras, como organizar el código en distintos archivos, versionar los archivos .tf o documentar cada paso que realices en la creación de la infraestructura, para que quede de manera clara para cualquier persona que participe en el proyecto.
Buenas prácticas al trabajar con Terraform
Ya que hablamos de buenas prácticas, sería importante establecer algunos consejos clave para que el uso de Terraform sea adecuado, comprensible y mantenible, evitando también posibles problemas de seguridad.
Uso de módulos para proyectos escalables
Como hemos dicho antes, recomendamos usar módulos para poder estructurar debidamente los diversos apartados de nuestra infraestructura. Esto permitirá que las configuraciones no se hagan demasiado complejas, pero también evitará duplicidad de código y fomentará la reutilización.
Gestión segura de credenciales
Es importante que nunca almacenes credenciales de acceso a tus proveedores cloud en los archivos .tf, ya que estarías exponiendo estos datos para personas que no deberían acceder a ellos.
En lugar de escribirlos en los archivos .tf las sugerencia más sencilla es utilizar variables de entorno. También es posible hacer la gestión de secretos con herramientas cloud o incluso herramientas ofrecidas por el propio equipo de Terraform.
Documentar la infraestructura
El paso de la definición de la infraestructura es extremadamente sensible y debe ser documentado debidamente para que las definiciones sean entendibles entre los miembros del equipo.
Por tanto, es necesario documentar los módulos, las variables que estamos utilizando y la salida que deberíamos esperar. Todo ello facilitará el mantenimiento del proyecto por el equipo.
Implementar pruebas antes del despliegue
Es importante implementar pruebas que nos permitan verificar las configuraciones antes de realizar un despliegue. Para conseguir este paso de manera sencilla existen herramientas como Terratest que puedes usar para probar y auditar configuraciones de Terraform.
Mantener Terraform actualizado
Es importante también que el propio software de Terraform esté actualizado en los equipos de trabajo, para asegurar que las actualizaciones publicadas por HashiCorp están correctamente instaladas, ya que siempre puede haber mejoras, solución de problemas o incluso nuevas características que podemos aprovechar.