Gestión de la Salida de Datos
Solucionar problemas de hora y zona horaria en Docker

Infraestructura como código vs gestión de configuración vs aprovisionamiento de infraestructura

Infraestructura como código

En el vertiginoso mundo de la tecnología, donde los cambios son constantes y la agilidad es clave, los profesionales de DevOps se enfrentan a un desafío fundamental: ¿cómo gestionar eficientemente la infraestructura?

En este artículo, exploramos tres enfoques cruciales: Infraestructura como Código (IaC), Gestión de Configuración y Aprovisionamiento de Infraestructura. Cada uno tiene su papel en la orquestación de sistemas, y entender sus diferencias es esencial para tomar buenas decisiones.

Índice:

Si te estás formando como ingeniero DevOps puede que te confundas entre los casos de uso de Terraform y las herramientas de gestión de configuraciones como Ansible, Chef, Puppet, etc. Es esencial entender la diferencia entre infraestructura como código, aprovisionamiento de infraestructura y gestión de la configuración.

Veamos algunos de los fundamentos desde el punto de vista de la infraestructura antes de pasar a los conceptos clave.

  1. Infraestructura: La infraestructura se refiere a la combinación de componentes de hardware y software que conforman el entorno de TI, como servidores, almacenamiento, dispositivos de red, dispositivos de cortafuegos, enrutadores, etc.
  2. Aprovisionamiento: En TI, el aprovisionamiento es el proceso de crear infraestructura y ponerla a disposición de los usuarios finales.
  3. Configuración: Es el proceso de configurar los recursos de infraestructura de TI provisionados. Por ejemplo, instalar y configurar una base de datos en un servidor o configurar los ajustes de red y cortafuegos.
  4. Automatización: Es el proceso de automatizar tareas de infraestructura, como automatizar la instalación de paquetes de software, configurar usuarios y permisos o configurar dispositivos de red.
  5. Orquestación: La orquestación es el proceso de coordinación de múltiples tareas de automatización. El resultado de una tarea de automatización puede utilizarse como entrada para otra, lo que permite un workflow más complejo y racionalizado. Por ejemplo, para desplegar un servidor, es posible que primero tenga que aprovisionar recursos de red y, a continuación, utilizar el resultado de esa automatización (detalles de red) para desplegar el servidor.

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

Cuando se trata de automatización de infraestructuras, a menudo se oye el término infraestructura como código, también conocido como IaC.

Tradicionalmente, la infraestructura de TI (servidores, almacenamiento, red, etc.) se aprovisionaba manualmente o mediante herramientas. No existía un portal de autoservicio. Como resultado, una solicitud de aprovisionamiento de un servidor o una red podía tardar días o semanas en completarse.

Pero con la llegada de la computación en nube, el aprovisionamiento de infraestructura se ha convertido en algo sencillo, ya que los proveedores de la nube abstraen la mayor parte de las configuraciones complejas mediante la virtualización y las redes definidas por software (nubes privadas y públicas). Puede aprovisionar la red, los servidores y el almacenamiento en unos minutos.

Y lo mejor es que todo está basado en API. Todos los proveedores de nubes exponen APIs para interactuar con su plataforma para aprovisionar infraestructura. Si está basada en API, puedes utilizar cualquier lenguaje de programación para gestionar tu infraestructura informática. Y no sólo para aprovisionar, sino también para configurar los recursos aprovisionados mediante código.

Si utiliza código para aprovisionar y configurar la infraestructura, se denomina IaC (IaC). En pocas palabras, codificar el aprovisionamiento y la configuración de la infraestructura.

Con el concepto de IaC, puede seguir el mismo workflow que utiliza para el desarrollo de aplicaciones para el desarrollo de IaC. Es decir, versionar el código de la infraestructura en git, ejecutar pruebas unitarias y de integración y, a continuación, desplegarlo.

Con el tiempo, muchas herramientas han evolucionado para simplificar la IaC. Estas herramientas abstraen aún más la complejidad del código utilizando sus lenguajes específicos de dominio. En el backend, utiliza llamadas a API específicas de la nube para aprovisionar y gestionar los recursos. Ayuda a los administradores de sistemas e ingenieros sin conocimientos de programación a adoptar la IaC.

