Logo GH

Infrastructure as Code: Terraform, Ansible

Infrastructure as Code: Terraform, Ansible

1) Nega IaC va asboblar qanday farq qiladi

Terraform - deklarativ orchestrator-IaC: provayderlar orqali bulutli infratuzilmani (VPC, K8s, LB, DB, IAM) yaratadi/o’zgartiradi. Resurslarning hayot siklini boshqaradi va holatini saqlaydi.
Ansible - protsedura config-IaC va konfiguratsiya menejmenti: xost/dasturiy ta’minotni (paketlar, fayllar, xizmatlar) sozlaydi, ilovalarni ko’rsatish, templating, qadamlar orkestrini biladi. Agentsiz (SSH/WinRM), vazifalarning o’zgaruvchanligi bilan.

Kombinatsiyasi: Terraform - «platforma nimadan yasalgan», Ansible - «u qanday sozlangan va ishga tushiriladi».

2) Repozitoriylar va qatlamlarning tuzilishi

3 qatlamni tavsiya qilamiz:

1. Foundation (Landing Zone): tarmoqlar, IAM, KMS, bazaviy jurnallar/monitoring.

2. Platform: Kubernetes klasterlari, bazalar, navbatlar, observability-stek.

3. Workloads: boʻshliqlar/nomespeyslar, servis hisoblari, siyosatchilar, konfigirlar.

Repo:
  • ’iac/terraform/’ - modullar va muhit (’ modules/’,’envs/’).
  • ’iac/ansible/’ - rollar (’ roles/’), pleybuklar (’playbooks/’), inventarlar (’inventories/’).
  • ’policies/’ - OPA/Conftest qoidalari.
  • ’pipelines/’ - CI/CD skriptlari (lint/plan/apply/test).

3) Terraform: modullar, state, muhit

3. 1 modullar

Kichik, qayta ishlatiladigan:’vpc’,’eks’,’rds’,’redis’,’alb’,’iam-role’.
→’variables. tf’, chiqishlar →’outputs. tf’, versiyalar - modullar reyestri/git-teglar orqali.

Modulni chaqirish namunasi:
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 Holat (state)

Masofadagi backend (S3/GCS + DynamoDB/LockTable) + qulflash.
Muhit boʻyicha boʻlinish:’prod. tfstate`, `staging. tfstate`.
State-drift: jadval bo’yicha CI’da’terraform plan’; drift paytida alert.

Backend misoli:
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

Variantlar:
  • Alohida kataloglar’envs/prod’,’envs/stage’(vizual).
  • Workspaces engil o’zgarishlar uchun, lekin sirlarni aralashtirishdan qoching.
  • ’tfvars’:’prod. tfvars`, `stage. tfvars`.

4) Ansible: rollar, inventarlar, idempotentlik

4. 1 Rollar va pleybuklar

Galaxy standarti:

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

4. 2 Inventarlar va dinamika

`inventories/prod/hosts. yml’+ oʻzgaruvchilar’group _ vars/host _ vars’.
Dinamik inventar:’aws _ ec2’,’gcp _ compute’,’kubernetes. core`.

4. 3 Idempotentlik

Iloji boricha’shell’boʻlmagan modullardan foydalaning.
Quruq dasturlar uchun’changed _ when ’/’ check _ mode’.
Handlers faqat o’zgarishlarda aks ettiriladi.

5) Sirlar va konfigurlar

Terraform:’sensitive = true’orqali qiymatlar sekressiyasi; sirlarning o’zi - state’da emas (AWS Secrets Manager/HashiCorp Vault/KMS’da saqlang va ma’lumotlar manbasiga murojaat qiling).
Ansible: Oʻzgaruvchini shifrlash uchun Vault (’ansible-vault encrypt’), HashiCorp Vault/KMS bilan integratsiya qilish.
GitOps: alohida repo/ombordagi sirlar, least-privilege orqali kirish.

6) Siyosat va muvofiqlik (Policy as Code)

Terraform uchun OPA/Conftest: ochiq S3, ochiq SG, belgilanmagan resurslarni taqiqlash.
Terraform Cloud/Enterprise - Sentinel muqobil.
Ansible Lint: uslub va xavfsizlik (’sudo: yes’bo’lmagan joyda, raw-shellsiz).

Conftest misoli (rego, soddalashtirilgan):
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 testlari

Terraform:’tflint’,’tfsec ’/’ checkov’, Terratest (Go) integratsion tekshiruvlar uchun.
Rollarni tekshirish uchun ansible:’ansible-lint’, Molecule (+ Docker/Podman/EC2).
Smouk testlar keyin apply: HTTP probes, port/jarayonlar, huquqlar.

8) CI/CD и GitOps

Paypline (Pull/Merge Request uchun):

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

2. Plan:’terraform plan’artefaktni e’lon qilgan holda (MRdagi sharh).

3. Policy Gate: Conftest/Sentinel.

4. Apply (manual/approved): faqat artefaktlar imzosi bilan main.

