La infraestructura como código (IaC) (en inglés: Infrastructure as Code) es el proceso de gestión y aprovisionamiento de centros de datos informáticos a través de archivos de definición legibles por máquina, en lugar de configuración de hardware físico o herramientas de configuración interactiva. La infraestructura de TI gestionada comprende desde equipo físico como servidores bare metal hasta máquinas virtuales y los recursos de configuración asociados. Las definiciones pueden estar en un sistema de control de versiones. Pueda utilizar tanto scripts como definiciones declarativas, en lugar de procesos manuales, pero el término se utiliza más a menudo para promover los enfoques declarativos.
Siendo uno de los objetivos el de definir nuestra infraestructura en código de tal manera que nos permita hacer repetible la ejecución en diferentes entornos o recuperar toda la infraestructura en caso de presentarse un problema. Siendo esto un pilar importante en el mundo Cloud, sea cualquiera con la que estés familiarizado.
Por ejemplo si hablamos de Azure, la Cloud de Microsoft, el cual está basado en Azure Resource Manager (ARM) que es el servicio de implementación y administración de Azure. El ARM permite definir nuestra infraestructura usando un sistema de plantillas con una sintaxis declarativa que podemos clasificar como IaC.
Creando Recursos con una Plantilla ARM
Por ejemplo nuestra aplicación necesita una máquina virtual, un App Service y un SQL Azure.
En la Plantilla definimos los recursos necesarios para crear una maquina virtual.
Recursos Necesarios Para Crear una Maquina Virtual
- Un almacenamiento de diagnóstico Microsoft.Storage/storageAccounts
- Un disco administrado Microsoft.Compute/disks
- Una red virtual Microsoft.Network/virtualNetworks
- Una interfaz de red conectada a la red virtual Microsoft.Network/networkInterfaces
- La máquina virtual (por fin) Microsoft.Compute/virtualMachines con los recursos anteriores asociados
Las Plantillas de IaC son complejas y en su ultima versión se pueden ejecutar desde scripts PowerShell o de Az Cli. Para ayudar Microsoft desarrollo un lenguaje de dominio (DSL) llamado Azure Bicep el cual nos ayuda a desarrollar las plantillas ARM con un lenguaje mas sencillo.
Como vemos, podemos generar el fichero .json de una plantilla ARM usando un comando de compilación Bicep que compila nuestro fichero .bicep o directamente realizar el despliegue con Az Cli o con PowerShell con el fichero .bicep.
En el fragmento de código anterior, tenemos la misma implementación de los recursos necesarios para crear una máquina virtual usando Bicep. Como pueden ver, es mucho mas simple.
Ventajas sobre otras herramientas
Aunque existen otras opciones como Terraform, Pulumi o Farmer, Azure Bicep puede ofrecer las siguientes ventajas:
- Soporte a nuevos recursos de ARM desde el primer día, algo que en otros productos como Terraform no es aplicable, tenemos que esperar a que se haga la implementación adecuada.
- El modelo de despliegue de Bicep está soportado en Azure que es quien controla el estado de los recursos y el flujo de despliegue, en otros, como Terraform, el estado se mantiene en local, con el riesgo de pérdida o sobre escritura.
Desventajas
Pues como en todo, no puede ser perfecto, esta herramienta también tiene sus desventajas y una de ellas es que:
- Bicep es solo para Azure por lo que si tienes un entorno multi-cloud y quieres tener un unico lenguaje o framework de desplice no es tan funcional.
Y bueno hasta aquí todo, espero te halla gustado esta entrada, puedes probar Bicep si te facilita tu trabajo y es mas útil. También te invito a suscribirte y a seguirme en redes sociales.