Infraestructura como Código
Infrastructure as Code (IaC) es el paradigma con el que gestionamos infraestructuras (redes, máquinas virtuales, equilibradores de carga, etc) a partir de un modelo descriptivo. De esta forma, al igual que un mismo código fuente genera el mismo binario, en un modelo IaC, un modelo descriptivo generará el mismo entorno cada vez que se aplica.
Sin IaC, los equipos deben mantener la configuración de los entornos de forma manual e individual. Con IaC se asegura una implementación de entornos con la misma configuración, independientemente del estado inicial del éste, configurando un objetivo existente o descartando el objetivo existente y recreando un entorno nuevo. Si necesitamos hacer modificaciones sobre la infraestructura, se edita el código fuente asociado y no el destino.
Infrastructure as Code permite a los equipos de DevOps probar aplicaciones en entornos similares a los de producción aprovisionando entornos de prueba de manera confiable y bajo demanda. IaC ofrece entornos estables y a escala de forma ágil, evitando configuraciones manuales y reforzando la coherencia al representar el estado deseado de sus entornos mediante código. Las implementaciones de infraestructura con IaC son repetibles y evitan problemas de tiempo de ejecución causados por cambios en la configuración o dependencias faltantes.
Terraform como solución IaC
Terraform es una solución para infraestructura como código desarrollado por HashiCorp. Permite a los usuarios definir y configurar la infraestructura de un centro de datos en un lenguaje de alto nivel, generando un plan de ejecución para desplegar la infraestructura en cualquier proveedor de nube como AWS, Azure, IBM Cloud, etc. La infraestructura se define utilizando la sintaxis de configuración de HashiCorp denominada HashiCorp Configuration Language (HCL), que facilita la codificación de una infraestructura dependiendo de nuestras necesidades, los servicios que tengamos que prestar y con una gran variedad de proveedores donde depositar nuestra infraestructura.
La solución a todos estos problemas pasaría por disponer de una herramienta que nos permita modelar nuestra infraestructura como código, pero que sea agnóstica al entorno cloud donde se ejecute.
Encontramos soluciones como CloudFormation de AWS o Heat de Openstack o Azure ARM en Azure, pero estas herramientas están ligadas al cloud donde se desea desplegar. En este sentido, Terraform nos permite codificar nuestra infraestructura atendiendo a las necesidades del servicio, ofreciendo un amplio abanico de proveedores para el despliegue de la infraestructura.
Caso de uso de IaC con Terraform
A continuación, se desarrolla con Terraform una Infraestructura consistente en una máquina virtual para desplegar en azure.
Instalación de Terraform
Para comenzar, descargamos Terraform del siguiente link: https://www.terraform.io/downloads.html. Para el caso de Windows, Terraform está compuesto de un único ejecutable (terraform.exe), que podremos descargar en cualquier carpeta incluida en la variable PATH del sistema.
Una vez descargado, podemos comprobar su funcionamiento desde powershell:
Autenticación en Azure con Terraform
Para posibilitar la integración de Terraform con Azure, es necesaria la creación de un Service Principal en Azure Active Directory, al que después daremos privilegios de ‘Contributor’ en la subscripción sobre la que vamos a desplegar.
Configuración de Terraform para acceso a Azure
Una vez creado el Service Principal con alguno de los métodos descritos anteriormente, hemos de configurar Terraform para el acceso a Azure, haciendo uso de dicho Service Principal con el uso de la definición de las siguientes variables:
Creación del código de infraestructura
Para el despliegue de la infraestructura, creamos el archivo main.tf que contendrá la configuración para construir la máquina virtual de Azure con Terraform.
En nuestro caso, se van a crear los siguientes elementos para la puesta en marcha de la máquina virtual:
- Grupo de Recursos: RG_terraformTesting
- Virtual network: VNET_terraformTesting
- Segmento de red incluido en la virtual network VNET_terraformTesting
- IP para acceso público
- Reglas de seguridad para acceso por RDP (TCP Port 3389)
- NIC para servidor virtual
- Creación de la máquina virtual TFWVMServer
El contenido completo de main.tf para el ejemplo propuesto, se lista a continuación:
Despliegue de la infraestructura con Terraform
Una vez disponemos del código que generará la infraestructura, solo queda desplegarla:
Antonio Llompart Freire
Soy Ingeniero Técnico en Informática y Máster en diseño y gestión de proyectos, con más de 20 años de experiencia en informática, desempeñando diversas funciones en el sector. Actualmente soy Arquitecto de Plataformas de Datos en Verne Technology Group realizando análisis, implementación, puesta a punto, etc. de proyectos en plataformas con SQL Server.