GH GambleHub

Ansable: configuração e depósito

(Secção Tecnologia e Infraestrutura)

Resumo curto

O Ansable é uma ferramenta declaratória de configuração e orquestração ideal para configuração repetitiva de VM/hosts, serviços e aplicativos quando a infraestrutura já foi criada (Terraform/IaC) e precisa «reativar» o ambiente: instalar pacotes, rodar lançamentos, rodar modelos, reiniciar serviços sem downthame e aplicar políticas de segurança. A chave para o sucesso é estrutura modular (papéis/coleções), idempotidade rigorosa, trabalho cuidadoso com secretarias (Vault), equipamentos dinâmicos, testes e disciplina GitOps.

Quando o Ansable é apropriado (e como combina com o Terraform)

Terraform - cria recursos (VPC, clusters, BB).
Ansable - configura o sistema operacional/software, descobre versões, move migrações, rege arquivos e serviços.
Laço: Terraform exibe 'inventory '/IP/segredos em artefatos, e o Ansable lê-los em um CD-passo.

Estrutura do repositório (modelo recomendado)


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

Inventários: estáticos e dinâmicos

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'

Dinâmico

Use plugins de nuvem (ou seu próprio script) para puxar hosts por marcas de formatação. Variáveis de ambientes/marcas de formatação → 'group _ vars'.

Papéis e coleções

Rol = módulo de reutilização independente (tarefas, arquivos, modelos, handlers).
Coleções - conjunto de papéis/plugins/módulos. As versões pinos são gravadas em 'coletions/exigents. yml`.

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

Playbooks: cenários idumpotentes

Exemplo de playbook compartilhado:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
Rol 'webapp' (fatias):
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 }

Modelos e variáveis do Jinja2

Guarde as variáveis em default em 'defaults/principal. yml ', sensíveis em Vault.
Use os filtros ('| to _ nice _ yaml', '| b64encode', '| default') e as condições 'when'.

Exemplo de '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 }};
}
}
}

Segredos: Ansable Vault e gerentes de segredos

Vault para criptografar arquivos de variáveis ('group _ vars/all. vault. yml`).
É melhor ler segredos a partir de gerentes externos (KMS/Secret Management/SSM) através de plug-ins apropriados e armazenar apenas links/ARN no Vault.

Arquivo criptografado (exemplo de estrutura):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Recomendações:
  • Divida o acesso: os desenvolvedores veem dave/estágio e apenas CI.
  • Inclua a rotação de segredos e a auditoria de acesso.

Idempotidade e alterações corretas

Use os módulos ('package', 'user', 'lineinfile', 'template', 'systemd') em vez de' shell/command '.
Selecione as tarefas «ruidosas» 'changed _ when: falso' se elas não mudarem nada.
Suporte check-mods ('-check') e diff para papéis.
Para tarefas instáveis: «retries», «delay», «until».

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

Produtividade: grandes quintas e picos

forks: eleve o paralelismo (com cuidado: não sobrecarregue o alvo).
estratégia = free - execute tarefas sem esperar por vizinhos.
pipelining = True в `ansible. cfg 'reduz o RPT.
gather _ facts: falso onde os factos não são necessários.
async/poll para operações de longa duração; throttle/serial para ondas de deploy.
delegate _ to e run _ once para uma única ação (como migração de banco de dados).

Pattern de downthame zero

Rolling Depl (20%)

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

Canary

Execute o playbook com '--limit web-canary' (subconjunto do grupo), verifique as métricas e espalhe para todo o grupo.

Blue-Green

Dois grupos de hosts 'web _ blue' e 'web _ green'; Prepare a nova onda com um playboom e alterne o tráfego (DNS/LB) com a tarefa 'comunity. general. affiliate _ lb '/API do seu balanceador.

Segurança e hardening

Rol hardening: políticas SSH, banners, 'sudo' sem NOPASSWD, firewall, auditd/rsyslog, tempo-NTP, 'fail2ban'.
Ative o SELinux/AppArmor, gere as políticas através dos módulos.
Bastião: Limite o SSH aos alvos apenas através de jump-hosts (consulte «ProxyJump»).
Minimize 'become: true'; Faça RBAC no nível de inventário (quem pode executar quais playbooks).

Windows e hardware de rede

Windows: plug-ins 'win _', conectividade por WinRM, acrobacias por Adobe Shell - como o último argumento.
Network: 'network _ cli '/' httpapi', pods para Cisco/Juniper/F5; atômica através de 'save _ when: changed'.

Testes e qualidade

ansible-lint + yamllint в CI.
Molecule: testes de papel local/contêiner, verificação de idempotidade (dupla-prova inalterada).
Caixa de areia: inventários individuais de tempo/imagens VM.

Exemplo de Molecule (fatia):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

Integração com CI/CD e GitOps

Pipeline típica:

1. Lint → Syntax check → Molecule.

2. Construção de artefatos da aplicação.

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

4. Reporte para os hosts alterados, artefato de logs.

Exemplo de passo (conceito):
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

Observabilidade e auditoria

Ligue callback-plugins (json/yaml/timer/profile _ tasks) - relatórios de tempo e mudanças.
Mantenha os logs de playbooks em armazenamento centralizado.
Marca as tarefas 'tags' para lançamentos seletivos e apressar as investigações.

Receitas frequentes para iGaming

Web/API noda: Nginx + systemd-unit, health-checks, segredos, roll-restart.
Serviços de game: modelos de configurs por região/tenente através de 'group _ vars'.
Conectores de pagamento: parafusos rigorosos para chaves, reinício por notify, pós-teste de endpoint.
ETL-Jobs: Implantação de script CronJob c 'cron, idempotent lock.
Monitoramento: instalação de agentes (node _ expórter/otelcol), registro automático no monitoramento.

Antipattern

Use 'shell/command' onde o módulo estiver disponível.
Playbooks sem 'handlers' → restrições a mais e serviços a tremer.
Armazenamento de segredos em 'group _ vars' abertos.
Falta de 'serial '/' max _ fail _ percentage' no pouso de ondas de prod.
Global 'gather _ facts: true' e 'become: true' sem necessidade.
Papéis sem testes Molecule e sem suporte '-check'.
Comandos longos sem 'async/poll' que bloqueiam toda a onda.

Folha de cheque de implementação

1. Negocie o esqueleto do repositório e a convenção naming.
2. Configure o inventário dinâmico e basition.
3. Criar papéis (webapp/hardening/monitoring) e pin versões de coleções.
4. Incluir Vault e/ou integração com o gerente de segredos.
5. Garantir Idempotidade, '-check/-diff', handlers e marcas de formatação.
6. Conectar ansable-lint, yamllint, Molecule em CI.
7. Descrever pattern deploy (rolling/canary/blue-green) e limites 'serial'.
8. Adicionar callback-plugins, coletar logs, relatório de alterações.
9. Documentar runbook-e reversão e ações de incidentes.
10. Realizar o game-day regularmente: penetra SSH, queda de nó, reversão de versão.

Resumo

O Ansable encerra a «última milha» entre a infraestrutura criada e a venda em funcionamento: mudanças rápidas, seguras e previsíveis nas configurações e lançamentos. Com o papel como unidade de reutilização mínima, inventários dinâmicos, trabalho correto com segredos e pattern de downthame zero, o Ansable ajuda os comandos iGaming a reduzir Time-to-Deploy, reduzir incidentes noturnos e manter o p99 em nível SLO.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Telegram
@Gamble_GC
Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.