La infraestructura como código es una forma de automatizar. Se basa en el desarrollo de software. Los cambios en sistemas se guardan en archivos específicos (como scripts o playbooks).1 Su objetivo es usar técnicas del desarrollo de software en infraestructura. Así, se aprovechan prácticas como entrega continua y control de versiones.1 Si bien usar scripts para gestionar servidores no es nuevo, la nube y herramientas como Ansible han hecho la diferencia. Estas soluciones, junto a DevOps, han puesto a la infraestructura como código en primer plano.1
Aspectos clave
- La infraestructura como código automatiza la gestión de la infraestructura y reduce el tiempo de implementación.
- Ansible es una herramienta «agentless» que simplifica la administración de servidores mediante playbooks en YAML.
- DevOps y la infraestructura como código buscan disminuir el ciclo de desarrollo y aumentar la frecuencia de despliegue.
- La falta de IaC y DevOps puede generar problemas de inconsistencia al escalar la infraestructura.
- Ansible y otras herramientas IaC como Terraform han popularizado la automatización en el ámbito de la administración de servidores en la nube.
¿Qué es Infraestructura como Código (IaC)?
La infraestructura como código es una forma de automatización. Se basa en el desarrollo de software.2 Los cambios en sistemas y configuraciones se guardan en archivos. Se usan scripts, playbooks o módulos.
Este enfoque ve la infraestructura como si fuera software. Así, podemos usar métodos comunes del desarrollo. Por ejemplo, entrega continua (CD) o control de versiones.2
Definición de Infraestructura como Código
La infraestructura como código es una forma de automatización. Se cimienta en el desarrollo de software.2 Herramientas incluyen Kubernetes, Ansible, Terraform, y más.
Ansible, por ejemplo, usa YAML para describir sistemas en Playbooks.2
Beneficios de IaC
Adoptar IaC trae ventajas como despliegue más rápido y menor coste. También aumenta la fiabilidad.2 Automatizar el despliegue de infraestructura evita errores humanos. Permite usar técnicas de desarrollo en la infraestructura.
Esto incluye control de versiones y pruebas automáticas.2
Prácticas de desarrollo de software aplicadas a la infraestructura
Con IaC, aplicamos métodos de desarrollo a la infraestructura. Por ejemplo, mantener el código en control de versiones. O hacer revisiones de código.2
Esto hace la gestión de infraestructura más fiable. Y facilita el trabajo en equipo.2
Introducción a DevOps
DevOps es más que una forma de trabajar, es una filosofía en el desarrollo de software. Su meta principal es acortar los tiempos de entrega, al tiempo que mejora la calidad y reduce los riesgos.3 Este enfoque revoluciona cómo se ve el desarrollo de software. Hace que todos los que participan en su creación trabajen juntos. Así, aseguran que lo que se entrega sea de alta calidad, de forma continua.
Metodología DevOps
DevOps busca hacer el proceso de desarrollo más ágil. Su objetivo clave es acelerar la llegada de nuevas funciones a los usuarios del negocio.3 Para esto, fomenta la colaboración entre los equipos de desarrollo y operaciones. También promueve la automatización de tareas y la aplicación de técnicas agiles en la infraestructura.
Objetivos de DevOps
Las compañías adoptan DevOps para automatizar sus operaciones de TI en cada fase de su ciclo.3 El uso de OaC y PaC simplifica la realización de tareas diarias. Haciendo que la colaboración entre distintos equipos y la eficiencia de los modelos de operación mejore notablemente.3
Objetivos de DevOps | Beneficios |
---|---|
Reducir el ciclo de desarrollo | Mayor agilidad y adaptabilidad |
Incrementar la frecuencia de despliegue | Entrega continua de valor al negocio |
Automatización de procesos | Minimizar errores humanos y aumentar la productividad |
Colaboración entre equipos | Alineación y sinergia entre desarrollo y operaciones |
Desarrollo de Infraestructura como Código con Ansible
Ansible es una herramienta de automatización. Ayuda a gestionar servidores, aplicaciones y configuraciones fácilmente.2 Permite aplicar configuraciones en varios servidores al mismo tiempo.
Esto hace que seamos más productivos y reducimos errores humanos. Ansible se basa en controladores y nodos. Usa Python para comunicarse con los nodos vía SSH. Así, ejecuta las tareas que le indiquemos en sus playbooks.
Arquitectura básica de Ansible
Ansible es una herramienta sin agente. Esto significa que no necesita agentes extra en los servidores.1 En cambio, usa SSH para conectarse y operar en los servidores.4
Inventario de hosts
El inventario de hosts es clave. Aquí se detallan y agrupan los servidores que Ansible manejará.1 Puedes crear grupos, como «dbservers» o «api», y asignarles servidores. Esto facilita la tarea de administrar solo ciertos servidores con comandos específicos de Ansible.
Playbooks y lenguaje YAML
Los playbooks son en YAML y tienen la lista de tareas a realizar por Ansible.1 Estas tareas se juntan en «plays» para acciones específicas en los servidores. Por ejemplo, puedes instalar apps como PostgreSQL o Nginx con los playbooks.
Componentes clave de Ansible
Ansible tiene módulos, plugins, roles y handlers. Esto hace más fácil automatizar tareas en infraestructura.2
Módulos
Los módulos son como pequeños programas. Realizan tareas específicas en los servidores gestionados por Ansible. Se usan módulos, por ejemplo, el módulo «apt» para instalar cosas en servidores Ubuntu.2
Plugins
Los plugins mejoran la funcionalidad de Ansible. Hay plugins útiles incluidos con Ansible. También es posible crear plugins personalizados. Así, se extienden las posibilidades de Ansible.4
Roles
Los roles reúnen varias tareas en un bloque. Hacen más eficiente la automatización y ayudan a mantener orden en la estructura de los proyectos.2
Handlers
Los handlers son tareas especiales que se activan por otras tareas. Si varias tareas les dicen que actúen, ellos solo responden una vez. Esto evita la repetición de acciones.2
Ventajas de utilizar Ansible
Ansible se destaca por su simplicidad y facilidad de uso. Emplea el lenguaje YAML, comprensible y descriptivo. Así, personas sin amplia experiencia en programación pueden usarlo.5
Es compatible con diversas distribuciones de Linux y macOS. También funciona en Windows mediante máquinas virtuales. Esto lo hace muy versátil en diferentes sistemas.5
Además, Ansible es de código abierto. Esto quiere decir que hay una comunidad activa detrás. Ofrece muchos módulos listos para usar, lo que simplifica crear tareas sin empezar de cero.5
Caso práctico: Provisionar infraestructura con Ansible en AWS
En este escenario de2 [provisionar infraestructura con Ansible en AWS], necesitarás dos cosas. Primero, una cuenta gratuita en AWS. Segundo, debes tener Ansible en tu computadora.2 Después de tener esto listo, podrás empezar a usar Ansible. Lo usarás para configurar una infraestructura en AWS.
Pasos a seguir
Aquí van los pasos: Primero, clona el repositorio de ejemplo que te han dado. Segundo, edita el archivo vars/aws-creds.yml para meter las claves de AWS. Tercero, ajusta el archivo vars/dev-environment.yml. Establece los grupos de seguridad y otras configuraciones.
Cuarto, cambia el ID de la AMI si hace falta. Quinto, usa el playbook de Ansible. Hazlo con el comando ansible-playbook -i hosts provision.yml.6 Usar la infraestructura como código es bueno por varias razones. Hace todo más rápido, hace más fácil controlar la infraestructura y aumenta la productividad al crear apps.6
Comparación de Ansible con otras herramientas IaC
Ansible y Terraform son muy útiles en DevOps, pero se usan de formas diferentes. Terraform orquesta recursos de varios proveedores. Mientras tanto, Ansible sirve para gestionar configuraciones. Ansible utiliza YAML, lo que lo hace más fácil de aprender.7 Terraform, en cambio, es más complejo pero brinda más opciones y módulos.7
Ansible vs Puppet
Ansible y Puppet permiten automatizar tareas de infraestructura. Ansible destaca por su simplicidad. Utiliza YAML, lo que lo hace fácil de entender.8 Por otro lado, Puppet es más complejo pero más potente en entornos difíciles.8
Ansible vs Chef
Ansible y Chef también automatizan infraestructuras pero de manera diferente. Ansible es agentless y usa SSH. Chef necesita agentes instalados en los servidores.8 Ansible es simple y fácil de usar, mientras que Chef da más opciones y se puede personalizar más.8
Integración de Ansible con otras herramientas DevOps
Ansible se puede unir fácilmente a Git. Guardando los playbooks de Ansible en Git, se obtiene control de versiones y se facilita la colaboración entre equipos. También se puede seguir los cambios hechos en la infraestructura.2
Ansible y Git
Al conectar Ansible con Git, los equipos de DevOps pueden seguir cada cambio en la infraestructura. Esto es útil para arreglar problemas más rápido. El control de versiones permite revisar el código y colaborar fácilmente.
Ansible y Jenkins
Ansible se lleva bien con Jenkins. Esto significa que se pueden desplegar las configuraciones automáticamente. Se usan los playbooks de Ansible junto con los flujos de CI/CD. Así se mejora la eficiencia en deployment y se mantienen las configuraciones consistentes.2
Ansible y Docker
Para crear y manejar contenedores Docker, Ansible es ideal. Hace que todo el proceso sea automático. Así, se crean y despliegan contenedores sin problemas en diferentes entornos.4 Usando Ansible con Docker, se logra tener una infraestructura estable y que escala fácilmente en la nube.
Herramienta | Descripción | Beneficios de la integración con Ansible |
---|---|---|
Git | Sistema de control de versiones | Control de versiones, colaboración, trazabilidad de cambios |
Jenkins | Herramienta de integración continua | Automatización del proceso de despliegue, CI/CD |
Docker | Plataforma de contenedores | Automatización de la construcción y gestión de contenedores, estandarización y escalabilidad de infraestructura |
Mejores prácticas para trabajar con Ansible
Usar Ansible de manera eficaz sigue unas reglas importantes. Hay que organizar los playbooks y roles de modo que sean fáciles de mantener. Esto también permite compartirlos con otros equipos fácilmente.9
Es clave cuidar las variables de forma segura. Se pueden usar bóvedas de contraseñas o guardar datos sensibles en sitios seguros.9 Hacer pruebas unitarias y de integración te asegura que todo funcione bien en todas partes.9
Es recomendable tener una estructura clara en los directorios y documentada. Esto ayuda a que todos en el equipo puedan comprender el proyecto y trabajar mejor juntos.9 Además, usar los módulos y plugins de Ansible de la comunidad ayuda a desarrollar más rápido y con más funcionalidades.9
Para terminar, conectar Ansible con software DevOps como Git y Docker es muy útil. Esto mejora la automatización durante toda la vida de la aplicación.10 Siguiendo estas instrucciones, el uso de Ansible será más eficiente. Así conseguirás mejores resultados en la gestión de tu infraestructura.10
Enlaces de origen
- https://medium.com/@notfrannco/infraestructura-como-código-con-ansible-parte-1-fdfb627cf019
- https://netmind.net/infraestructura-iac-y-ansible/
- https://www.redhat.com/es/topics/automation/how-to-adopt-automation-as-code
- https://www.redhat.com/es/topics/automation/learning-ansible-tutorial
- https://keepcoding.io/blog/5-ventajas-ansible/
- https://www.redhat.com/es/topics/automation/what-is-infrastructure-as-code-iac
- https://www.redhat.com/es/topics/automation/ansible-vs-terraform
- https://www.redhat.com/es/technologies/management/ansible/ansible-vs-red-hat-ansible-automation-platform
- https://www.redhat.com/es/topics/automation/what-is-an-ansible-role
- https://sentrio.io/blog/practicas-de-infraestructura-como-codigo-iac/