GH GambleHub

Ansible: configuración y deploy

(Sección: Tecnologías e Infraestructura)

Resumen breve

Ansible es una herramienta declarativa de configuración y orquestación, ideal para la configuración repetitiva de VM/hosts, servicios y aplicaciones cuando ya se ha creado la infraestructura (Terraform/IaC) y necesita «revitalizar» el entorno: instalar paquetes, desplegar versiones, rodar plantillas, reiniciar servicios sin downtime, aplicar políticas de seguridad. Clave del éxito: estructura modular (roles/colecciones), idempotencia rigurosa, trabajo ordenado con secretos (Vault), inventario dinámico, pruebas y disciplina GitOps.

Cuándo es apropiado Ansible (y cómo se combina con Terraform)

Terraform: crea recursos (VPC, clústeres, DB).
Ansible: configura el sistema operativo/software, patina versiones, impulsa migraciones, regula archivos y servicios.
Ligamento: Terraform lleva 'inventory '/IP/secretos a los artefactos, Ansible los lee en un paso de CD.

Estructura del repositorio (plantilla recomendada)


ansible/
inventories/
prod/
inventory. ini # or inventory. yaml group_vars/
all. yml web. yml db. yml host_vars/
web-01. yml stage/
...
roles/
webapp/
defaults/main. yml vars/main. yml tasks/main. yml handlers/main. yml templates/.j2 files/
meta/main. yml hardening/
...
playbooks/
site. yml deploy_webapp. yml hardening. yml collections/requirements. yml ansible. cfg
ansible. cfg (mínimo):
ini
[defaults]
inventory = inventories/stage/inventory. ini stdout_callback = yaml callbacks_enabled = timer, profile_tasks interpreter_python = auto retry_files_enabled = False forks = 25 host_key_checking = True

Inventario: estático y dinámico

Estático (ini):
ini
[web]
web-01 ansible_host=10. 0. 1. 10 web-02 ansible_host=10. 0. 1. 11

[db]
db-01 ansible_host=10. 0. 2. 10

[all:vars]
ansible_user=ansible ansible_ssh_common_args='-o ProxyJump=bastion@1. 2. 3. 4'

Utilice los complementos de nube (o su propio script) para colocar los hosts en las etiquetas. Variables de entorno/etiquetas → 'group _ vars'.

Roles y

Rol = módulo de reutilización independiente (tareas, archivos, plantillas, handlers).
Colecciones: conjunto de roles/plugins/módulos. Fije los pines de las versiones en 'collections/requirements. yml`.

yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix

Playbooks: escenarios idempotentes

Ejemplo de un playbook compartido:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
Función 'webapp' (fragmentos):
yaml roles/webapp/tasks/main. yml
- name: Install packages:
name: ["nginx", "python3-venv"]
state: present

- name: Template configuration template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: "0644"
notify: Restart nginx

- name: unarchive artifact deploy:
src: "{{ webapp_package_url }}"  # артефакт из CI dest: /opt/webapp remote_src: true creates: /opt/webapp/current

- name: Link to the current version of file:
src: "/opt/webapp/releases/{{ release_id }}"
dest: /opt/webapp/current state: link notify: Reload webapp
Handlers:
yaml roles/webapp/handlers/main. yml
- name: Restart nginx service: { name: nginx, state: restarted }

- name: Reload webapp systemd: { name: webapp, state: reloaded, daemon_reload: true }

Plantillas de Jinja2 y variables

Almacena las variables default en 'defaults/main. yml ', sensibles - en Vault.
Utilice filtros ('| to_nice_yaml',' | b64encode ',' | default ') y condiciones' when '.

Ejemplo 'nginx. conf. j2`:
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

Secretos: Ansible Vault y gestores de secretos

