Curso de Despliegue de Aplicaciones Python en la Nube

Cómo crear un playbook Ansible para deployment

Curso de Despliegue de Aplicaciones Python en la Nube

Cómo crear un playbook Ansible para deployment

Resumen

Automatiza con confianza el deployment de aplicaciones en la nube: con Ansible y archivos YAML reduces errores, ahorras tiempo y obtienes procesos repetibles. Aquí verás cómo pasar de comandos manuales a un playbook idempotente que actualiza paquetes, instala dependencias y clona tu repositorio con Git.

¿Por qué Ansible acelera el deployment en YAML?

La premisa es clara: recordar todos los comandos y archivos modificados en cada cambio es inviable. Ansible centraliza el proceso en un único playbook en YAML que define un conjunto de tareas a ejecutar en uno o varios servidores.

¿Cómo instalar y ejecutar ansible playbook?

  • Instala Ansible con pip en tu equipo local.
pip install ansible
  • Ejecuta el playbook indicando el inventario de hosts y el archivo YAML.
ansible-playbook -i hosts deploy.yml

¿Qué significa idempotencia y el reporte ok vs changed?

  • Idempotencia: si algo ya está en el estado deseado, no cambia.
  • Reporte de Ansible: muestra tareas en estado ok si no hubo cambios y changed si aplicó modificaciones.
  • Beneficio clave: puedes re-ejecutar el playbook con seguridad y consistencia.

¿Cómo definir el inventario hosts y variables seguras?

Primero configura un archivo llamado hosts. Allí listas los servidores de destino y sus parámetros de conexión: IP pública, usuario y llave privada. También puedes declarar variables para el grupo.

¿Cómo estructurar el archivo hosts?

  • Define un grupo, por ejemplo: web servers.
  • Especifica IP, usuario y llave de SSH.
[web servers] IP_PUBLICA ansible_user=USUARIO ansible_ssh_private_key_file=RUTA/LLAVE.pem
  • Puedes gestionar múltiples hosts o aplicaciones en el mismo inventario.

¿Cómo declarar variables de grupo con vars?

  • Añade variables para rutas y llaves de deployment.
[web servers:vars] app_directory=/ruta/de/la/app deploy_key=/ruta/en/el/servidor/llave_deployment
  • Estas variables se referencian en el playbook con la sintaxis de Jinja2: "{{ variable }}".

¿Cómo crear un playbook idempotente con apt y git?

Crea un archivo llamado deploy.yml. Define el nombre, los hosts objetivo y activa become: yes para ejecutar con privilegios de sudo cuando sea necesario. Luego agrega las tasks en orden.

¿Cómo actualizar e instalar paquetes con apt?

  • Actualiza la caché de paquetes con apt.
  • Instala dependencias como nginx mediante listas.
--- - name: Despliegue básico hosts: web servers become: yes tasks: - name: Actualizar paquetes apt apt: update_cache: yes - name: Instalar paquetes necesarios apt: name: - nginx # agrega más paquetes si lo necesitas state: present
  • Al re-ejecutar, si ya están instalados, verás ok en lugar de changed gracias a la idempotencia.

¿Cómo clonar el repositorio con git y keyfile?

  • Usa la tarea git para clonar el proyecto en tu directorio de aplicación.
  • Controla la rama con el parámetro version.
  • Autentica con tu keyfile de deployment.
- name: Clon repo git: repo: "REPO_DEL_PROYECTO" dest: "{{ app_directory }}" version: "RAMA_O_COMMIT" key_file: "{{ deploy_key }}"
  • Si cambias la rama (por ejemplo, de develop a una feature), Ansible marcará la tarea como changed cuando actualice el directorio.
  • Nota práctica mencionada: puede haber verificaciones de host al clonar con llaves. Asegura que la llave esté correctamente instalada y autorizada en el servidor.

¿Cómo usar become para sudo en tareas?

  • Agrega become: yes en el nivel del playbook para aplicar sudo a todas las tareas.
  • Evitas escribir sudo comando por comando y garantizas permisos adecuados.

Habilidades y conceptos aplicados:

  • Automatización de deployment con Ansible y YAML.
  • Inventario de hosts con IP pública, usuario y llave privada.
  • Variables de grupo con :vars y referencia con "{{ variable }}".
  • Tareas con módulos apt y git para actualización, instalación y clonación.
  • Idempotencia: reporte ok vs changed y re-ejecución segura.
  • Uso de become para permisos de sudo.
  • Consideraciones de SSH y verificación de host al clonar.

¿Te gustaría que ampliemos el playbook para Django, Flask o FastAPI, o que integremos Ansible con GitHub Actions? Cuéntame en los comentarios qué stack quieres automatizar y en qué parte te gustaría profundizar.