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 DevOpsBeneficios
Reducir el ciclo de desarrolloMayor agilidad y adaptabilidad
Incrementar la frecuencia de despliegueEntrega continua de valor al negocio
Automatización de procesosMinimizar errores humanos y aumentar la productividad
Colaboración entre equiposAlineació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.

Ansible

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.

Integración de Ansible

HerramientaDescripciónBeneficios de la integración con Ansible
GitSistema de control de versionesControl de versiones, colaboración, trazabilidad de cambios
JenkinsHerramienta de integración continuaAutomatización del proceso de despliegue, CI/CD
DockerPlataforma de contenedoresAutomatizació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

  1. https://medium.com/@notfrannco/infraestructura-como-código-con-ansible-parte-1-fdfb627cf019
  2. https://netmind.net/infraestructura-iac-y-ansible/
  3. https://www.redhat.com/es/topics/automation/how-to-adopt-automation-as-code
  4. https://www.redhat.com/es/topics/automation/learning-ansible-tutorial
  5. https://keepcoding.io/blog/5-ventajas-ansible/
  6. https://www.redhat.com/es/topics/automation/what-is-infrastructure-as-code-iac
  7. https://www.redhat.com/es/topics/automation/ansible-vs-terraform
  8. https://www.redhat.com/es/technologies/management/ansible/ansible-vs-red-hat-ansible-automation-platform
  9. https://www.redhat.com/es/topics/automation/what-is-an-ansible-role
  10. https://sentrio.io/blog/practicas-de-infraestructura-como-codigo-iac/

Deja un comentario