Vault para cifrar archivos de variables ('group _ vars/all. vault. yml`).
Es mejor leer los secretos de los administradores externos (KMS/Secrets Manager/SSM) a través de los módulos adecuados y almacenar sólo enlaces/ARN en Vault.

Archivo cifrado (ejemplo de estructura):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Recomendaciones:
  • Divida el acceso: los desarrolladores ven dev/stage, prod - sólo CI.
  • Habilite la rotación de secretos y la auditoría de acceso.

Idempotencia y cambios correctos

Utilice módulos ('package', 'user', 'lineinfile', 'template', 'systemd') en lugar de' shell/command '.
Marca las tareas «ruidosas» de 'changed _ when: false' si no cambian nada.
Mantenga el modo check ('--check') y diff para los roles.
Para tareas inestables: 'retries', 'delay', 'until'.

Ejemplo:
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200

Productividad: grandes granjas y picos

forks: elevar el paralelismo (con precaución: no sobrecargar el objetivo).
strategy = free: realice tareas sin esperar a los vecinos.
pipelining = True в `ansible. cfg 'reduce RTT.
gather_facts: false donde los hechos no son necesarios.
async/poll para operaciones prolongadas; throttle/serial para las ondas del deboy.
delegate_to y run_once para acciones aisladas (por ejemplo, migración DB).

Patrones de downtime cero

Rolling deploy (20% cada uno)

yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]

Canary

Inicie el playbook con '--limit web-canary' (subconjunto del grupo), compruebe las métricas y, a continuación, gire en todo el grupo.

Blue-Green

Dos grupos de hosts 'web _ blue' y 'web _ green'; por el playbook prepare una nueva ola, luego cambie el tráfico (DNS/LB) por la tarea 'community. general. affiliate_lb'/API su equilibrador.

Seguridad y hardening

Papel hardening: políticas SSH, banners, 'sudo' sin NOPASSWD, firewall, auditd/rsyslog, time-NTP, 'fail2ban'.
Habilite SELinux/AppArmor, administre las políticas a través de módulos.
Bastión: limite el SSH a los objetivos sólo a través del jump-host (ver 'ProxyJump').
Minimice 'become: true'; formalice RBAC a nivel de inventario (quién puede ejecutar qué playbooks).

Windows y hardware de red

Windows: módulos 'win _', conexión WinRM, scripts PowerShell - como el último argumento.
Red: 'network _ cli '/' http papi', módulos para Cisco/Juniper/F5; atomicidad a través de 'save _ when: changed'.

Pruebas y calidad

ansible-lint + yamllint в CI.
Molecule: pruebas de roles locales/contenedores, verificación de idempotencia (doble ejecución sin cambios).
Sandbox: inventario temporal/imágenes de VM individuales.

Ejemplo Molecule (fragmento):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

Integración con CI/CD y GitOps

Paipeline tipo:

1. Lint → Syntax check → Molecule.

2. Construcción de artefactos de aplicación.

3. Deploy: `ansible-playbook -i inventories/prod site. yml --limit web --tags deploy`.

4. Reportaje de hosts alterados, artefacto de registro.

Ejemplo de paso (concepto):
bash ansible-galaxy collection install -r collections/requirements. yml ansible-lint ansible-playbook playbooks/deploy_webapp. yml \
-i inventories/prod/inventory. ini \
-e release_id=${GIT_SHA} --diff

Supervisión y auditoría

Conectar complementos de llamada (json/yaml/timer/profile_tasks): informes de tiempo y cambios.
Guarde los registros de playbooks en un almacenamiento centralizado.
Etiquetar las tareas de 'tags:' para lanzamientos selectivos y agilizar las investigaciones.

Recetas frecuentes para iGaming

Web/API noda: Nginx + systemd-unit, health-checks, secrets of manager, roll-restart.
Servicios de juegos: plantillas de configuración por región/tenante a través de 'group _ vars'.
Conectores de pago: permiches estrictos en las llaves, reinicio por notify, inspección posterior de endpoints.
ETL-jobs: implementación de scripts CronJob c 'cron' módulo, archivo de bloqueo idempotent.
Monitoreo: instalación de agentes (node_exporter/otelcol), auto-registro en el monitoreo.

Antipattern

El uso de 'shell/command' donde hay un módulo.
Los playbucks sin 'handlers' → restarts superfluos y servicios temblorosos.
Almacenar secretos en 'group _ vars' abierto.
Ausencia de 'serial '/' max _ fail _ percentage' en las ondas prod deply.
Global 'gather _ facts: true' y 'become: true' sin necesidad.
Roles sin pruebas Molecule y sin soporte '--check'.
Largos comandos sin 'async/poll' bloqueando toda la ola.

Lista de comprobación de implementación

1. Alinee el marco del repositorio y las convenciones de nombres.
2. Configure el inventario dinámico y el bastión.
3. Arranca roles (webapp/hardening/monitoring) y versiones pin de las colecciones.
4. Habilitar Vault y/o integración con el gestor de secretos.
5. Proporcionar idempotencia, '--check/--diff', handlers y etiquetas.
6. Conectar ansible-lint, yamllint, Molecule en CI.
7. Describir el patrón deploy (rolling/canary/blue-green) y los límites 'serial'.
8. Añadir complementos de llamada, recopilación de registros, informe de cambios.
9. Documentar runbook y reversión y acciones en caso de incidentes.
10. Llevar a cabo regularmente el juego-día: acantilado SSH, caída del nodo, reversión de la versión.

Resultados

Ansible cierra la «última milla» entre la infraestructura creada y la venta en funcionamiento: cambios rápidos, seguros y predecibles en las configuraciones y lanzamientos. Con el papel de unidad de reutilización mínima, inventario dinámico, funcionamiento correcto de los secretos y patrones de downtime cero verificados, Ansible ayuda a los comandos iGaming a reducir el tiempo a deploy, reducir el número de incidentes nocturnos y mantener el p99 en el nivel de SLO.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Telegram
@Gamble_GC
Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.