OpenWebinars

Cloud Computing

Cómo configurar en masa máquinas con herramientas IaC

En este artículo explicamos qué es IaC y cuáles son las herramientas más utilizadas a la hora de configurar en masa máquinas con esta técnica.

Rodolfo Sáenz Escobar

Rodolfo Sáenz Escobar

Experto en Linux

Lectura 11 minutos

Publicado el 24 de marzo de 2023

Compartir

La configuración manual de máquinas puede ser un trabajo tedioso y propenso a errores, especialmente cuando se trata de configurar grandes cantidades de máquinas. Es aquí donde entra en juego la Infraestructura como Código (IaC).

Con IaC, podemos configurar nuestras máquinas y sistemas de manera automatizada, reduciendo los errores y acelerando el proceso de configuración.

En este artículo, hablaremos sobre qué es IaC y las herramientas más comunes utilizadas para configurar en masa máquinas con esta técnica.

Qué es la infraestructura como código (IaC)

Infraestructura como código configura y administra la infraestructura a través de un modelo descriptivo. Se trata de tratar la configuración y el aprovisionamiento de su infraestructura de la misma manera que trata el código fuente de una aplicación.

Los módulos de configuración generalmente se almacenan en sistemas de control de versiones en formatos de código idealmente bien documentados, lo que proporciona una mayor eficacia, reduce los errores y aumenta la velocidad y la eficiencia. IaC es una de las prácticas de una nueva rama de la informática llamada DevOps (Development Operations o Desarrollo de Operaciones traducido al idioma español) que se está convirtiendo en una de las más críticas que se utilizan con la práctica de la Entrega Continua.

Los beneficios que llevan a muchas empresas a migrar a IAC son una infraestructura invariable, sin cambios, un aumento en la velocidad de entrega, escalabilidad, ahorro de costos y mitigación de riesgos.

IaC permite que los equipos de DevOps usen diferentes herramientas y enfoques para controlar y personalizar automáticamente la infraestructura requerida en lugar de configurar manualmente los servidores y los sistemas operativos. Con el aumento de los ciclos de producción y entrega, el uso de herramientas de infraestructura como código (IaC) ha cambiado la forma en que los ingenieros de software diseñan, prueban y lanzan sus aplicaciones.

Especialízate en Cloud Computing
Domina las tecnologías cloud más demandadas. Accede a cursos, talleres y laboratorios prácticos de AWS, Microsoft Azure, Docker, Google Cloud y más.
Comenzar gratis ahora

La necesidad de infraestructura como herramientas de código

Inicialmente, los administradores de TI tenían que instalar servidores manualmente, configurarlos y entregarles programas. Los equipos de red almacenaron y manejaron manualmente los datos de configuración. Este fue un proceso lento y tedioso. Además, este esfuerzo requirió la colaboración de varias personas. El problema más desafiante fue la escalabilidad, ya que los administradores se esforzaron por implementar nuevos servidores lo suficientemente rápido como para mantenerse al día con la velocidad y el alcance de las operaciones comerciales cambiantes. Además, contratar y administrar equipo adicional de técnicos aumentaba significativamente el costo.

Las organizaciones podrían resolver algunos de estos problemas mediante la implementación de instalaciones de nubes múltiples e híbridas. Las disparidades que ocurrían cuando varios miembros del personal realizaban servicios de administración de infraestructura, por otra parte, eran difíciles de controlar. Si bien podían usar scripts para automatizar algunos procesos, mantener la infraestructura en el estado apropiado siempre fue una lucha. Los administradores ahora pueden establecer configuraciones predefinidas para cada recurso de TI en el código fuente y automatizar la administración de la infraestructura utilizando infraestructura como plataformas de código.

Cuáles son los enfoques para escribir infraestructura como código

