GH GambleHub

Infrastructure as Code: Terraform, Ansible

Infrastructure as Code: Terraform, Ansible

1) Näme üçin IaC we gurallaryň tapawudy

Terraform - deklaratiw orchestrator-IaC: bulut infrastrukturasyny (VPC, K8s, LB, DB, IAM) üpjün edijiler arkaly döredýär/üýtgedýär. Resurslaryň durmuş siklini dolandyrýar we baýlygy saklaýar.
Ansible - prosedura config-IaC we konfigurasiýa dolandyryşy: host/programma üpjünçiligini (paketleri, faýllary, hyzmatlary) sazlaýar, programma üpjünçiligini, temperatura, ädimleri ýygnamagy bilýär. Agentsiz (SSH/WinRM), wezipeleriň deňsizligi bilen.

Kombinasiýa: Terraform - "platforma näme ýasaldy", Ansible - "nähili sazlanýar we işe girizilýär".

2) Repozitoriýalaryň we gatlaklaryň gurluşy

3 gatlak maslahat berýäris:

1. Foundation (Landing Zone): torlar, IAM, KMS, esasy magazinesurnallar/gözegçilik.

2. Platform: Kubernetes klasterleri, bazalar, nobatlar, observability-stek.

3. Workloads: boşluklar/nyşanlar, hyzmat hasaplary, syýasatçylar, konfigikler.

Repo:
  • 'iac/terraform/' - modullar we gurşaw (' modules/', 'envs/').
  • 'iac/ansible/' - rollar (' roles/'), pleýbuklar ('playbooks/'), inwentarlar (' inventories/').
  • 'policies/' - OPA/Conftest düzgünleri.
  • 'pipelines/' - CI/CD skriptleri (lint/plan/apply/test).

3) Terraform: modullar, state, gurşaw

3. 1 Modullar

Kiçi, gaýtadan ulanylýan: 'vpc', 'eks', 'rds', 'redis', 'alb', 'iam-role'.
Giriş → 'variables. tf ', çykyş →' outputs. tf ', wersiýalary - modullaryň sanawy/git-tegler arkaly.

Moduly çagyrmagyň mysaly:
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 Ýagdaý (state)

Uzakdaky backend (S3/GCS + DynamoDB/LockTable) + blokirleme.
Tegelek bölmek: 'prod. tfstate`, `staging. tfstate`.
State-drift: 'terraform plan' -da CI meýilnama boýunça; dreýfde alert.

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

3. 3 Workspaces / Envs

Wariantlar:
  • Aýry-aýry kataloglar 'envs/prod', 'envs/stage' (aýdyň).
  • Workspaces ýeňil üýtgeşmeler üçin, ýöne syrlary garyşdyrmakdan gaça duruň.
  • Parametrler 'tfvars': 'prod. tfvars`, `stage. tfvars`.

4) Ansible: rollar, inwentarlar, idempotentlik

4. 1 Rollar we pleýbuklar

Galaxy standartı:

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

4. 2 Inwentarlar we dinamika

`inventories/prod/hosts. yml '+ üýtgewler' group _ vars/host _ vars '.
Dinamiki inwentar: 'aws _ ec2', 'gcp _ compute', 'kubernetes. core`.

4. 3 Idempotentlik

Modullary ('shell' däl) mümkin boldugyça ulanyň.
'changed _ when '/' check _ mode' gury geçişler üçin.
Handlers diňe üýtgän ýagdaýynda şöhlelenýär.

5) Syrlar we gapma-garşylyklar

Terraform: 'sensitive = true' arkaly bahalaryň bölünişi; syrlaryň özleri state-da däl (AWS Secrets Manager/HashiCorp Vault/KMS-de saklaň we data-çeşme bilen baglanyşyň).
Ansible: Üýtgeýjileri şifrlemek üçin Vault ('ansible-vault encrypt'), HashiCorp Vault/KMS bilen integrasiýa.
GitOps: aýratyn repo/ammarda syrlar, least-privilege arkaly elýeterlilik.

6) Syýasatlar we laýyklyk (Code)

Terraform üçin OPA/Conftest: açyk S3, açyk SG, kesgitlenmedik çeşmeleri gadagan etmek (tags).
Terraform Cloud/Enterprise - Alternatiw hökmünde Sentinel.
Ansible Lint: stil we howpsuzlyk ('sudo: yes' gerek däl ýerinde, raw-shell bolmasa).

Conftest mysaly (rego, ýönekeýleşdirilen):
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) IaC synagy

Terraform: 'tflint', 'tfsec '/' checkov', Terratest (Go) integrasiýa barlaglary üçin.
Ansible: 'ansible-lint', Molecule (+ Docker/Podman/EC2) rollary barlamak üçin.
Apply-dan soň smouk-testler: HTTP probes, port/prosesler, hukuklar.

8) CI/CD и GitOps

Paypline (Pull/Merge Request):

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

2. Plan: artefaktyň çap edilmegi bilen 'terraform plan' (MR-da düşündiriş).

3. Policy Gate: Conftest/Sentinel.

4. Apply (manual/approved): diňe artefaktlaryň goly bilen main.

5. Ansible deploy: '-check' na stage, sonra '-diff' v prod.

