Configurazione e deposito Ansile
(Sezione Tecnologia e infrastruttura)
Breve riepilogo
Ansable è uno strumento dichiarativo di configurazione e orchestrazione ideale per la configurazione ripetuta di VM/host, servizi e applicazioni quando l'infrastruttura è già stata creata (Terraform/IaC) e devi «rinfrescare» l'ambiente: installare i pacchetti, lanciare i modelli, riavviare i servizi senza downtime, applicare le regole di sicurezza. La chiave per il successo è la struttura modulare (ruoli/raccolte), l'idempotenza rigorosa, la scrupolosa gestione dei segreti (Vault), gli inventari dinamici, i test e la disciplina GitOps.
Quando Ansibile è appropriato (e come si combina con Terraform)
Terraform - Crea risorse (VPC, cluster, database).
Ansable configura il sistema operativo/software, rilascia versioni, esegue migrazioni, gestisce file e servizi.
Raccordo: Terraform visualizza «inventory »/IP/segreti nei manufatti, Ansible li legge in un passaggio CD.
Struttura repository (modello consigliato)
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 (minimo):
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
Inventari statici e dinamici
Statico (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'
Dinamico
Utilizzare i plugin cloud (o il proprio script) per trascinare gli host sui tag. Variabili degli ambienti/tag → 'group _ vars'.
Ruoli e raccolte
Ruolo = modulo di riutilizzo indipendente (attività, file, modelli, handler).
Le raccolte sono un insieme di ruoli/plugin/moduli. Fissare i pin di versione in'collection/prescrizioni '. yml`.
yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix
Script Idempotent di Playbooks
Esempio di playbook condiviso:yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening
- hosts: web become: true roles:
- webapp
Ruolo «webapp» (sezioni):
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
Handler:
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 }
Modelli Ginja2 e variabili
Memorizza le variabili in default in'defaults/main. yml, sensibili a Vault.
Usa i filtri ('| to _ nice _ yaml', '| b64encode', '| default') e le condizioni dì when ".
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}
Segreti: Ansible Vault e gestori di segreti
Vault per crittografare i file delle variabili ('group _ vars/all. vault. yml`).
È meglio leggere i segreti dei gestori esterni (KMS/Secret Manager/SSM) attraverso i moduli appropriati e conservare solo i collegamenti/ARN in Vault.
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Raccomandazioni:
- Separare l'accesso: gli sviluppatori vedono il dave/stage, il prode solo il CI.
- Attivare la rotazione dei segreti e il controllo dell'accesso.
Idoneità e modifiche corrette
Utilizzare i moduli («package», «user», «lineinfile», «template», «systemd») invece di «shell/command».
Contrassegna le attività «rumorose» «changed _ when: false» se non cambiano nulla.
Supporta check mode ('--check') e diff per i ruoli.
Per le attività instabili: «retries», «delay», «untile».
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200
Prestazioni: grandi aziende e picchi
forks: alzare il parallelismo (con attenzione: non sovraccaricare l'obiettivo).
strategy = free: eseguire le operazioni senza attendere i vicini.
pipelining = True в `ansible. cfg'riduce la RTT.
gather _ facts: false dove i fatti non sono necessari.
async/poll per operazioni a lungo termine; throttle/serial per le onde di deploy.
delegate _ to e run _ once per azioni singole (come la migrazione del database).
Cartelli downtime zero
Rolling Deposit (20%)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
Canary
Avvia il playbook con' --limit web canary '(sottoinsieme del gruppo), controlla le metriche, quindi sposta l'intero gruppo.
Blue-Green
Due gruppi host web _ blue e web _ green; con il playbook, preparare la nuova onda, quindi cambiare il traffico (DNS/LB) con "community. general. affiliate _ lb '/API del tuo bilanciatore.
Protezione e hardening
Ruolo hardening: regole SSH, banner, «sudo» senza NOPASSWD, firewall, auditd/rsyslog, tempo-NTP, «fail2ban».
Accendere i SELinux/AppArmor, controllare le regole attraverso i moduli.
Bastione: limitare SSH agli obiettivi solo tramite jump-host (vedere «ProxyJump»).
Minimizza «become: true»; RBAC a livello di inventario (chi può eseguire quali playbook).
Hardware di rete e Windows
Windows: moduli «win _», connessione WinRM, script PowerShell come ultimo argomento.
Network: 'network _ cli '/' httpapi', moduli per Cisco/Juniper/F5; «save _ when: changed».
Test e qualità
ansible-lint + yamllint в CI.
Molecule: test dei ruoli locali/contenitori, test di idampotenza (test doppio senza modifiche).
Cassetta di sabbia: inventari temporanei separati/immagini VM.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
Integrazione con CI/CD e GitOps
Pipline tipica:1. Lint → Syntax check → Molecule.
2. Costruzione degli artefatti dell'applicazione.
3. Deploy: `ansible-playbook -i inventories/prod site. yml --limit web --tags deploy`.
4. Riprodotto degli host modificati, artefatto dei fogli.
Esempio di passo (concetto):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
Osservazione e verifica
Collegare i plugin callback (json/yaml/timer/profile _ tasks) - Report su tempi e cambiamenti.
Salvare i fogli di playbook in uno storage centralizzato.
Contrassegna le attività «tags:» per eseguire e accelerare le attività.
Ricette frequenti per i iGaming
Web/API noda: Nginx + systemd-unit, health-checks, secret manager, roll-restart.
Servizi game: modelli di configure per regione/tenanto tramite «group _ vars».
Connettori di pagamento: crossing rigoroso su chiavi, riavvio notify, post-test endpoint.
ETL-jobs - Distribuisce gli script CronJob con il modulo «cron», il file idempotent lock.
Monitoraggio: installazione di agenti (node _ exporter/otelcol), registrazione automatica nel monitoraggio.
Antipattern
Uso dì shell/command "dove c'è un modulo.
I playbook senza «handlers» sono superflui e servizi tremanti.
Memorizzazione di segreti in «group _ vars» aperti.
Assenza dì serial '/' max _ fail _ percentage ', durante il rilascio delle onde di prode.
Globale «gather _ facts: true» e «become: true» senza necessità.
Ruoli senza test di Molecule e senza supporto di --check.
Lunghi comandi senza «async/poll» che bloccano l'intera onda.
Assegno foglio di implementazione
1. Negoziare l'ossatura del repository e la convenzione naming.
2. Personalizzare l'inventario dinamico e la base.
3. Avvia ruoli (webapp/hardening/monitoring) e versioni pin delle raccolte.
4. Abilita Vault e/o integrazione con il gestore dei segreti.
5. Assicurati idempotenza, '--check/-diff', handlers e tag.
6. Connetti ansile-lint, yamllint, molecule in CI.
7. Descrivere il pattern deploy (rolling/canary/blue-green) e i limiti «serial».
8. Aggiungi i plugin callback, raccogliere i fogli, segnalare le modifiche.
9. Documentare runbook e ripristini e azioni durante gli incidenti.
10. Eseguire regolarmente il game-day: diradamento SSH, caduta del naso, reimpostazione della versione.
Riepilogo
Ansable chiude l'ultimo miglio tra l'infrastruttura creata e il prodotto operativo: modifiche rapide, sicure e prevedibili alle configurazioni e ai lanci. Con il ruolo come unità di riutilizzo minima, gli inventari dinamici, il corretto funzionamento con i segreti e i pattern di downtime zero, Ansibile aiuta i team iGaming a ridurre Time-to-Deploy, ridurre gli incidenti notturni e mantenere p99 a livello di SLO.