Infraestructura como código - Infrastructure as code

La infraestructura como código ( IaC ) es el proceso de administrar y aprovisionar centros de datos informáticos a través de archivos de definición legibles por máquina, en lugar de la configuración de hardware físico o las herramientas de configuración interactivas. La infraestructura de TI administrada por este proceso comprende tanto equipos físicos, como servidores bare-metal , como máquinas virtuales y recursos de configuración asociados. Las definiciones pueden estar en un sistema de control de versiones . Puede usar scripts o definiciones declarativas, en lugar de procesos manuales, pero el término se usa con más frecuencia para promover enfoques declarativos .

Visión general

IaC creció como respuesta a la dificultad planteada por la informática de utilidad y los marcos web de segunda generación. En 2006, el lanzamiento de Amazon Web Services ' Elastic Compute Cloud y la versión 1.0 de Ruby on Rails pocos meses antes de los problemas de escala generalizadas creados en la empresa que anteriormente se experimentó sólo a las grandes empresas, multinacionales. Con la aparición de nuevas herramientas para manejar este campo en constante crecimiento, nació la idea de IaC. La idea de modelar la infraestructura con código y luego tener la capacidad de diseñar, implementar y desplegar la infraestructura de aplicaciones con las mejores prácticas de software conocidas atrajo tanto a los desarrolladores de software como a los administradores de la 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.

Ventajas

El valor de IaC se puede dividir en tres categorías medibles: costo, velocidad y riesgo. La reducción de costos tiene como objetivo ayudar no solo a la empresa financieramente, sino también en términos de personal y esfuerzo, lo que significa que al eliminar el componente manual, las personas pueden reorientar sus esfuerzos hacia otras tareas empresariales. La automatización de la infraestructura permite acelerar la ejecución al configurar su infraestructura y tiene como objetivo brindar visibilidad para ayudar a otros equipos de la empresa a trabajar de manera más rápida y eficiente. La automatización elimina el riesgo asociado con el error humano, como la mala configuración 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 .

Desventajas

IaC utiliza archivos de definición legibles por máquina, y puede que sea Turing completo o no . La falta de finalización de Turing puede impedir que un autor ofrezca pruebas de software en el mismo idioma que la definición de infraestructura. La falta de pruebas puede provocar una falta de confianza en las implementaciones de infraestructura o introducir una barrera alta para la entrada a las pruebas.

Tipos de enfoques

En general, hay dos enfoques de IaC: declarativo (funcional) frente a 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; losimperative se centra en cómo se cambiará la infraestructura para cumplir con esto. El enfoque declarativo define el estado deseado y el sistema ejecuta lo que debe suceder para lograr ese estado deseado. Imperativo define comandos específicos que deben ejecutarse en el orden apropiado para terminar con la conclusión deseada.

Métodos

Hay dos métodos de IaC: empujar y tirar . La principal diferencia es la forma en que se indica a los servidores cómo deben configurarse. En el método de extracción, el servidor que se configurará extraerá su configuración del servidor de control. En el método de envío, el servidor de control envía la configuración al sistema de destino.

Instrumentos

Hay muchas herramientas que cumplen con las capacidades de automatización de la infraestructura y utilizan IaC. En términos generales, cualquier marco o herramienta que realice cambios o configure la infraestructura de manera declarativa o imperativa en función de un enfoque programático se puede considerar IaC. Tradicionalmente, las herramientas de administración de configuración y automatización del servidor (ciclo de vida) se usaban para lograr IaC. Ahora, las empresas también están utilizando herramientas de automatización de configuración continua o marcos de IaC independientes, como PowerShell DSC de Microsoft o AWS CloudFormation .

Automatización continua de la configuración

Todas las herramientas de automatización de configuración continua (CCA) se pueden considerar como una extensión de los marcos tradicionales de IaC. Aprovechan 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. Estos atributos adicionales brindan seguridad y cumplimiento a nivel empresarial.

Contenido de la comunidad

Un aspecto importante al considerar las herramientas CCA, si son de código abierto, es el contenido de la comunidad. Como afirma Gartner , el valor de las herramientas CCA es "tan dependiente 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". Vendedores como Puppet y Chef , aquellos que han existido por una cantidad significativa de tiempo, han creado sus propias comunidades. Chef tiene Chef Community Repository y Puppet tiene PuppetForge . Otros proveedores confían en comunidades adyacentes y aprovechan otros marcos de IaC como PowerShell DSC. Están surgiendo nuevos proveedores que no se basan en el contenido, sino en modelos con la inteligencia en el producto para entregar contenido. Estos sistemas visuales y orientados a objetos funcionan bien para los desarrolladores, pero son especialmente útiles para DevOps orientados a la producción y componentes de operaciones que valoran los modelos frente a las secuencias de comandos para el contenido. A medida que el campo continúe 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 dirigidas por modelos y orientadas a objetos.

Las herramientas CCA notables incluyen:

Herramienta Publicado por Método Acercarse Escrito en Comentarios
Cocinero Chef (2009) Jalar Declarativo e imperativo Rubí -
Nutria Inedo Empujar Declarativo e imperativo - Orientado a Windows
Marioneta Marioneta (2005) Jalar Declarativo e imperativo C ++ y Clojure desde 4.0, Ruby -
SaltStack SaltStack Empujar y jalar Declarativo e imperativo Pitón -
CFEngine Northern.tech Jalar Declarativo C -
Terraform HashiCorp (2014) Empujar Declarativo Ir -
Torre Ansible / Ansible Red Hat (2012) Empujar Declarativo e imperativo Pitón -

Otras herramientas incluyen AWS CloudFormation , cdist , StackStorm , Juju y Pulumi .

Relación con DevOps

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 más temprano en el proceso de desarrollo. 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. La automatización en general tiene como objetivo tomar el aspecto de confusión y propensión a errores de los procesos manuales y hacerlo más eficiente y productivo. Permitiendo que se creen mejores aplicaciones y software con flexibilidad, menos tiempo de inactividad y una forma rentable en general para la empresa. IaC tiene como objetivo reducir la complejidad que elimina 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 la infraestructura a menudo se incluyen como componentes de una cadena de herramientas de DevOps .

Relación con la seguridad

El Informe de amenazas en la nube de 2020 publicado por la Unidad 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.

Ver también

Referencias