Forma en la que la infraestructura como código (IaC) gestiona infraestructuras complejas

Ian Buchanan Ian Buchanan

Resumen: la infraestructura como código (IaC) es un proceso de gestión de la infraestructura de TI que aplica las prácticas recomendadas desde el desarrollo de software de DevOps hasta la gestión de los recursos de la infraestructura en la nube.

El auge de la virtualización del hardware a mediados de la década de 2000 generó nuevas oportunidades de alojamiento de infraestructuras en la nube. Los proveedores de alojamiento en la nube comenzaron a ofrecer acceso a plataformas dinámicas de infraestructura como servicio (IaaS). A medida que estas plataformas crecían y empezaban a ofrecer activos de infraestructura más complejos, la complejidad de una función de administración de sistemas tradicional también aumentaba. La necesidad de configurar y gestionar con rapidez infraestructuras complejas en la nube se convirtió rápidamente en un reto.

La idea de la infraestructura como código (IaC), o el modelado de la infraestructura con el código, la estimuló el éxito que tuvieron la CI y la CD. La metodología DevOps demostró lo productivo que resultaba confirmar el código en un repositorio de Git y, a continuación, aplicar ramas de funciones y flujos de trabajo de solicitudes de incorporación de cambios. La automatización que estos flujos de trabajo aportaron al desarrollo de software ayudó a reducir la nueva complejidad de la administración de sistemas en la nube.

¿Qué es la infraestructura como código?

La infraestructura como código es un proceso de gestión de la infraestructura de TI que aplica prácticas recomendadas del desarrollo de software de DevOps a la gestión de los recursos de infraestructura en la nube. Los recursos de infraestructura aplicables son máquinas virtuales, redes, equilibradores de carga, bases de datos y otras aplicaciones en red.

La IaC es una forma de gestión de la configuración que codifica los recursos de infraestructura de una organización en archivos de texto. Estos archivos de infraestructura se envían a un sistema de control de versiones como Git. El repositorio de control de versiones permite los flujos de trabajo de ramas de función y de solicitudes de incorporación de cambios, que son dependencias fundamentales de la CI y la CD.

La infraestructura como código es posible gracias al auge de las plataformas de alojamiento de infraestructuras en la nube, concretamente las plataformas de IaaS. La IaaS permite el aprovisionamiento y la solicitud de recursos en la nube bajo demanda a través de API remotas, que establecen la plantilla de las propiedades confirmadas en los archivos de configuración de la infraestructura. Las funciones de automatización de la IaC pueden tomar los archivos de configuración y ejecutarlos a través de las API remotas de IaaS.

Una vez que un equipo ha confirmado la configuración de la infraestructura en el control de versiones, puede aplicar las prácticas de la CI y la CD a los cambios en la infraestructura. Las actualizaciones de la infraestructura puede seguir un flujo de trabajo de DevOps. Si un miembro del equipo ha editado uno de los archivos de texto de configuración, las solicitudes de incorporación de cambios y los flujos de trabajo de revisiones de código se pueden utilizar para comprobar y verificar la corrección de los cambios. Además, un sistema de infraestructura como código habilitado para DevOps utilizará implementaciones y reversiones automáticas de la infraestructura.

¿Por qué es importante la infraestructura como código?

La IaC evolucionó para ayudar a resolver el problema de las “diferencias entre entornos”. Las aplicaciones en la nube suelen tener entornos de implementación independientes para las etapas del ciclo de vida de su publicación. Es habitual disponer de entornos de desarrollo, de ensayo y de producción. Estos entornos se componen de recursos en red como servidores de aplicaciones, equilibradores de carga y bases de datos. Las diferencias entre entornos se producen cuando la infraestructura entre los diversos entornos no se sincroniza.

Sin IaC, la gestión de la infraestructura puede ser un proceso desorganizado y frágil. Los administradores de sistemas se conectan de forma manual a los proveedores remotos de la nube y utilizan la API o los paneles web para aprovisionar hardware y recursos nuevos. Este flujo de trabajo manual no ofrece una visión global de la infraestructura de la aplicación. Los administradores pueden realizar cambios de forma manual en un entorno y olvidarse de hacer un seguimiento en el otro. Así es como se producen las diferencias entre entornos.

Las diferencias entre entornos se convierten en un caro despilfarro empresarial. Los errores y los fallos se producen porque los equipos trabajan en un entorno de ensayo o de desarrollo y, luego, al implementar el código, descubren que el entorno de producción no está sincronizado, lo que se deriva en una larga investigación para hallar el motivo y el elemento que falta.

Sin IaC, la gestión manual de la infraestructura es un proceso lento. Si se identifica un cambio de infraestructura necesario debido a las diferencias entre entornos, los picos de tráfico o alguna otra incidencia, el administrador de sistemas puede tardar un tiempo indeterminado en reaccionar y adaptarse. Esto se deriva en interrupciones y en la frustración de los clientes. Con la IaC instalada, la infraestructura se puede adaptar automáticamente a los cambios de configuración y reaccionar a los picos de tráfico con funciones de escalado automático.

