Como desarrollador, rápidamente adquirí el hábito de buscar ayuda varias veces al día, por lo que me sorprende cuando escucho que los equipos de operaciones están abordando la automatización de su infraestructura con muchos procesos manuales. Hola a todos, mi nombre es César y hoy quiero hablar sobre Ansible. Ansible es una herramienta de automatización de infraestructura de código abierto desarrollada inicialmente por Red Hat y que te permite abordar todos los principales desafíos que conlleva la infraestructura, ya sea con código o, en otros términos, infraestructura como código.
Índice
Provisionamiento
Ansible tiene tres usos principales, y comenzaré por el primero, que es el caso de uso de aprovisionamiento. El primer paso de cualquier tienda de infraestructura es tener alguna infraestructura en primer lugar. Supongamos que, utilizando Ansible, ya hemos creado un entorno, digamos una VPC en mi proveedor de nube favorito, y dentro de esta VPC tengo tres máquinas virtuales. Estas máquinas virtuales serán nuestros hosts en el mundo de Ansible, a los que llamaremos inventario. Dentro de este inventario, incluso podemos crear más subcategorías, que Ansible llama patrones. Supongamos que estas máquinas virtuales tienen diferentes tareas subyacentes y casos de uso y servicios que se ejecutarán en ellas. Llamaremos a las dos primeras máquinas virtuales «web» porque se utilizarán como servidores web, y llamaremos a la última «db» porque ejecutaremos una base de datos MySQL en ella. Ahora tenemos nuestra infraestructura provisionada y queremos pasar al siguiente tema.
Configuración
Ansible es muy bueno en la gestión de la configuración, y diría que este es el caso de uso principal en el que la mayoría de las personas piensan cuando comienzan a usar Ansible. Esto se refiere a la capacidad de configurar tu infraestructura real. Un ejemplo sencillo sería algo como parches del sistema operativo o asegurarte de que cierto servicio se esté ejecutando o instalar algún servicio en una máquina virtual. En nuestro caso de uso de hoy, nos centraremos en cómo podemos hacer la gestión de la configuración con estas máquinas virtuales. Uno de los principios clave de Ansible es que es declarativo, lo que significa que declaras lo que quieres en lugar de centrarte en cómo se llega allí. En esencia, se puede considerar también como un enfoque procedimental, ya que las tareas subyacentes que se ejecutan son de naturaleza procedimental, pero como usuario de Ansible, aprovechas el aspecto declarativo, lo que significa que defines lo que quieres en lugar de cómo obtenerlo. Hoy queremos ejecutar algunas tareas en esas máquinas virtuales, digamos que queremos ejecutar algunos parches del sistema operativo, luego instalar un lenguaje de programación y luego instalar MySQL. Necesitamos un playbook para eso.
Ejecución
Un playbook es un conjunto de tareas o una serie de jugadas, y aquí está la primera: queremos ejecutar esto en todos nuestros hosts y simplemente ejecutar un parche de seguridad. Queremos asegurarnos de que todos estén ejecutando la misma versión del mismo sistema operativo. Ahora que tenemos el inventario establecido, podemos definir algunas tareas como parches de seguridad. Cabe mencionar que Ansible utiliza YAML para su naturaleza declarativa, por lo que esto sería en tiempo real una vez que se trabaje con Ansible. Ahora creemos más jugadas. Creemos una jugada que se ejecute directamente en los hosts de nuestros servidores web. Esto tendría un conjunto de tareas como instalar Go y Python y, tal vez, instalar algunos otros servicios específicos para nuestros servidores web. Finalmente, creemos otra jugada en este playbook para ejecutar en nuestros hosts de base de datos, y en lugar de tareas, hablemos de roles. Ansible tiene un concepto de roles que te permite agrupar acciones que se ejecutan varias veces. En lugar de tener que definir todas las tareas cada vez, simplemente definimos los roles y se aprovecharán los módulos y tareas subyacentes que deben ejecutarse. Por cierto, un playbook es una forma de agrupar un conjunto de tareas que debes ejecutar. Es una forma declarativa de hacerlo, pero si realmente quieres mantener las cosas procedurales, puedes ejecutar tareas individuales por separado, de manera imperativa o procedimental. Pero este es el enfoque para hacer una automatización completamente declarativa de un conjunto de tareas contra el conjunto de hosts en tu inventario.
Ansible como una herramienta sin agente
La segunda característica de Ansible es que no necesita un agente para ser ejecutado. A diferencia de muchas otras herramientas de automatización de infraestructura, no necesitas instalar un agente en las máquinas virtuales que se aprovisionaron. Ansible puede aprovechar SSH para ingresar directamente a esas máquinas virtuales y ejecutar las tareas necesarias. Echemos un vistazo a cómo se ve eso. Tomamos nuestro playbook y como usuario ejecutamos Ansible. Ansible puede ejecutarse en la mayoría de los entornos tipo Unix. Ejecutamos nuestro playbook y se ejecutará en nuestras máquinas virtuales. Ahora, aquí hay algo en lo que pensar, es probable que no estemos ejecutando Ansible en nuestra máquina local. Al final del día, se tienen que almacenar claves SSH y muchas otras configuraciones seguras, y no está realmente tratando de ejecutar la automatización desde su máquina local. Hay una capacidad llamada AWX o Ansible Tower, que es el proyecto descendiente de la fuente abierta AWX, esencialmente una interfaz gráfica y un conjunto de APIs que te permiten ejecutar Ansible y operacionalizarlo en toda tu organización. Ya sea que estés utilizando Ansible o Ansible Tower, un usuario ejecutará el playbook y allí lo tenemos, se ejecutará nuestra gestión de la configuración.
Item potent
La tercera característica que quiero mencionar de Ansible es que es idempotente. ¿Qué significa esto? Item potent se refiere a una operación que se puede ejecutar varias veces sin cambiar más allá de la aplicación inicial. En otras palabras, la primera vez que ejecuto esta operación, debería reconocer que los parches de seguridad deben instalarse, los servicios deben instalarse, Python, Go y MySQL o lo que sea, tiene que hacer eso. La segunda vez que ejecute ese mismo playbook, reconocerá que ya se hizo y dirá que no hay nada más que hacer. Pero digamos que vuelvo el segundo día y digo: «Oh, en realidad, necesitamos actualizar la versión del sistema operativo de 1.0 a 1.1», y ejecutamos ese mismo playbook en Ansible o Ansible Tower y lo reconoce y dice que ese sistema operativo ha cambiado, pero nada más. Solo ejecutará la única acción que debe resolver esa diferencia.
Un aspecto importante a considerar es que todas estas tareas tienen módulos subyacentes que las alimentan y debes asegurarte de que los módulos mismos estén programados de manera idempotente. Esto es importante y me lleva a mi último punto: Ansible es impulsado por la comunidad. Eso significa que si intento hacer estas cosas en un playbook que describí hoy, lo más probable es que alguien ya haya desarrollado los playbooks, módulos y tareas que necesito para realizar esas operaciones. Estos están publicados como colecciones en lo que se llama Ansible Galaxy, que es un repositorio donde los desarrolladores pueden contribuir con sus módulos, playbooks o tareas de Ansible creadas en el ecosistema. Esa es una de las grandes cosas de Ansible, es tan impulsado por la comunidad que es probable que encuentres lo que necesitas automatizar en la Galaxia de Ansible. Un pequeño consejo, asegúrate de ejecutar estas operaciones localmente, asegúrate de que sean idempotentes y asegúrate de que ejecutarlas múltiples veces responda de una manera predecible.
Resumen
En resumen, hemos hablado de cómo Ansible es un lenguaje declarativo que no requiere un agente para ejecutarse en entornos de máquinas virtuales. Es idempotente según los módulos que utilizas para ayudarte a evitar problemas como la deriva de configuración asegurándote de que cualquier cambio que realices se realice en tu historia de automatización de infraestructura, ya sea mediante playbooks, roles o módulos. Y por último, puedes estar tranquilo sabiendo que lo que necesitas automatizar probablemente esté disponible en la comunidad.
Despliegue de aplicaciones
La tercera caso de uso que mencioné, hay tres cosas que puedes hacer con Ansible, es el despliegue de aplicaciones. No entraré en muchos detalles aquí hoy sobre el caso de uso de despliegue de aplicaciones, pero la realidad es que puedes usar Ansible para llevarlo un paso más allá y implementar tus aplicaciones web y cargas de trabajo reales en las máquinas virtuales. Esto también es una capacidad disponible en Ansible.
Preguntas frecuentes
A continuación, se muestra una tabla resumiendo la información del artículo:
Características de Ansible | Descripción |
---|---|
Provisionamiento | Crear infraestructura y hosts |
Configuración | Gestionar la configuración de la infraestructura |
Ejecución | Ejecutar playbooks en los hosts |
Ansible como herramienta sin agente | Capacidad de realizar tareas sin instalar un agente |
Item potent | Capacidad de ejecutar operaciones varias veces sin cambiar más allá de la aplicación inicial |
Comunidad impulsada | Recursos disponibles en Ansible Galaxy |
Despliegue de aplicaciones | Implementar aplicaciones web y cargas de trabajo en las máquinas virtuales |
¿Ansible es compatible con diferentes proveedores de nube?
Sí, Ansible es compatible con una variedad de proveedores de nube, lo que te permite automatizar la infraestructura en diferentes entornos de nube.
¿Es seguro ejecutar Ansible en mi máquina local?
En general, no se recomienda ejecutar Ansible en tu máquina local debido a consideraciones de seguridad. Se recomienda utilizar herramientas como AWX o Ansible Tower para ejecutar Ansible de manera operativa y segura en tu organización.
¿Cómo encuentro las colecciones necesarias en Ansible Galaxy?
Puedes buscar las colecciones necesarias en Ansible Galaxy utilizando palabras clave relacionadas con tus necesidades. Además, también puedes explorar las categorías disponibles para encontrar colecciones relevantes.
Espero que esto haya sido útil. Si te gustó este artículo o tienes algún comentario, no dudes en dar un «Me gusta» o comentar a continuación. ¡Mantente atento y síguenos para más artículos como este en el futuro! Gracias.
¿Te ha resultado útil??
0 / 0
Hola, somos Mila Jiménez y César Sánchez. Dos apasionados de la ciberseguridad con muchos años de experiencia. Hemos trabajado en muchas empresas del mundo TI y ahora nos apetece compartir nuestro conocimiento con cualquiera que lo necesite.
¡Si te gusta nuestro contenido puedes invitarnos a un café AQUÍ!