6. Post-checks: sintetika/Probe, neşiriň düşündiriş tagtasy.

GitOps:
  • Manifestleri hakykat çeşmesi hökmünde saklaň; Kubernetes üçin Argo CD/Flux, ýöne esasy klasterler/primitivler - Terraform arkaly.

9) Kubernetes, torlar, DB üçin patternler

9. 1 Kubernetes

Terraform: EKS/GKE/AKS klasterleri, düwünleri, IAM, StorageClass, LB.
Ansible: AMI/bastionlary taýýarlamak, şekilleri/howdanlary ýygnamak, post-install (loggerler/agentler/OTel).

9. 2 Torlar we perimetri

Terraform: VPC/kiçi torlar/NAT/Tranzit-Gateway/WAF, ugurlar.
Ansible: NGINX/Envoy/HAProxy, TLS, WAF düzgünleriniň konfigi.

9. 3 Bazalar/kesişler/nobatlar

Terraform: RDS/CloudSQL parametrler topary, Redis/ElastiCache, Kafka/MSK.
Ansible: Keshiň gyzmagy, migrasiýa meseleleri, bellikleri/agentleri sazlamak.

10) Konwensiýalaryň mysallary

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 - gizlin maglumat çeşmesi

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-client (bölek)

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

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) Dreýfiň we laýyklygyň dolandyrylmagy

Döwürleýin 'terraform plan' -da read-only açary; tapawut ýüze çykan halatynda bilet döredýär.
Ansible --check möhüm rollar üçin meýilnama boýunça (audit-re modeim).
Hasabatlar: OPA/Conftest-iň ýerine ýetirilmedik syýasatlary ,/backup/monitoringsiz çeşmeler.

12) Gözegçilik we audit

Logi 'terraform apply' we meýilnamalaryň artefaktlary - obýekt ammarynda saklaň.
Ansible: 'callback _ plugins' (json) → merkezi log/ELK; job ID, commit SHA, trace_id.
Metrikler: meýilnamalary/pleýbuklary ýerine ýetirmegiň wagty, üýtgeşmeleriň ýygylygy, synaglary ýapmak.

13) Howpsuzlyk

Modullaryň/rollaryň goly ýa-da kesgitlenen bellikler/heşler.
Iň az IAM hukuklary ('plan' ≠ 'apply'), CI we adam-appruver rollaryny paýlaşyň.
Ýagdaýy/ýazgylary şifrlemek, modullaryň/rollaryň şahsy sanawlary.
"no plaintext secrets in VCS" syýasaty, gizlin skanerler (gitleaks/trufflehog).

14) Anti-patternler

Terraform "hemme zat üçin" bir haýwan moduly; modullaryň wersiýalarynyň ýoklugy.
Lokal 'terraform. tfstate 'we blokirlemeleriň ýoklugy.
IaC → baky süýşmegiň üstündäki bulutda el bilen düzedişler.
Modullaryň ýerine ansible 'shell '/' command' (duýgurlygy bozýar).
"Bir faýlda" toparsyz/üýtgeýän inwentar, prod/stage garyşdyrma.
Vars/repozitordaky syrlar, Vault/KMS ýoklugy.
Apply Plansiz we Peer Review.

15) Giriş çek-sanawy (0-45 gün)

0-10 gün

Uzakdaky backend/lock sazlaň, Terraform modullaryny düzüň.
Tflint/tfsec/checkov, ansible-lint; resurslaryň bellikleri/bellikleri barada ylalaşmak.
NGINX/agentler/logerler üçin Ansible rollaryny başla; inwentarlary guramak.

11-25 gün

Möhüm modullar/rollar üçin Conftest/OPA, Terratest we Molecule goşuň.
CI: MR-a 'plan', meýilnamanyň artefaktı, appruve bilen manual-apply; Ansible `--check` на stage.
Gizlin saklaýjy (Vault/KMS/Secrets Manager).

26-45 gün

Drift-detektor üçin awto-meýilnama, syýasatlar boýunça hasabatlar.
Modullaryň/rollaryň wersiýalaşdyrylan katalogy; README. md 'her birinde.
GitOps: relizleriň düşündirişleri, gözegçilik we alert girtleri bilen baglanyşyk.

16) Kämillik ölçegleri

Uzakdaky state bilen gurşawyň% -i = 100%.
Synaglar bilen modullaryň/rollaryň paýy (Terratest/Molecule) ≥ 70%.
MR-dan apply (prod) - sagatlar, günler däl.
Nol "el bilen süýşmek" (ähli üýtgeşmeler MR-den geçýär).
Kritiki çeşmeleriň 100% -i Policy as Code (bellikler, şifrlemek, backup) bilen örtülendir.

17) Netijenama

Terraform öňünden aýdyp boljak, gaýtalanýan infrastruktura bazasyny kesgitleýär; Ansible hostlary we hyzmatlary talap edilýän ýagdaýa getirýär. Policy as Code, lokalizasiýa bilen uzakdaky state, synaglar, gizlin dolandyryş we CI/CD bilen plan → review → apply goşuň - IaC konturyňyz dolandyrylýan, howpsuz we çalt bolar we goýberilişleriňiz atomiki we yzyna öwrülip biler.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.