Możliwe: konfiguracja i wdrożenie
(Sekcja: Technologia i infrastruktura)
Krótkie podsumowanie
Ansible jest deklaratywnym narzędziem konfiguracji i orkiestrowania idealnym do wielokrotnej konfiguracji maszyn wirtualnych/hostów, usług i aplikacji, gdy infrastruktura została już utworzona (Terraform/IaC) i trzeba „ożywić” środowisko: zainstalować pakiety, uruchomić wydanie, rozwinąć szablony, ponownie uruchomić usługi bez czas przestoju, stosować zasady bezpieczeństwa. Klucz do sukcesu: modułowa struktura (role/kolekcje), ścisła idempotencja, schludna praca z tajemnicami (Vault), dynamiczna inwentaryzacja, testowanie i dyscyplina GitOps.
Kiedy jest odpowiedni Ansible (i jak pasuje do Terraform)
Terraform - tworzy zasoby (VPC, klastry, bazy danych).
Ansible - konfiguruje system operacyjny/oprogramowanie, rozwija wersje, napędza migracje, edytuje pliki i usługi.
Link: Wyjścia terraform 'inventory '/IP/secrets do artefaktów, Ansible czyta je w kroku CD.
Struktura repozytorium (zalecany szablon)
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
możliwy do zrealizowania. cfg (minimum):
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
Zapasy: statyczne i dynamiczne
Statyczne (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'
Dynamiczny
Użyj wtyczek w chmurze (lub własnego skryptu) do oznaczania hostów. Zmienne środowiskowe/znaczniki → 'group _ vars'.
Role i kolekcje
Role = niezależny moduł ponownego użycia (zadania, pliki, szablony, obsługujące).
Kolekcje - zestaw ról/wtyczek/modułów. Naprawić piny wersji w 'kolekcjach/wymaganiach. yml'.
yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix
Playbooks: Idempotentne skrypty
Przykład ogólnego odtwarzania:yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening
- hosts: web become: true roles:
- webapp
"Webapp 'role (fragmenty):
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
Obsługujący:
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 }
Jinja2 szablony i zmienne
Zapisz domyślne zmienne w 'defaults/main. yml', wrażliwy - w Skarbcu.
Użyj filtrów ('| to_nice_yaml',' | b64encode', '| default') i 'when'.
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}
Tajemnice: Skarbiec i sekretni menedżerowie
Skarbiec do szyfrowania plików zmiennych ('group _ vars/all. skarbiec. yml').
Lepiej jest czytać sekrety zewnętrznych menedżerów (KMS/Secrets Manager/SSM) za pomocą odpowiednich modułów i przechowywać tylko linki/ARN w skarbcu.
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Zalecenia:
- Dostęp do udostępniania: deweloperzy patrz dev/stage, prod - tylko CI.
- Włącz tajny obrót i audyt dostępu.
Idempotencja i poprawne zmiany
Użyj modułów ('pakiet', 'użytkownik', 'lineinfile', 'template', 'systemd') zamiast 'shell/command'.
Mark „noisy” tasks 'changed _ when: false' if nie zmieniają niczego.
Obsługa trybu kontroli ('--check') i diff dla ról.
Dla zadań niestabilnych: 'retries', 'delay', 'until'.
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200
Wydajność: Duże gospodarstwa i szczyty
widelce: podnieść współistnienie (uwaga: nie przeciążać cel).
strategy = free-Execute zadania bez oczekiwania na sąsiadów.
rurociągi = Prawdziwe „przybliżone”. cfg 'redukuje RTT.
gather_facts: fałszywe, gdzie fakty są niepotrzebne.
async/sondaż dla operacji długoterminowych; przepustnica/serial dla fal wdrożeniowych.
delegate_to i run_once dla pojedynczych działań (na przykład migracja baz danych).
Zero przestojów
Rolling Deploy (po 20%)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
Kanaryjski
Uruchom książkę odtwarzania z '--limit web-canary' (podzbiór grupy), sprawdź metryki, a następnie zwiń do całej grupy.
Niebiesko-zielony
Dwie grupy hostów 'web _ blue' i 'web _ green'; przygotować nową falę z odtwarzaczem, a następnie przełączyć ruch (DNS/LB) z "zadaniem społecznościowym. ogólne. affiliate_lb'/API twój balancer.
Bezpieczeństwo i utwardzanie
Utwardzanie roli: zasady SSH, banery, 'sudo' bez NOPASSWD, firewall, auditd/rsyslog, time-NTP, 'fail2ban'.
Włącz SELinux/AppArmor, zarządzaj zasadami za pomocą modułów.
Bastion: Ograniczyć SSH do celów tylko poprzez skok-host (patrz „ProxyJump”).
Zminimalizuj 'become: true'; sporządzić RBAC na poziomie inwentarza (kto może uruchomić które playbooks).
Okna i sprzęt sieciowy
Windows: moduły 'win _', połączenie WinRM, skrypty PowerShell - jako ostatni argument.
Sieć: 'network _ cli '/' httpapi', moduły do Cisco/Juniper/F5; atomowość poprzez 'save _ when: changed'.
Testowanie i jakość
ansible-lint + yamllint бCI.
Cząsteczka: lokalne/kontenerowe testy ról, sprawdzenie emocjonalności (podwójny przebieg bez zmian).
Piaskownica: indywidualne tymczasowe zapasy/obrazy VM.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
Integracja z CI/CD i GitOps
Typowy rurociąg:1. Lint → Syntax sprawdzić → Molekuła.
2. Artefakty aplikacji budowlanych.
3. Wdrożenie: 'dowolny-playbook -i zapasy/prod witryny. yml --limit web --tags deploy '.
4. Raport o zmienionych gospodarzy, artefakcie dzienników.
Przykład krok (koncepcja):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
Obserwowalność i audyt
Podłącz wtyczki zwrotne (json/yaml/timer/profile_tasks) - raporty dotyczące czasu i zmian.
Zapisz dzienniki odtwarzania do scentralizowanej pamięci.
Etykieta „tagi:” zadania dla wybiórczych przebiegów i przyspieszonych dochodzeń.
Częste przepisy na iGaming
Węzeł Web/API: Nginx + systemd-unit, health-checks, secrets from the manager, roll-restart.
Usługi gry: szablony konfiguracyjne według regionu/najemców za pośrednictwem 'group _ vars'.
Złącza płatnicze: ścisłe dla kluczy, uruchom ponownie poprzez powiadomienie, po sprawdzeniu punktów końcowych.
Zadania ETL: wdrożenie skryptów CronJob z modułem 'cron', plik blokady idempotentnej.
Monitorowanie: instalacja agentów (node_exporter/otelcol), automatyczna rejestracja w monitoringu.
Antypattery
Używanie 'shell/command', gdzie jest moduł.
Playbooks bez 'handlers' → niepotrzebne ponowne uruchamianie i obsługa jitter.
Przechowywanie tajemnic w publicznym 'group _ vars'.
Brak wyczerpania fali produkcyjnej 'serial '/' max _ fail _ percentage'.
Globalne 'gather _ facts: true' i 'become: true' niepotrzebnie.
Role bez testów molekularnych i bez wsparcia '--check'.
Długie polecenia bez „async/sondaż” blokującego całą falę.
Lista kontrolna implementacji
1. Uzgodnić ramy repozytorium i nazewnictwo konwencji.
2. Skonfiguruj dynamiczny inwentarz i bastion.
3. Tworzenie ról (webapp/hartowanie/monitorowanie) i pin wersje kolekcji.
4. Włącz oprogramowanie Skarbiec i/lub integrację z programem Secret Manager.
5. Zapewnij idempotencję, '--check/--diff', obsługę i znaczniki.
6. Podłącz mrówkę, yamllint, molekułę do CI.
7. Opisać wzorzec rozmieszczenia (rolling/canary/blue-green) i granice 'serial'.
8. Dodaj wtyczki zwrotne, zbiór dzienników, zmień raport.
9. Książki startowe i działania związane z wypadkami.
10. Regularnie trzymaj grę-day: break SSH, kropla węzła, rolka wersji.
Wyniki
Ansible zamyka „ostatnią milę” pomiędzy stworzoną infrastrukturą a działającą sprzedażą: szybkie, bezpieczne i przewidywalne zmiany w konfiguracjach i wersjach. Z roli jako jednostki minimalnego ponownego użycia, inwentaryzacji dynamicznej, prawidłowej tajnej obsługi i zweryfikowanych zerowych przestojów, Ansible pomaga zespołom iGaming zmniejszyć czas do wdrożenia, zmniejszyć incydenty nocne i utrzymać p99 na poziomie SLO.