¿Qué es la infraestructura como código (IaC)?

La infraestructura como código (IaC) usa la metodología de DevOps y el control de versiones con un modelo descriptivo para definir e implementar la infraestructura, como redes, máquinas virtuales, equilibradores de carga y topologías de conexión. Igual que con el principio de que el mismo código fuente siempre genera el mismo archivo binario, los modelos de IaC generan el mismo entorno cada vez que se aplican.

Diagram of infrastructure as code defining the environment in a versioned file.

IaC es una práctica clave de DevOps y un componente de la entrega continua. Con IaC, los equipos de DevOps pueden trabajar juntos con un conjunto unificado de prácticas y herramientas para entregar aplicaciones y su infraestructura de soporte de forma rápida y fiable a escala.

Evitar la configuración manual para aplicar coherencia

IaC ha evolucionado para resolver el problema del desfase del entorno en las canalizaciones de versión. Sin IaC, los equipos deben mantener la configuración del entorno de implementación de forma individual. Con el tiempo, cada entorno se convierte en un "copo de nieve", es decir, una configuración única que no se puede reproducir automáticamente. La incoherencia entre entornos puede causar problemas de implementación. La administración y el mantenimiento de la infraestructura implican procesos manuales que son propensos a errores y difíciles de rastrear.

La IaC evita la configuración manual y aplica la coherencia mediante la representación de estados de entorno deseados a través de código bien documentado en formatos como JSON. Las implementaciones de infraestructura con IaC son repetibles y evitan problemas en tiempo de ejecución causados por el desviado de configuración o dependencias que faltan. Las canalizaciones de versión ejecutan las descripciones del entorno y los modelos de configuración de versión para configurar entornos de destino. Para realizar cambios, el equipo edita el origen, no el destino.

La idempotencia, la capacidad de una operación determinada para producir siempre el mismo resultado, es un principio importante de IaC. Un comando de implementación siempre establece el entorno de destino en la misma configuración, independientemente del estado inicial del entorno. La idempotencia se logra configurando automáticamente el destino existente o descartando el destino existente y volviendo a crear un entorno nuevo.

Herramientas útiles

Entrega de entornos de prueba estables rápidamente a escala

IaC ayuda a los equipos de DevOps a probar aplicaciones en entornos similares al de producción en una fase temprana del ciclo de desarrollo. Los equipos pueden aprovisionar varios entornos de prueba de forma fiable y a petición. La nube aprovisiona y reduce dinámicamente los entornos en función de las definiciones de IaC. El propio código de infraestructura se puede validar y probar para evitar problemas comunes de implementación.

Uso de archivos de definición declarativos

La IaC debe usar archivos de definición declarativos si es posible. Un archivo de definición describe los componentes y la configuración que requiere un entorno, pero no necesariamente cómo lograr esa configuración. Por ejemplo, el archivo podría definir una versión y una configuración de servidor necesarias, pero no especificar el proceso de instalación y configuración del servidor. Esta abstracción permite una mayor flexibilidad para usar técnicas optimizadas que proporciona el proveedor de la infraestructura. Las definiciones declarativas también ayudan a reducir la deuda técnica de mantener código imperativo, como los scripts de implementación, que puede acumularse con el tiempo.

No hay ninguna sintaxis estándar para la IaC declarativa. La sintaxis para describir la IaC normalmente depende de los requisitos de la plataforma de destino. Las distintas plataformas admiten formatos de archivo como YAML, JSON y XML.

Implementación de IaC en Azure

Azure proporciona compatibilidad nativa con IaC a través del modelo de Azure Resource Manager. Los equipos pueden definir plantillas ARM o Bicep declarativas que especifiquen la infraestructura necesaria para implementar las soluciones.

Las plataformas de terceros como Terraform, Ansible, Chef y Pulumi también admiten la IaC para administrar la infraestructura automatizada.