La infraestructura como código aporta más supervisión y visibilidad a la administración manual de los sistemas. Con los archivos de configuración de la infraestructura confirmados en un repositorio central de control de versiones, todos los miembros del equipo pueden ver y editar los datos de la infraestructura, lo que permite una potente capacidad de revisión. Por ejemplo, si tu equipo se somete a una auditoría de conformidad de la normativa PCI, deberás saber si una parte específica de la infraestructura utiliza el cifrado SSL. Gracias a la IaC, puedes ver con rapidez cómo está configurado el SSL y ejecutar el código para asegurarte de que la infraestructura en vivo coincida con los archivos de configuración, lo que detecta si el SSL está activado. El historial de confirmaciones del control de versiones también sirve de registro para revisar cuándo se ha añadido o eliminado.

¿Cómo funciona la infraestructura como código?

Hay algunas dependencias que deben estar funcionando para lograr plenamente la infraestructura como código.

Alojamiento accesible a distancia o plataforma de alojamiento en la nube de IaaS
La primera y más importante dependencia es el alojamiento accesible a distancia. La herramienta de gestión de la configuración se debe conectar al host remoto y modificarlo. Si la infraestructura remota es autogestionada, tu equipo se debe asegurar de que la herramienta de gestión de la configuración tenga acceso. La plataforma de alojamiento en la nube habilitada para IaaS ofrece API que permiten a los usuarios crear, eliminar y modificar automáticamente los recursos de infraestructura bajo demanda. También se puede acceder a estas API mediante herramientas de gestión de la configuración para automatizar aún más estas tareas. Algunos ejemplos de plataformas de IaaS populares son Digital Ocean, Amazon AWS y Microsoft Azure.

Plataforma de gestión de la configuración
El siguiente requisito para completar la IaC es disponer de una serie de herramientas que se conectan a las API de IaaS y automatizan las tareas comunes. Un equipo puede crear un conjunto de scripts y herramientas. No obstante, supondría mucho trabajo, mantenimiento futuro y, probablemente, tendría un bajo retorno de la inversión. Ya existen muchas plataformas de gestión de la configuración de código abierto que resuelven este problema, como Terraform, Ansible, SaltStack y Chef.

Sistema de control de versiones
Una plataforma de gestión de la configuración utiliza archivos de texto que pueden leer tanto humanos como máquinas, escritos en un lenguaje de marcado como YAML, para declarar tareas y secuencias para que la plataforma las ejecute. Estos archivos de texto pueden tratarse como archivos de código de aplicación y almacenarse en un repositorio del sistema de control de versiones. El repositorio actúa como fuente de información centralizada y permite las solicitudes de incorporación de cambios y la revisión del código. El sistema de control de versiones más popular es Git.

Con estas dependencias en su sitio, pensemos en un supuesto en el que un desarrollador quiere añadir un nuevo servicio de aplicación a un sistema. Dicho supuesto ayuda a mostrar un flujo de trabajo de IaC.

  1. El desarrollador edita un archivo de texto de configuración YAML en la plataforma de gestión de la configuración que ha elegido: Terraform. Los cambios especifican que se requiere un nuevo servidor de alojamiento.
  2. El desarrollador confirma las ediciones en una rama de función en el repositorio de Git. Como el repositorio de Git del proyecto está alojado en Bitbucket, el desarrollador abre una solicitud de incorporación de cambios. Otro miembro del equipo revisa la solicitud de incorporación de cambios y se da cuenta de los nuevos cambios de infraestructura. El miembro del equipo aprueba la solicitud de incorporación de cambios y el desarrollador fusiona la confirmación con la rama principal del repositorio.
  3. Llegados a este punto, se requiere la plataforma de configuración para ejecutar una actualización. El desarrollador puede activar dicha actualización de forma manual. Dado que el equipo utiliza Bitbucket, también tiene acceso a Bitbucket Pipelines y puede automatizar este paso con una canalización.
  4. Tras la ejecución, Terraform interactúa con la IaaS del equipo. Terraform ejecuta una serie de comandos a través de la API de la IaaS con el fin de actualizar la IaaS con la configuración de la infraestructura esperada.

En conclusión...

La IaC es una forma muy productiva de gestión de la configuración que se centra en la automatización de la gestión de la infraestructura de TI en la nube. Una vez que la IaC está en marcha, se puede utilizar para alcanzar niveles de automatización de CI y CD para los cambios en la infraestructura de un proyecto. La IaC facilita mucha información ventajosa sobre la comunicación y la transparencia en torno a los cambios de infraestructura. La IaC requiere un conjunto de dependencias como plataformas de alojamiento y herramientas de automatización, que se encuentran ampliamente disponibles en las empresas de alojamiento modernas.

A continuación
Cloud Bursting