🚀 Ventajas del IaC

A continuación se enumeran algunos de los principales beneficios de la IaC

  1. Con IaC, puede recrear cualquier infraestructura compleja con un solo clic.
  2. Puede controlar la versión del estado de su infraestructura en forma de IaC.
  3. Workflow centrado en el desarrollador en la gestión de infraestructuras. Al igual que en el desarrollo de aplicaciones, una práctica estándar para el código IaaC es seguir todas las prácticas de codificación estándar, como pruebas, revisión, etc. Muchas empresas siguen la CAI basada en pruebas desarrollada para tener sistemas de cambio de infraestructura infalibles.

🛠️ Herramientas IaC

Las herramientas IaaC pueden ayudarle a automatizar y gestionar todos los componentes de la infraestructura como redes (VPC, subredes, VPNs, tablas de rutas, etc), servidores, servicios gestionados en la nube, aplicaciones, cortafuegos, servicios gestionados en la nube y on-prem, etc.

Las herramientas de IaC más conocidas son Terraform, Pulumi, Ansible, Chef y Puppet. También hay servicios de IaC específicos de la nube como Cloudformation, AWS CDK, etc.

Todas estas herramientas de IaC se dividen principalmente en dos categorías.

  1. Herramientas de aprovisionamiento de infraestructura (Terraform, Cloudformation, etc.)
  2. Herramientas de gestión de configuraciones (Ansible, Chef, Puppet, etc.)

El objetivo principal de las herramientas IaC es llevar el componente de infraestructura al estado deseado declarado por el usuario. Si alguien realiza un cambio manual en el recurso creado por una herramienta de IaC, puede volver a ejecutar el código y devolverlo al estado deseado.

Una vez que tengas listo el código de la infraestructura, puedes utilizarlo para crear un entorno cuando quieras sin mucha intervención manual. Sólo cambiarían los parámetros y el código seguiría siendo el mismo.

La mayoría de las herramientas IaC (de código abierto) pueden utilizarse en cualquier plataforma en la nube o entorno on-prem s sin bloqueo de proveedor, a menos que utilice una herramienta específica de la nube o del proveedor para gestionar su infraestructura.

🧘 Idempotencia

Todas las herramientas de IaC siguen el concepto de idempotencia. Es decir, no importa cuántas veces ejecutes el código, si la infraestructura o configuración ya está presente, no hará ningún cambio.

Por ejemplo, has creado dos servidores utilizando Terraform. Si vuelves a ejecutar el mismo código Terraform, no hará ningún cambio. Sin embargo, supongamos que eliminas manualmente un servidor y vuelves a ejecutar el código terraform. En ese caso, creará sólo un servidor borrado manualmente y mantendrá el estado de dos servidores declarados por el usuario en el código.

🏋️ IaC workflow de alto nivel

La siguiente imagen muestra una visión general de alto nivel del workflow de desarrollo y despliegue de Infraestructura como código. He utilizado la nube de AWS como ejemplo. Aquí el servidor CI/CD orquesta todo el workflow de aprovisionamiento.

Infraestructura como codigo

¿Qué es el aprovisionamiento de infraestructura?

El aprovisionamiento de infraestructura es el proceso de aprovisionamiento de recursos de infraestructura de TI como servidores virtuales, almacenamiento, redes, servicios gestionados en la nube, etc.

Terraform, Pulumi y Cloudformation son ejemplos clásicos de herramientas de aprovisionamiento de infraestructuras. Crea redes, servidores, servicios gestionados, etc. Su objetivo principal es mantener la infraestructura en el estado deseado y reproducirla o actualizarla siempre que sea necesario.

Con las herramientas de aprovisionamiento de infraestructuras, también puedes activar herramientas de gestión de la configuración. Así, por ejemplo, puedes tener código Terraform para crear máquinas virtuales y tener lógica para ejecutar provisionadores Ansible en las máquinas virtuales creadas.

