Este artículo tiene varios problemas. Ayúdenos a mejorarlo o a discutir estos problemas en la página de discusión . ( Aprenda cómo y cuándo eliminar estos mensajes )
|
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]
La infraestructura como código (IaC) permite gestionar servidores y sus configuraciones mediante código. Existen dos formas de enviar estas configuraciones a los servidores: los métodos ' push ' y ' pull '. En el método 'push', el sistema que controla la configuración envía instrucciones directamente al servidor. En el método 'pull', el servidor recupera sus propias instrucciones del sistema que la controla. [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:
Herramienta | Lanzado por | Método | Acercarse | Escrito en | Comentarios |
---|---|---|---|---|---|
Motor CF | Tecnología del norte (1993) | Jalar | Declarativo | do | - |
Marioneta | Marioneta (2005) | Empujar y tirar | Declarativo e imperativo | C++ y Clojure desde 4.0, Ruby | - |
Cocinero | Chef (2009) | Jalar | Declarativo e imperativo | Rubí | - |
Pila de sal | Pila de sal (2011) | Empujar y tirar | Declarativo e imperativo | Pitón | - |
Ansible / Torre Ansible | Sombrero rojo (2012) | Empujar y tirar | Declarativo e imperativo | Pitón | - |
Terraformar | Corporación Hashi (2014) | Empujar | Declarativo e imperativo | Ir | - |
Nutria | Inedo (2015) | Empujar | Declarativo e imperativo | - | Orientado a Windows |
Pulumi | Pulumi (2018) | Empujar | Declarativo e imperativo | Ir |
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]