5. Ansible deploy:’-check’na stage, keyin’-diff’v prod.

6. Post-checks: sintetika/Probe, reliz izohining dashbordi.

GitOps:
  • Manifestlarni haqiqat manbai sifatida saqlang; Kubernetes uchun Argo CD/Flux, lekin asosiy klasterlar/primitivlar Terraform orqali.

9) Kubernetes uchun patternlar, tarmoqlar, DB

9. 1 Kubernetes

Terraform: EKS/GKE/AKS klasterlari, uzellari, IAM, StorageClass, LB.
Ansible: AMI/bastionlarni tayyorlash, rasmlarni/repozitoriyalarni yig’ish, post-install (loggerlar/agentlar/OTel).

9. 2 Tarmoqlar va perimetr

Terraform: VPC/kichik tarmoqlar/NAT/Transit-Gateway/WAF, yo’nalishlar.
Ansible: NGINX/Envoy/HAProxy, TLS, config WAF qoidalari.

9. 3 Bazalar/keshlar/navbatlar

Terraform: RDS/CloudSQL parametr guruhlari, Redis/ElastiCache, Kafka/MSK.
Ansible: keshni isitish, migratsiya vazifalari, orqaplarni/agentlarni moslash.

10) Konfiguratsiyalar namunalari

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 - maxfiy maʼlumot manbai

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 (parcha)

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) Dreyf va muvofiqlikni boshqarish

Davriy’terraform plan’v read-only kaliti; tafovut bo’lganda chipta yaratadi.
Tanqidiy rollar uchun ansible --check jadvali (audit-rejim).
Hisobotlar: bajarilmagan OPA/Conftest siyosati ,/backup/monitoringsiz resurslar.

12) Kuzatuv va audit

Logi’terraform apply’va reja artefaktlari - obyekt omboriga saqlang.
Ansible:’callback _ plugins’(json) → markaziy log/ELK; job ID, commit SHA, trace_id.
Metrika: rejalar/pleybuklarni bajarish vaqti, o’zgarishlar chastotasi, testlar bilan qoplash.

13) Xavfsizlik

Modullar/rollar imzosi yoki oʻrnatilgan teglar/xeshlar.
Minimal IAM huquqlari (’plan’≠’apply’).
Modullar/rollarning holatini shifrlash.
«no plaintext secrets in VCS» siyosati, sir-skanerlar (gitleaks/trufflehog).

14) Anti-patternlar

Bitta Terraform moduli «hamma narsaga»; modullar versiyalari mavjud emas.
Lokal’terraform. tfstate’va blokirovkalarning yo’qligi.
Bulutda IaC → abadiy dreyf ustida qoʻlda tuzatishlar.
Modullar oʻrniga ansible’shell ’/’ command’(idempotentlikni buzadi).
Guruh/oʻzgaruvchisiz «bir faylda» inventar, prod/stage aralashtirish.
Vars/repozitoriyadagi sirlar, Vault/KMS yo’qligi.
Apply Rejasiz va Peer Review’siz.

15) Joriy etish chek-varaqasi (0-45 kun)

0-10 kun

Masofadagi backend/lockni moslash, Terraform modullarini joylashtirish.
tflint/tfsec/checkov, ansible-lint; resurslar teglari/yorliqlari to’g "risida kelishib olish.
NGINX/agent/logerlar uchun Ansible rollarini yaratish; inventarlarni tashkil etish.

11-25 kun

Tanqidiy modullar/rollar uchun Conftest/OPA, Terratest va Molecule qoʻshish.
CI: MRga’plan’, reja artefakti, appruvli manual-apply; Ansible `--check` на stage.
Maxfiy saqlashni integratsiyalash (Vault/KMS/Secrets Manager).

26-45 kun

Drift-detektor uchun avto-reja, siyosat bo’yicha hisobotlar.
Tahrirlangan modullar/rollar katalogi; README hujjatlari. md’har birida.
GitOps: relizlar izohlari, monitoring va alert-geytlar bilan bog’lash.

16) Etuklik metrikasi

% state va lokli atrof-muhit = 100%.
Testlar bilan modullar/rollar ulushi (Terratest/Molecule) ≥ 70%.
MR dan apply (prod) gacha bo’lgan o’rtacha vaqt - soatlar, kunlar emas.
Nol «qoʻl dreyfi» (barcha oʻzgarishlar MR orqali amalga oshiriladi).
100% kritik resurslar Policy as Code (teglar, shifrlash, backup) bilan qoplangan.

17) Xulosa

Terraform infratuzilmaning bashorat qilinadigan, takrorlanadigan bazasini belgilaydi; Ansible servislar va xostlarni kerakli holatga keltiradi. Policy as Code, masofadan joylashtirilgan state, testlar, maxfiy menejment va CI/CD bilan plan → review → apply qo’shing - va IaC konturingiz boshqariladigan, xavfsiz va tezkor bo’ladi, relizlar esa atom va qaytariluvchan bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.