¿Qué es la gestión de la configuración?

La gestión de la configuración es el proceso de configurar los recursos de infraestructura aprovisionados. Por ejemplo, configurar un servidor con las aplicaciones necesarias o configurar un dispositivo cortafuegos.

El objetivo principal de las herramientas de gestión de la configuración es configurar el servidor. Es decir, si quieres automatizar la instalación y configuración de una aplicación (como por ejemplo Nginx) en un servidor, utilizamos una herramienta como Ansible y Chef. Realiza todas las configuraciones de forma idempotente.

Además, estas herramientas ayudan a gestionar la deriva de la configuración. Garantiza que todos los servidores se ejecuten con la misma configuración mencionada en el ansible-playbook o en un cookbook de chef. En el caso de un chef/puppet basado en agentes, si alguien cambia manualmente la configuración del servidor, el agente chef lo devuelve al estado deseado, tal y como se menciona en el libro de recetas.

Todas las herramientas de gestión de la configuración mantienen un inventario de la dirección IP del servidor y las credenciales SSH para conectarse a los servidores. Sin embargo, en entornos de nube donde los servidores se aprovisionan dinámicamente, utiliza un inventario dinámico basado en API para obtener los detalles del servidor.

La siguiente imagen muestra una visión general de alto nivel de cómo funciona una herramienta de gestión de la configuración.

Gestión de la configuración

Otro caso práctico de uso de las herramientas de gestión de la configuración es la creación de imágenes de máquinas virtuales para despliegues de infraestructuras inmutables. Por ejemplo, herramientas como Packer disponen de funciones de aprovisionamiento que permiten utilizar módulos de Ansible, Chef o Puppet para configurar la imagen del servidor con código de aplicación.

Aprovisionamiento de infraestructuras vs gestión de la configuración

La siguiente imagen muestra la clara diferencia entre Aprovisionamiento de Infraestructura y gestión de la configuración

  1. La herramienta de aprovisionamiento de infraestructura Terraform se encarga de proporcionar la red y los servidores
  2. La herramienta de gestión de la configuración Ansible configura las aplicaciones dentro de los servidores aprovisionados por Terraform.
IaC

FAQ del aprovisionamiento de infraestructura y de la gestión de la configuración

  • ¿Se pueden utilizar herramientas de gestión de la configuración para aprovisionar recursos? Sí. Las herramientas de gestión de la configuración admiten el aprovisionamiento de servidores utilizando sus recursos; sin embargo, el enfoque recomendado es utilizar herramientas de aprovisionamiento de infraestructuras completas.
  • ¿Cuál es la diferencia entre orquestación y gestión de la configuración? La orquestación es el proceso de coordinar varios procesos de automatización e integrar distintos conjuntos de herramientas. Al mismo tiempo, la gestión de la configuración configura un servidor con las aplicaciones y configuraciones necesarias.
  • ¿Cuál es un ejemplo práctico de orquestación en DevOps? Un ejemplo práctico de orquestación es un canal CI/CD de Jenkins. Cuando un desarrollador eleva una solicitud de pull o envía código a git, Jenkins se encarga de las pruebas, el empaquetado, la creación de recursos de infraestructura y el despliegue de aplicaciones en el servidor. Aquí Jenkins orquesta todo el proceso integrando múltiples herramientas DevOps y ejecutando la automatización en orden.

Conclusión

En la encrucijada entre IaC, aprovisionamiento de infraestructura y gestión de la configuración, la clave radica en comprender sus roles y aplicaciones específicas. La sinergia entre estas prácticas abre la puerta a entornos eficientes, flexibles y ágiles, allanando el camino para aquellos que buscan consolidar sus habilidades en el apasionante mundo de DevOps.

En última instancia, la elección de la estrategia adecuada dependerá de los objetivos y requisitos únicos de cada proyecto.

Herramientas mencionadas:

Más apuntes

Invítame a un café con bitcoins:
1QESjZDPxWtZ9sj3v5tvgfFn3ks13AxWVZ

Bitcoins para café
También puedes invitarme a algo para mojar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar