GH GambleHub

Infrastruktura jako kod: Terraform, Anialny

Infrastruktura jako kod: Terraform, Anialny

1) Dlaczego IaC i jak różnią się narzędzia

Terraform - deklaracyjny orkiestrator-IaC: tworzy/modyfikuje infrastrukturę chmury (VPC, K8s, LB, DB, IAM) za pośrednictwem dostawców. Zarządza cyklem życia zasobów i przechowuje stan.
Ansible - procesowe zarządzanie konfiguracją i konfiguracją: konfiguruje hosty/oprogramowanie (pakiety, pliki, usługi), wie, jak dostarczać aplikacje, szablonowanie, orkiestrowanie kroków. Bez agenta (SSH/WinRM), z idempotencją zadań.

Kombinacja: Terraform - „z czego platforma jest wykonana”, Ansible - „jak jest skonfigurowana i uruchomiona”.

2) Struktura repozytoriów i warstw

Polecamy 3 warstwy:

1. Fundacja (strefa lądowania): sieci, IAM, KMS, logi bazowe/monitoring.

2. Platforma: Kubernetes klastry, bazy danych, kolejki, stos obserwacji.

3. Obciążenia robocze: spacje/obszary nazw, konta usług, zasady, konfiguracje.

Repo:
  • „iac/terraform/” - moduły i środowiska („ moduły/”, „envs/”).
  • „iac/ansible/” - role („ role/”), playbooks („playbooks/”), zapasy („ inventories/”).
  • „policies/” - OPA/Conftest rules.
  • „pipelines/” - skrypty CI/CD (lint/plan/apply/test).

3) Terraform: moduły, stan, środowiska

3. 1 Moduły

Mały, ponownie używany: 'vpc',' eks', 'rds', 'redis', 'alb', 'iam-role'.
Wejścia → 'zmienne. tf ', wyjścia →' wyjścia. tf ', wersje - poprzez rejestr modułów/git-tagów.

Przykład wywołania modułu:
hcl module "vpc" {
source = "git::ssh://git@repo/iac. git//modules/vpc? ref=v1. 6. 0"
name  = "prod-core"
cidr  = "10. 0. 0. 0/16"
azs  = ["eu-central-1a","eu-central-1b"]
}

3. 2 Państwo

Remote backend (S3/GCS + DynamoDB/LockTable) + blokady.
Oddzielenie od środowiska: "prod. tfstate ',' inscenizacja. tfstate '.
Dryf państwowy: „plan terraform” w CI zgodnie z harmonogramem; Uwaga podczas dryfowania.

Przykład backend:
hcl terraform {
backend "s3" {
bucket     = "iac-state"
key      = "prod/network/terraform. tfstate"
region     = "eu-central-1"
dynamodb_table = "iac-locks"
encrypt    = true
}
}

3. 3 Miejsca pracy/zawiści

Opcje:
  • Oddzielne katalogi "envs/prod'," envs/stage "(visual).
  • Miejsca pracy dla różnic światła, ale unikać mieszania tajemnic.
  • Parametry za pomocą 'tfvars': 'prod. tfvars ',' etap. tfvars ".

4) Niedostępne: Role, inwentaryzacje, Idempotencja

4. 1 Role i playbooks

Standard galaktyki:

roles/
nginx/
tasks/main. yml templates/.j2 handlers/main. yml defaults/main. yml playbooks/
site. yml
Przykład Playbook:
yaml
- hosts: web become: true roles:
- role: nginx vars:
nginx_listen_port: 8080

4. 2 Inwentaryzacje i dynamika

"inventories/prod/hosts. yml '+ variables' group _ vars/host _ vars'.
Inwentaryzacja dynamiczna: 'aws _ ec2', 'gcp _ compute', 'kubernetes'. rdzeń ".

4. 3 Idempotencja

W miarę możliwości należy używać modułów (nie „powłoki”).
'changed _ when '/' check _ mode' dla suchych biegów.
Opiekunowie zastanawiają się tylko nad zmianami.

5) Tajemnice i konfiguracje

