GH GambleHub

Infrastructure as Code: Terraform, Ansible

Infrastructure as Code: Terraform, Ansible

1) Эмне үчүн IaC жана кандай аспаптар менен айырмаланат

Terraform - декларативдик orchestrator-IaC: булут инфраструктурасын (VPC, K8s, LB, DD, IAM) провайдерлер аркылуу түзөт/өзгөртөт. Ресурстардын жашоо циклин башкарат жана байлыгын сактайт.
Ansible - процедуралык config-IaC жана конфигурациялык башкаруу: хосттарды/программаларды (пакеттерди, файлдарды, кызматтарды) конфигурациялайт, колдонмолорду, темплейтингди, кадамдарды топтоону билет. Агент жок (SSH/WinRM), милдеттердин демпотенттиги менен.

Айкалышы: Terraform - "платформа жасалган", Ansible - "ал орнотулган жана ишке".

2) Репозиторийлердин жана катмарлардын түзүлүшү

3 катмар сунуш:

1. Foundation (Landing Zone): тармактар, IAM, KMS, негизги журналдар/мониторинг.

2. Платформа: Kubernetes кластерлери, базалар, кезектер, observability-стек.

3. Workloads: мейкиндик/неймспейстер, тейлөө эсептери, саясатчылар, конфиги.

Репо:
  • 'iac/terraform/' - модулдар жана чөйрөлөр (' modules/', 'envs/').
  • 'iac/ansible/' - ролдор (' roles/'), плейбуктар ('playbooks/'), инвентарлар (' inventories/').
  • 'policies/' - OPA/Conftest эрежелери.
  • 'pipelines/' - CI/CD скрипттери (lint/plan/apply/test).

3) Терраформ: модулдары, мамлекеттик, айлана-чөйрө

3. 1 модулдары

Чакан, кайра колдонулган: 'vpc', 'eks', 'rds', 'redis', 'alb', 'iam-role'.
→ 'variables. tf ', →' outputs. tf ', версиялар - модулдардын реестри/git-теги аркылуу.

Модулду чакыруунун мисалы:
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 абалы (state)

Алыскы backend (S3/GCS + DynamoDB/LockTable) + кулпу.
Чөйрө боюнча бөлүү: 'prod. tfstate`, `staging. tfstate`.
State-drift: "terraform plan" CI тартиби боюнча; дрейфте алерт.

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 Workspaces / Envs

Параметрлери:
  • Жеке каталогдор 'envs/prod', 'envs/stage' (ачык).
  • Workspaces жеңил вариациялар үчүн, бирок сырларды аралаштыруудан алыс.
  • 'tfvars' аркылуу параметрлери: 'prod. tfvars`, `stage. tfvars`.

4) Ansible: ролдору, жабдуулар, боштук

4. 1 Ролдор жана Playbook

Galaxy стандарты:

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

4. 2 Инвентаризация жана динамика

`inventories/prod/hosts. yml '+ өзгөрмөлөр' group _ vars/host _ vars '.
Динамикалык инвентарь: 'aws _ ec2', 'gcp _ compute', 'kubernetes. core`.

4. 3 Демпотенттик

Мүмкүн болгон жерде модулдарды ('shell' эмес) колдонуңуз.
'changed _ when '/' check _ mode' кургак прогондор үчүн.
Handlers гана өзгөрүүлөр менен ой жүгүртүү.

5) Сырлар жана конфиги

Terraform: 'sensitive = true' аркылуу маанилердин секрециясы; өздөрү сырлар - мамлекеттик эмес (AWS Secrets Manager/HashiCorp Vault/KMS сактоо жана маалымат булактарына шилтеме).
Ansible: өзгөрмөлүү коддоо үчүн Vault ('ansible-vault encrypt'), HashiCorp Vault/KMS менен бириктирүү.
GitOps: өзүнчө репо/сактоо сырлары, least-privilege аркылуу кирүү.

6) Саясат жана шайкештик (Саясат кодекс)

OPA/Conftest үчүн Terraform пландары: коомдук S3 тыюу, ачык SG, белгиленбеген ресурстар (tags).
Terraform Cloud/Enterprise - альтернатива катары Sentinel.
Ansible Lint: стили жана коопсуздук (жок 'sudo: yes' зарыл эмес жерде, чийки-shell жок).

Conftest Мисалы (rego, жөнөкөйлөтүлгөн):
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 сыноо

Терраформ: 'tflint', 'tfsec '/' checkov', Терратест (Go) интеграциялык текшерүүлөр үчүн.
Ansible: 'ansible-lint', Molecule (+ Docker/Podman/EC2) ролдорду текшерүү үчүн.
Smouk тесттер кийин apply: HTTP probes, порт/процесстер, укуктар.

8) CI/CD и GitOps

Pipeline (Pull/Merge Request боюнча):

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

2. Plan: артефакты жарыялоо менен 'terraform plan' (MR комментарийи).

3. Policy Gate: Conftest/Sentinel.

4. Apply (manual/approved): экспонаттардын кол тамгасы менен гана негизги.

5. Ansible deploy: '--check' on stage, андан кийин '--diff' in prod.