Los enfoques son para escribir infraestructura como código son: Enfoque declarativo y Enfoque imperativo.

  • Declarativo (funcional): el enfoque declarativo define el estado deseado del objetivo, es decir, cuál debería ser la configuración real del objetivo. Los pasos para configurar un servidor no están definidos. En su lugar, se define la lista de requisitos o el software de terceros necesarios para configurar la infraestructura o el servidor.

  • Imperativo (procedimiento): el enfoque imperativo define los comandos que deben ejecutarse para lograr el resultado deseado. El imperativo se centra en cómo se puede cambiar la infraestructura para lograr el resultado deseado.

Qué herramientas se usan actualmente en IaC

Estas son algunas de las herramientas que actualmente se usan en IaC:

  • Ansible: Desarrollado por Red Hat promueve la idea de la simplicidad. Contribuye a la modernización de TI y ayuda a los equipos DevOps a tener implementaciones de aplicaciones rápidas, confiables y coordinadas. Puede establecer rápidamente múltiples entornos idénticos con líneas de base de seguridad sin preocuparse por cumplir con los requisitos de cumplimiento. En lo que respecta a los negocios, Ansible aporta una ventaja competitiva al brindar tiempo para incorporar la innovación y la estrategia dentro de la organización y alinear la TI con las necesidades comerciales.

    Ansible se considera la forma más sencilla de automatizar el suministro, la configuración y la gestión de aplicaciones e infraestructura de TI. Ansible permite a los usuarios ejecutar playbooks (código previamente escrito) para crear y administrar los recursos de infraestructura necesarios. No utiliza agentes y puede conectarse a servidores y ejecutar comandos a través de SSH (Secure Shell por sus siglas en idioma inglés) que es un protocolo que hace posible acceder a los servidores usando encriptación. Su código está escrito tanto en YAML (YAML Ain’t Markup Language o traducido al español “YAML no es un Lenguaje de Marca”), como en playbooks, lo que facilita la comprensión y el despliegue de las configuraciones. Incluso puede expandir las funciones de Ansible escribiendo sus propios módulos y complementos de Ansible.

  • Chef: se puede contar entre las herramientas IaC más notables de la industria. Chef utiliza el lenguaje de estilo imperativo en el que el usuario tiene que escribir el código y especificar paso a paso cómo lograr el estado deseado. Depende del usuario determinar un proceso de implementación óptimo. Usando su sintaxis basada en el lenguaje de programación Ruby, Chef permite crear procedimientos a manera de recetas y libros de cocina (de allí su nombre), desplegando IaC en un marco cliente-servidor. Estas recetas y libros de cocina especifican los pasos exactos necesarios para lograr la configuración deseada de sus aplicaciones y utilidades en los servidores existentes.

    Esta herramienta de administración de infraestructura se enfoca en implementar y modelar un proceso de automatización de infraestructura escalable y seguro en cualquier entorno deseado. Con Chef, los equipos de DevOps pueden aprovisionar e implementar infraestructura bajo demanda con facilidad. Chef es una de las soluciones de administración de configuración más comunes que utilizan las empresas en sus procesos continuos de integración y entrega.

  • Puppet: es otra herramienta de administración de configuración de código abierto que se usa más comúnmente para mover los hilos en varios servidores de aplicaciones a la vez, Puppet en idioma español significa “marioneta”. También como Chef utiliza un lenguaje de despliegue de IaC con sintaxis basada en Ruby, donde puede describir el estado final deseado de su infraestructura. La principal diferencia entre Puppet y Chef es que utiliza un enfoque declarativo, en el que debe decidir cómo se ven las configuraciones que desea, y luego Puppet descubre cómo llegar allí.

    Puppet se puede definir como una herramienta de IAC muy eficiente que se utiliza para entregar sus infraestructuras de forma rápida y segura. Desarrolladores han creado módulos que ayudan a ampliar la funcionalidad del software. Puppet se integra con casi todos los principales proveedores de plataformas de infraestructura como código en la nube, como AWS, Azure, Google Cloud y VMware, lo que permite la automatización de múltiples nubes.

  • Terraform: de la empresa HashiCorp, es una de las herramientas de código abierto más popular para la automatización de infraestructura. Ayuda a configurar, aprovisionar y administrar la infraestructura como código. Con Terraform, puede planificar y crear fácilmente IaC en múltiples proveedores de infraestructura con el mismo flujo de trabajo. Utiliza el enfoque declarativo para definir la infraestructura requerida como código. Terraform permite a los usuarios tener una verificación previa a la ejecución para validar si las configuraciones cumplen con las expectativas de resultados o no antes de actualizar o aprovisionar la infraestructura. Permite a los usuarios tener su infraestructura deseada a través de múltiples proveedores de nube a través de un flujo de trabajo único y consistente. Puede aprovisionar rápidamente diferentes entornos utilizando la misma configuración y administrar todo el ciclo de vida de su infraestructura deseada, reduciendo así los errores humanos y aumentando la automatización en el proceso de administración y aprovisionamiento de la infraestructura.

  • SaltStack: es una herramienta de administración de configuración de código abierto basada en Python que ofrece una solución simple para aprovisionar, implementar y configurar infraestructuras en cualquier plataforma a alta velocidad.

    Se centra en la automatización de la infraestructura, la seguridad y la red dentro de la organización. Es una herramienta IaC fácil de usar que demuestra ser muy útil durante la mitigación y remediación de problemas comunes de infraestructura. Es una solución IaC segura y rentable que proporciona automatización y orquestación y reduce el esfuerzo manual. Si es necesario, puede detectar automáticamente problemas con activadores de eventos y volver al estado deseado. SaltStack incluso tiene soporte SSH que puede admitir el modo sin agente. Tiene un calendarizador que le permite especificar con qué frecuencia los servidores administrados deben ejecutar su código.

  • AWS CloudFormation: Es una herramienta IaC integrada dentro de la plataforma en la nube de AWS (Amazon Web Services) que le brinda una manera fácil de aprovisionar y administrar de manera rápida y eficiente una colección de múltiples recursos relacionados con AWS e incluso de terceros utilizando Infraestructura como código. Le permite implementar todas las mejores prácticas requeridas de DevOps y GitOps (Sistema de control de versionamiento y operaciones). Con AWS Cloud Formation, se puede administrar fácilmente el escalamiento de sus recursos e incluso automatizar aún más la administración de recursos al integrar AWS Cloud Formation con otros recursos de AWS requeridos. Además de esto, AWS Cloud Formation también le permite usar su CLI (interfaz de comandos) de código abierto para crear sus proveedores de recursos para aprovisionar y administrar los recursos de aplicaciones de terceros junto con los recursos nativos de AWS.

    Los modelos y plantillas para AWS Cloud Formation están escritos en formato YAML o JSON (JavaScript Object Notation por sus siglas en idioma inglés). Solo se necesita codificar su infraestructura deseada desde cero con el lenguaje de plantilla adecuado y usar AWS Cloud Formation para aprovisionar y administrar la pila y los recursos definidos en la plantilla. AWS Cloud Formation también usa Rollback Triggers para restaurar pilas de infraestructura a un estado previamente implementado si se observan errores, para garantizar que la implementación y la actualización de la infraestructura se logren de manera controlada.

  • Azure Resource Manager: es el servicio proporcionado para implementar y administrar los recursos de la plataforma de nube Azure de Microsoft. Una herramienta de IaC específica de Azure permite que los recursos se implementen, mantengan y rastreen en una sola acción colectiva en lugar de individualmente. Incorpora de forma nativa el control de acceso basado en roles en el mecanismo de gestión de recursos para permitir a los usuarios aplicar el control de acceso a todos los recursos dentro de una categoría de recursos.

    Azure Resource Manager permite usar plantillas declarativas en lugar de scripts para administrar su infraestructura. Con el administrador de recursos de Azure se puede volver a implementar rápidamente su solución de infraestructura varias veces a lo largo del ciclo de vida de desarrollo de la aplicación manteniendo sin esfuerzo la coherencia en el estado.

  • Google Cloud Deployment Manager: es un servicio de implementación de infraestructura proporcionado por Google Cloud Platform (servicio de infraestructura en nube de Google) para automatizar la creación, configuración, aprovisionamiento y administración de recursos en Google Cloud Platform. Puede crear fácilmente un conjunto de recursos en la nube de Google y administrarlos convenientemente como una sola unidad. Con YAML o Python, puede crear modelos, obtener una vista previa de los cambios que se realizarán antes de la implementación y ver sus implementaciones en una interfaz de usuario de consola.

    Esta herramienta de Infraestructura como código utiliza un enfoque de lenguaje declarativo para especificar cuál se supone que debe ser la configuración y dejar que el sistema descubra el resto. Google Cloud Deployment Manager proporciona implementaciones simultáneas de muchos recursos a la vez, controla la creación de recursos y crea dependencias de definición de recursos. Las configuraciones de implementación se tratan como código, y esas implementaciones pueden repetirse fácilmente manteniendo la coherencia en su estado.

  • Vagrant: es otra de las mejores herramientas IaC desarrolladas por los creadores de Terraform, HashiCorp. La diferencia es que Vagrant se centra en la creación de entornos informáticos que utilizan una cantidad limitada de máquinas virtuales en lugar de entornos de infraestructura de nube masivos que pueden abarcar cientos o miles de servidores en varios proveedores de nube.

    HashiCorp Vagrant es una herramienta simple pero poderosa enfocada en facilitar los entornos de desarrollo. Promueve el uso de flujos de trabajo unificados al aprovechar los archivos de configuración declarativos que contienen todos los detalles de configuración necesarios. Hace cumplir la coherencia de estado en todos los entornos y admite la integración con herramientas de gestión de configuración existentes como Puppet, Chef, SaltStack y Ansible.