Terraform: wydzielanie wartości przez „wrażliwe = prawdziwe”; same sekrety nie są w stanie (przechowywać w AWS Secrets Manager/HashiCorp Vault/KMS i odnosić się do źródła danych).
Ansible: Skarbiec do szyfrowania zmiennego („szyfrowanie skarbca”), integracja z HashiCorp Vault/KMS.
GitOps: sekrety w osobnym repo/magazynie, dostęp przez najmniejszy przywilej.

6) Polityka jako kodeks

OPA/Conftest dla planów Terraform: zakaz publicznego S3, otwarta SG, niewykorzystane zasoby (tagi).
Terraform Cloud/Enterprise - Sentinel jako alternatywa.
Lint: styl i bezpieczeństwo (bez „sudo: tak”, gdzie nie jest to potrzebne, bez surowej powłoki).

Przykład Konftest (rego, uproszczony):
rego package terraform. security

deny[msg] {
input. resource_type == "aws_security_group_rule"
input. values. cidr_blocks[_] == "0. 0. 0. 0/0"
input. values. from_port == 22 msg:= "SSH from 0. 0. 0. 0/0 is forbidden"
}

7) Badanie IaC

Terraform: „tflint”, „tfsec ”/„ checkov”, Terratest (Go) do kontroli integracji.
Dowolny: „mrówka”, cząsteczka (+ Docker/Podman/EC2) do badań ról.
Badania dymu po zastosowaniu: sondy HTTP, port/procesy, prawa.

8) CI/CD - GitOps

Rurociąg (na żądanie ciągnięcia/połączenia):

1. Lint/Sec: tflint, tfsec/checkov, edible-lint.

2. Plan: „plan terraform” wraz z publikacją artefaktu (komentarz w MR).

3. Brama polityczna: Conftest/Sentinel.

4. Zastosowanie (ręczne/zatwierdzone): tylko na głównej stronie z podpisem artefaktów.

5. Rozmieścić: '--check' na scenie, a następnie '--diff' w prod.

6. Po sprawdzeniu: syntetyka/sonda, deska rozdzielcza adnotacji.

Gitopy:
  • Zachowaj manifesty jako źródło prawdy; Argo CD/Flux dla Kubernetes, ale podstawowe klastry/prymitywy przez Terraform.

9) Wzory dla kubernetów, sieci, baz danych

9. 1 Kubernety

Terraform: zgrupowania EKS/GKE/AKS, węzły, IAM, LB.
Dostępny: przygotowanie AMI/bastionu, montaż obrazu/repozytoria, po instalacji (rejestratory/agenci/OTel).

9. 2 Sieci i obwód

Terraform: VPC/podsieci/NAT/Transit-Gateway/WAF, trasy.
Dostępny: NGINX/Envoy/HAProxy config, TLS, konfiguracja zasad WAF.

9. 3 Podstawy/bufory/kolejki

Terraform: parametr grupy RDS/CloudSQL, Redis/ElastiCache, Kafka/MSK.
Możliwe: nagrzewanie pamięci podręcznej, migracja, tworzenie kopii zapasowych/agentów.

10) Przykłady konfiguracji

10. 1 Terraform - RDS PostgreSQL + SG

hcl module "db" {
source        = "terraform-aws-modules/rds/aws"
engine        = "postgres"
engine_version    = "15. 4"
instance_class    = "db. m6g. large"
allocated_storage  = 100 name         = "core"
username       = var. db_user password       = var. db_password # см. secret data source vpc_security_group_ids = [module. db_sg. security_group_id]
multi_az       = true backup_retention   = 7
}

module "db_sg" {
source = "terraform-aws-modules/security-group/aws"
name  = "db-core"
vpc_id = module. vpc. vpc_id ingress_cidr_blocks = ["10. 0. 0. 0/8"]
ingress_rules    = ["postgresql-tcp"]
}

10. 2 Terraform - źródło danych tajemnicy

hcl data "aws_secretsmanager_secret_version" "db" {
secret_id = "prod/db/core"
}
variable "db_password" {
type   = string sensitive = true default  = jsondecode(data. aws_secretsmanager_secret_version. db. secret_string). password
}

10. 3 Ansible - postgresql-rola klienta (fragment)

yaml
- name: Install packages apt:
name: [ "postgresql-client-15" ]
state: present update_cache: yes

