La infraestructura como código ( IaC ) es el proceso de gestión y aprovisionamiento de recursos 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 interactivas. [1] La infraestructura de TI administrada por este proceso comprende tanto equipos físicos, como servidores físicos , como máquinas virtuales y recursos de configuración asociados. Las definiciones pueden estar en un sistema de control de versiones , en lugar de mantener el código a través de procesos manuales. El código en los archivos de definición puede usar scripts o definiciones declarativas, pero la IaC emplea con más frecuencia enfoques declarativos .
La IaC surgió como respuesta a la dificultad que planteaban los sistemas de computación de servicios públicos y los marcos web de segunda generación. En 2006, el lanzamiento de Elastic Compute Cloud de Amazon Web Services y la versión 1.0 de Ruby on Rails apenas unos meses antes [2] crearon dificultades generalizadas de escalabilidad en la empresa que antes solo se experimentaban en grandes empresas multinacionales. [3] Con la aparición de nuevas herramientas para manejar este campo en constante crecimiento, nació la idea de la IaC. La idea de modelar la infraestructura con código y luego tener la capacidad de diseñar, implementar e implementar la infraestructura de aplicaciones con las mejores prácticas de software conocidas atrajo tanto a los desarrolladores de software como a los administradores de infraestructura de TI. La capacidad de tratar la infraestructura como código y utilizar las mismas herramientas que cualquier otro proyecto de software permitiría a los desarrolladores implementar aplicaciones rápidamente. [4]
El valor de IaC se puede dividir en tres categorías mensurables: costo, velocidad y riesgo. [ cita requerida ] La reducción de costos tiene como objetivo ayudar no solo a la empresa financieramente, sino también en términos de personas y esfuerzo, lo que significa que al eliminar el componente manual, las personas pueden reenfocar sus esfuerzos en otras tareas empresariales. [ cita requerida ] La automatización de la infraestructura permite la velocidad a través de una ejecución más rápida al configurar su infraestructura y tiene como objetivo proporcionar visibilidad para ayudar a otros equipos en toda la empresa a trabajar de manera rápida y más eficiente. La automatización elimina el riesgo asociado con el error humano, como la configuración incorrecta manual; eliminar esto puede disminuir el tiempo de inactividad y aumentar la confiabilidad. Estos resultados y atributos ayudan a la empresa a avanzar hacia la implementación de una cultura de DevOps , el trabajo combinado de desarrollo y operaciones . [ 5 ]
En general, existen dos enfoques para la IaC: declarativo (funcional) e imperativo (procedimental). La diferencia entre el enfoque declarativo y el imperativo es esencialmente "qué" versus "cómo" .El enfoque declarativo se centra en cuál debería ser la configuración de destino final;El imperativo se centra en cómo se debe cambiar la infraestructura para cumplir con este objetivo. [6] El enfoque declarativo define el estado deseado y el sistema ejecuta lo que debe suceder para alcanzar ese estado deseado. El imperativo define comandos específicos que deben ejecutarse en el orden apropiado para llegar a la conclusión deseada. [7]
Existen dos métodos de IaC: push y pull . La principal diferencia es la manera en que se les indica a los servidores cómo deben configurarse. En el método pull, el servidor que se va a configurar obtendrá su configuración del servidor controlador. En el método push, el servidor controlador envía la configuración al sistema de destino. [8]
Existen muchas herramientas que cumplen con las capacidades de automatización de infraestructura y utilizan IaC. En términos generales, cualquier marco o herramienta que realice cambios o configure la infraestructura de manera declarativa o imperativa según un enfoque programático puede considerarse IaC. [9] Tradicionalmente, se utilizaban herramientas de automatización de servidores (ciclo de vida) y gestión de configuración para lograr IaC. Ahora, las empresas también utilizan herramientas de automatización de configuración continua o marcos de IaC independientes, como PowerShell DSC de Microsoft [10] o AWS CloudFormation . [11]
Todas las herramientas de automatización de configuración continua (CCA) pueden considerarse una extensión de los marcos de IaC tradicionales. Aprovechan la IaC para cambiar, configurar y automatizar la infraestructura, y también brindan visibilidad, eficiencia y flexibilidad en la forma en que se administra la infraestructura. [3] Estos atributos adicionales brindan seguridad y cumplimiento a nivel empresarial.
El contenido de la comunidad es un determinante clave de la calidad de una herramienta CCA de código abierto. Como afirma Gartner , el valor de las herramientas CCA "depende tanto del contenido y el soporte aportados por la comunidad de usuarios como de la madurez comercial y el rendimiento de las herramientas de automatización". [3] Los proveedores establecidos como Puppet y Chef han creado sus propias comunidades. Chef tiene Chef Community Repository y Puppet tiene PuppetForge . [12] Otros proveedores dependen de comunidades adyacentes y aprovechan otros marcos de IaC como PowerShell DSC. [10] Están surgiendo nuevos proveedores que no están impulsados por el contenido, sino por modelos con la inteligencia en el producto para entregar contenido. Estos sistemas visuales orientados a objetos funcionan bien para los desarrolladores, pero son especialmente útiles para los componentes de operaciones y DevOps orientados a la producción que valoran los modelos frente a la creación de scripts para el contenido. A medida que el campo continúa desarrollándose y cambiando, el contenido basado en la comunidad será cada vez más importante para la forma en que se utilizan las herramientas de IaC, a menos que estén impulsadas por modelos y orientadas a objetos.
Las herramientas CCA notables incluyen:
Otras herramientas incluyen AWS CloudFormation , cdist , StackStorm , Juju y Step CI.
IaC puede ser un atributo clave para habilitar las mejores prácticas en DevOps . Los desarrolladores se involucran más en la definición de la configuración y los equipos de operaciones se involucran antes en el proceso de desarrollo. [13] Las herramientas que utilizan IaC brindan visibilidad al estado y la configuración de los servidores y, en última instancia, brindan visibilidad a los usuarios dentro de la empresa, con el objetivo de unir a los equipos para maximizar sus esfuerzos. [14] La automatización en general tiene como objetivo eliminar la confusión y el aspecto propenso a errores de los procesos manuales y hacerlos más eficientes y productivos. Permitiendo que se creen mejores aplicaciones y software con flexibilidad, menos tiempo de inactividad y una forma general rentable para la empresa. IaC tiene como objetivo reducir la complejidad que mata la eficiencia de la configuración manual. La automatización y la colaboración se consideran puntos centrales en DevOps; las herramientas de automatización de infraestructura a menudo se incluyen como componentes de una cadena de herramientas de DevOps . [15]
El Informe de amenazas en la nube de 2020 publicado por Unit 42 (la unidad de inteligencia de amenazas del proveedor de ciberseguridad Palo Alto Networks ) identificó alrededor de 200.000 vulnerabilidades potenciales en la infraestructura como plantillas de código. [16]