Construye sistemas y aplicaciones en la nube
Lleva la formación de tu equipo al siguiente nivel con cursos, talleres y laboratorios prácticos de AWS, Microsoft Azure, Docker, Google Cloud y más.
Solicitar más información

Conclusión: ¿cuál o cuáles usar?

La respuesta a esta pregunta depende del ambiente en el que el ingeniero DevOps o el SysAdmin que use IaC esté, si se está en un ambiente en el cual tanto el software en IT como en su infraestructura de nube es Microsoft entonces sería ideal escoger Azure Resource Manager por temas de compatibilidad y una integración fácil y práctica, si se trabaja en un ambiente en el cual la infraestructura es mayoritariamente AWS (Amazon Web Services), sería conveniente usar AWS CloudFormation, si por otro lado se trabaja en un ambiente en el cual la infraestructura de IT y las herramientas de trabajo, así como la infraestructura de nube es de Google, entonces sería muy conveniente usar Google Cloud Deployment Manager, si por otro lado se está un ambiente de trabajo en el cual se promueve el uso de herramientas open source, y se enfatiza en usar software libre, entonces se podría usar Terraform, Ansible, Puppet, Chef o SaltStack.

Ahora bien, en todas estas herramientas hay una curva de aprendizaje que se debe de tomar en cuenta, hay que aprender a instalar estas herramientas y aprender a usar su sintaxis, que, dicho sea de paso, en la mayoría de los casos, es fácil de aprender si ya tienes conocimientos de programación, manejas versionamiento con Git y manejas el concepto de Integración Continua/Entrega Continua. Cada una de estas herramientas tienen su página web y hay muchos cursos y material educativo gratuito en internet que ayudan a hacer su implementación relativamente rápida y práctica. Si se desea una atención personalizada y un guía, podrías acudir a clases virtuales impartidas por expertos en estos temas.

Compartir este post

También te puede interesar

Icono de la tecnología
Taller

Visión general sobre Cloud Computing y AWS

Principiante
46 min.

En este taller veremos los principales servicios de AWS, como son los de almacenamiento, computación, redes, entrega de...

Manuel Franco Sánchez
4.4
Icono de la tecnología
Curso

Introducción a Cloud Computing

Principiante
7 h. y 56 min.

Descubre las tecnologías relacionadas con el Cloud Computing y el cambio de paradigma que se está produciendo

Alberto Molina
4.3