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.
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.
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).
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.