- name: Create. pgpass copy:
dest: /home/deploy/.pgpass mode: '0600'
content: "{{ db_host }}:5432:core:{{ db_user }}:{{ db_password }}"
no_log: true

- name: Smoke query shell: psql -h {{ db_host }} -U {{ db_user }} -d core -c "select 1"
register: psql_out changed_when: false

10. 4 Ansible - NGINX z szablonem

yaml
- name: Deploy nginx. conf template:
src: templates/nginx. conf. j2 dest: /etc/nginx/nginx. conf notify: Restart nginx

- name: Ensure nginx running service:
name: nginx state: started enabled: true

handlers:
- name: Restart nginx service: { name: nginx, state: restarted }

11) Zarządzanie dryfem i zgodności

okresowy „plan terraform” w kluczu wyłącznie do odczytu; tworzy bilet, gdy istnieje rozbieżność.
Dowolny --check zaplanowany dla ról krytycznych (tryb audytu).
Raporty: nieudane zasady OPA/Conftest, niewykorzystane/kopie zapasowe/zasoby monitorujące.

12) Obserwowalność i audyt

„terraform apply” logi i artefakty planowania - zapisać do obiektu przechowywania.
Dostępny: 'callback _ plugins' (json) → central log/ELK; zawierać ID zadania, commit SHA, trace_id.
Metryka: czas realizacji planów/odtwarzaczy, częstotliwość zmian, pokrycie testów.

13) Bezpieczeństwo

Podpis modułu/roli lub stałe znaczniki/hashes.
Minimalne prawa IAM ("mają zastosowanie w planie" i "), oddzielają role aplikacji CI i human.
Szyfrowanie stanu/dzienników, prywatnych rejestrów modułów/ról.
Polityka „no plaintext secrets in VCS”, tajne skanery (gitleaks/trufflehog).

14) Anty-wzory

Jeden moduł potwora Terraform „za wszystko”; brakujące wersje modułu.
Local 'terraform. tfstate'i żadnych zamków.
Ręczne edycje w chmurze nad IaC → wieczny dryf.
Dowolne 'shell '/' command' zamiast modułów (łamie iempotencję).
Inwentaryzacja „w jednym pliku” bez grup/zmiennych, mieszanie prod/stage.
Sekrety w wars/repozytoriach, brak skarbca/KMS.
Zastosuj bez planu i bez Peer Review.

15) Lista kontrolna realizacji (0-45 dni)

0-10 dni

Konfigurowanie zdalnego backendu/blokady, rozszerzenie modułów Terraform.
Włącz tflint/tfsec/checkov, angielski; negocjować znaczniki/etykiety zasobów.
Tworzenie ról namacalnych dla NGINX/agentów/rejestratorów; organizować zapasy.

11-25 dni

Dodaj Konftest/OPA, Terratest i Molekuła dla modułów/ról krytycznych.
CI: „plan” w sprawie MR, artefakt w planie, ręczne stosowanie z approw; Etap „--check” bezwzględny.
Integrate Secret Storage (Vault/KMS/Secrets Manager).

26-45 dni

Auto harmonogram wykrywania dryfów, raporty zasad.
Katalog modułów/ról z wersją; "README. md 'w każdym.
GitOps: adnotacje wydań, połączenie z monitorowaniem i bramkami alarmowymi.

16) Wskaźniki zapadalności

% środowisk ze stanem zdalnym i blokadami = 100%.
Udział modułów/ról w badaniach (Terratest/Molecule) ≥ 70%.
Średni czas od MR do zastosowania (prod) to godziny, a nie dni.
Zero „ręczny dryf” (wszystkie zmiany przechodzą przez MR).
100% zasobów krytycznych jest objętych kodem polityki (tagi, szyfrowanie, kopia zapasowa).

17) Wniosek

Terraform określa przewidywalną, powtarzalną bazę infrastruktury; Ansible przynosi hostów i usług do pożądanego stanu. Dodaj zasady jako kod, zdalny stan z lokalizacją, testy, tajne zarządzanie i CI/CD z planem → przegląd → zastosuj - a Twoja pętla IaC staje się zarządzalna, bezpieczna i szybka, a wydania są atomowe i odwracalne.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.