En este artículo profundizamos en los primeros pasos y sobres cómo es el trabajo con Terraform en Azure, el cual no difiere mucho de cómo se haría con otros proveedores cloud, pero es mucho más común encontrar información de cómo hacerlo por ejemplo con AWS.
Instalación Terraform:
La instalación de Terraform es bastante simple, como primer paso nos descargamos el software de la web de HashiCorp (https://www.terraform.io/downloads.html), donde existen varias versiones disponibles para descargar dependiendo del sistema operativo donde lo vayamos a instalar.
En la propia web de Terraform podemos encontrar videos detallados con todos los pasos del proceso de instalación, por lo que no me detendré mucho en este tema: (https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/azure-get-started).
Una vez acabada la instalación, como recomendación, os sugiero que os instaléis algún editor de código. En mi caso, yo uso Visual Studio Code (https://code.visualstudio.com/download), que es una herramienta de Microsoft, gratuita y muy fácil de usar. Además, nos ofrece un amplio catálogo de extensiones que podemos añadir y las cuales nos ayudaran en la codificación, por ejemplo, marcándonos los fallos de sintaxis, con sugerencias de autocompletado o incluso nos facilitaran la conexión a repositorios de código donde mantener nuestros ficheros actualizados y accesibles por cualquier miembro del equipo.
Conexión de Terraform a Azure
Una vez instalado el software de Terraform otro prerrequisito para poder trabajar con Azure sería instalar el Azure Cli (https://docs.microsoft.com/es-es/cli/azure/install-azure-cli-windows?tabs=azure-cli), en nuestro caso.
Esto nos facilitará y agilizará el acceso a las suscripciones, y la revisión de los componentes que vayamos instalando, mediante los comandos de Azure PowerShell sin necesidad de abrir una consola de cloud Shell dentro del propio Azure.
Cuando tengamos todos los componentes mencionados anteriormente instalados, para conectarnos a una suscripción concreta y comenzar a trabajar sólo deberemos lanzar el siguiente comando desde la línea de comandos del terminal de visual studio code:
$ az login
Automáticamente se abrirá una ventana del explorador donde podremos ingresar nuestras credenciales de Azure:
Una vez logados, nos volvemos a Visual Studio Code y en el terminal veremos un mensaje de este tipo:
Puede ocurrir que el usuario con el que acabamos de logarnos tenga acceso a más de una suscripción y debemos asegurarnos de estar trabajando sobre la correcta, para ello debemos ejecutar desde la terminal de Visual Studio Code (VSC) ejecutaremos:
$ az account set --subscription=”SuscriptionID”
Ahora crearemos la estructura de carpetas locales dentro de nuestro Visual Studio Code, donde guardaremos los ficheros Terraform (yo suelo crear una carpeta por cada resource group). Desde el terminal de VSC accederemos a la ruta que acabamos de crear y deberíamos crear un fichero cualquiera con extensión “.tf” para que al lanzar el comando init, terraform reconozca esta como una ruta en la que trabajar e inicialice la ruta creando los archivos que necesita.
Como primer fichero a generar, lo correcto sería empezar con el fichero “provider.tf”, este fichero se usa para establecer datos de conexión contra el proveedor. Ahora es cuando los puristas de Terraform probablemente me excomulguen, si no lo han hecho ya, pero la primera vez que lo usé esto, no vi claro donde definir lo siguiente y desde entonces siempre lo hago en este fichero. Y es que yo suelo utilizar este fichero, además, para crear el resource grupo actual y una cuenta de almacenamiento donde dejaremos el fichero “terraform.tfstate” mantenido por el propio Terraform. Hacemos esto, para mantener dicho fichero alejado de nuestro entorno de desarrollo y así garantizar que en caso de perder los ficheros “.tf” que tendremos en nuestro pc o nuestro entorno local, no se perdería la infraestructura. El código de todo esto sería así:
Tras esto, ya si estamos listos para ejecutar el comando terraform init para inicializar la ruta y que nos permita trabajar con Terraform en este directorio:
$ terraform init
Al acabar lanzaremos un:
$ terraform apply
Para que se creen los recursos anteriormente mencionados. Cuando acabe la ejecución podremos añadir al fichero provider.tf el código necesario para que se guarde el fichero de estado de Terraform en el contenedor del storage account de Azure que acabamos de crear.
Y después de incluirlo volveremos a lanzar un:
$ terraform init
Para que el fichero de estado se guarde en Azure. Este proceso debe hacerse en dos pasos, ya que se requiere que los recursos estén creados antes de poder mover el terraformstate.tfstate al storage account.
Ejemplos de codificación con Terraform
Variables
Se pueden definir varios tipos de variables, os muestro algunos de ellos:
Vnets
Subnets
Discos
Virtual Machine
Vnet-peering
Security group
Security rule
Conclusiones
Como he comentado antes, desde el punto de vista de DevOps es una herramienta muy interesante, ya que la posibilidad de crear plantillas de infraestructura como código y tener en ficheros la configuración de nuestros entornos, nos facilita tanto la administración, como la creación de nuevos entornos o la restauración en caso de desastre. También nos permite mantener el estado deseado, avisándonos de cualquier cambio que se produzca desde la consola y brindándonos la posibilidad de restaurar dicho estado de manera rápida y fácil. Pero sobre todo el mayor beneficio es poder hacer todo esto en distintos proveedores cloud.
Autor del artículo
David Martínez Bonaque, senior specialist de Consultoría Tecnológica de Deloitte