6. Post-текшерүү: синтетика/Probe, dashboard жарыялоо аннотация.

GitOps:
  • Манифесттерди чындыктын булагы катары сактаңыз; Kubernetes үчүн Argo CD/Flux, бирок негизги кластерлер/примитивдер - Terraform аркылуу.

9) Kubernetes үчүн үлгүлөр, тармактар, DD

9. 1 Kubernetes

Terraform: EKS/GKE/AKS кластерлер, түйүндөр, IAM, StorageClass, LB.
Ansible: AMI/бастиондорду даярдоо, сүрөттөрдү/репозиторийлерди чогултуу, пост-орнотуу (логгерлер/агенттер/OTel).

9. 2 Тармактар жана периметри

Терраформ: VPC/көмөкчордондор/NAT/Transit-Gateway/WAF, каттамдар.
Ansible: NGINX/Envoy/HAProxy, TLS, WAF эрежелери.

9. 3 Базалар/кэш/кезек

Terraform: RDS/CloudSQL параметр тобу, Redis/ElastiCache, Kafka/MSK.
Ansible: кэш жылытуу, миграциялык тапшырмалар, backaps/агенттерди орнотуу.

10) Конфигурациялардын мисалдары

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 - жашыруун маалымат булагы

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 ролу (үзүндү)

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) Drift башкаруу жана шайкештик

Мезгил-мезгили менен 'terraform plan' жылы read-only ачкыч; айырмачылыктар болгондо билетти түзөт.
Ansible --check критикалык ролдору үчүн график боюнча (аудит режими).
Отчеттор: аткарылбаган OPA/Conftest саясаты, тегсиз ресурстар/backup/мониторинг.

12) Байкоо жана аудит

Logi 'terraform apply' жана пландар артефакттары - объектти сактоочу жайга сактаңыз.
Ansible: 'callback _ plugins' (json) → борбордук лог/ELK; job ID, commit SHA, trace_id.
Метрика: плейбуктар/плейбуктарды аткаруу убактысы, өзгөртүү жыштыгы, тесттер менен жабуу.

13) Коопсуздук

Кол модулдары/ролдору же белгиленген теги/хэш.
Минималдуу IAM укуктары ('plan' ≠ 'apply'), CI жана адам-апфрувердин ролдорун бөлүшүү.
Статус/логдорду шифрлөө, модулдардын/ролдордун жеке реестрлери.
"No plaintext secrets in VCS" саясаты, жашыруун сканерлер (gitleaks/trufflehog).

14) Анти-үлгүлөрү

Бир Monster Module Terraform "бардык"; модулдардын версияларынын жоктугу.
Жергиликтүү 'terraform. tfstate 'жана блоктордун жоктугу.
IaC үстүнөн булуттагы кол түзөтүүлөр → түбөлүк дрейф.
Ansible 'shell '/' command' модулдарынын ордуна (демпотенттикти бузат).
Инвентаризация "бир файл" жок топтор/өзгөрмөлүү, аралаштыруу prod/этап.
vars/репозиторийдеги сырлар, Vault/KMS жоктугу.
Apply No Plan жана Peer Review жок.

15) киргизүү чек-тизмеси (0-45 күн)

0-10 күн

алыскы backend/lock орнотуу, Terraform модулдарды бөлүү.
tflint/tfsec/checkov, ansible-lint; тегдер/лейблдер ресурстары жөнүндө макулдашуу.
NGINX/агенттер/логерлер үчүн Ansible ролун баштоо; инвентаризацияларды уюштуруу.

11-25 күн

Conftest/OPA, Terratest жана Molecule критикалык модулдарды/ролдорду кошуу.
CI: MR боюнча "план", план артефакты, appruve менен manual-apply; Ansible `--check` на stage.
Жашыруун сактоо (Vault/KMS/Secrets Manager).

26-45 күн

drift detector үчүн Auto-план, саясат отчеттор.
Модулдарды/ролдорду версиялоо каталогу; документация 'README. ар бир md '.
GitOps: релиздердин аннотациялары, мониторинг жана алерт-гейт менен байланыш.

16) Жетилүү метрикасы

алыскы мамлекеттик жана блоктор менен чөйрөлөрдүн% = 100%.
тесттер менен модулдарды/ролдорду үлүшү (Terratest/Molecule) ≥ 70%.
MR apply (prod) чейин орточо убакыт - күн эмес, саат.
Нөлдүк "кол дрейф" (бардык өзгөртүүлөр MR аркылуу өтөт).
100% критикалык ресурстар Policy as Code (тегдер, шифрлөө, backup) менен капталган.

17) Корутунду

Терраформ болжолдонгон, кайталануучу инфраструктура базасын белгилейт; Ansible хостинг жана кызматтарды талап кылынган абалга алып келет. Policy as Code кошуу, жайгашкан менен алыскы мамлекет, тесттер, жашыруун башкаруу жана план менен CI/CD → review → apply - жана сиздин IaC контур башкарылуучу, коопсуз жана тез болот, жана релиздер - атомдук жана кайтарылуучу.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.