Инфрасохтор ҳамчун рамз: Terraform, Ansible
Инфрасохтор ҳамчун рамз: Terraform, Ansible
1) Чаро IA ва чӣ гуна воситаҳо фарқ мекунанд
Terraform - оркестри декларативӣ-IA: инфрасохтори абриро (VPC, K8s, LB, DB, IAM) тавассути провайдерҳо эҷод/тағйир медиҳад. Мӯҳлати истифодаи захираҳо ва ҳолати мағозаҳоро идора мекунад.
Ansible - конфигуратсияи мурофиавӣ-IA ва идоракунии конфигуратсия: мизбон/нармафзорро танзим мекунад (бастаҳо, файлҳо, хидматҳо), чӣ гуна таъмин кардани барномаҳо, қолабсозӣ, оркестри қадамҳоро медонад. Бе агент (SSH/Win .RM), бо idempotency вазифаҳо.
Омезиш: Terraform - "он чӣ платформа сохта шудааст", Ansible - "чӣ гуна он танзим ва роҳандозӣ шудааст".
2) Сохтори анборҳо ва қабатҳо
Мо 3 қабатро тавсия медиҳем:1. Бунёд (Минтақаи фурудгоҳ): шабакаҳо, IAM, KMS, гузоришҳои асосӣ/мониторинг.
2. Платформа: Кластерҳои Кубернетес, пойгоҳи додаҳо, навбатҳо, стеки мушоҳида.
3. Сарбории корӣ: фосилаҳо/номҳо, ҳисобҳои хидматӣ, сиёсатҳо, конфигуратсияҳо.
Репо:- 'iac/terraform/' - модулҳо ва муҳитҳо (' модулҳо/', 'envs/').
- 'iac/ansible/' - нақшҳо (' нақшҳо/'), китобҳои бозӣ ('дафтарҳои бозӣ/'), захираҳо (' ихтироъ/').
- 'policies/' - Қоидаҳои OPA/Conftest.
- 'pipelines/' - Скриптҳои CI/CD (линт/нақша/татбиқ/санҷиш).
3) Terraform: модулҳо, ҳолат, муҳит
3. 1 Модулҳо
Хурд, дубора истифодашуда: 'vpc', 'eks', 'rds', 'redis', 'alb', 'iam-нақш'.
Тағирёбандаҳои вуруд → '. tf ', натиҷаҳо →' натиҷаҳо. tf ', версияҳо - тавассути сабти модулҳо/git-tags.
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 Давлат
Қафои дурдаст (S3/GCS + Dynamo
Ҷудосозӣ аз рӯи муҳити зист: 'prod. tfstate ',' саҳна. tfstate '.
Давлат: 'нақшаи terraform' дар CI аз рӯи ҷадвал; ҳушдор ҳангоми ғарқ шудан.
hcl terraform {
backend "s3" {
bucket = "iac-state"
key = "prod/network/terraform. tfstate"
region = "eu-central-1"
dynamodb_table = "iac-locks"
encrypt = true
}
}
3. 3 Фазои корӣ/Envs
Интихобҳо:- Феҳристҳои ҷудогонаи 'envs/prod', 'envs/stage' (визуалӣ).
- Ҷойҳои корӣ барои вариантҳои сабук, аммо аз омезиши асрҳо худдорӣ кунед.
- Параметрҳо тавассути 'tfvars': 'prod. tfvars ',' марҳила. tfvars '.
4) Ansible: Нақшҳо, ихтироъҳо, Idempotence
4. 1 Нақшҳо ва китобҳои бозӣ
Стандарти галактика:
roles/
nginx/
tasks/main. yml templates/.j2 handlers/main. yml defaults/main. yml playbooks/
site. yml
Намунаи китоби бозӣ:
yaml
- hosts: web become: true roles:
- role: nginx vars:
nginx_listen_port: 8080
4. 2 Захираҳо ва динамика
'inventories/prod/хост. yml '+ тағирёбанда' group _ vars/host _ vars '.
Инвентаризатсияи динамикӣ: 'aws _ ec2', 'gcp _ compute', 'kubernetes. аслӣ '.
4. 3 Идемпотенция
Модулҳоро истифода баред (на 'shell') то ҳадди имкон.
'changed _ вақте ки '/' хушкшавии _ mode' for -ро санҷед.
Коркунон танҳо тағиротро инъикос мекунанд.
5) Асрҳо ва конфигуратсияҳо
Terraform: секретсияи арзишҳо тавассути 'ҳассос = ҳақиқӣ'; асрори худи онҳо дар давлат нестанд (дар AWS Secrets Manager/HashI Corp Vault/KMS нигоҳ доред ва ба манбаи маълумот муроҷиат кунед).
Ansible: Vault барои рамзгузории тағирёбанда ('рамзгузории ansible-vault'), ҳамгироӣ бо HashI Corp Vault/KMS.
Gitops: асрҳо дар репо/нигаҳдории алоҳида, дастрасӣ ба имтиёзҳои камтар.
6) Сиёсат ҳамчун Кодекс
Нақшаҳои OPA/Confest for Terraform: манъи S3 ҷамъиятӣ, SG кушода, захираҳои қайднашуда (барчаспҳо).
Terraform Cloud/Enterprise - Sentinel ҳамчун алтернатива.
Линт Ansible: услуб ва амният (бидуни 'sudo: ҳа' дар ҷое ки лозим нест, бидуни қабати хом).
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
Terraform: 'tflint', 'tfsec '/' checkov', Terratest (Go) барои санҷиши ҳамгироӣ.
Ansible: 'ansible-lint', Молекула (+ Docker/Podman/EC2) барои санҷидани нақшҳо.
Санҷишҳои дуд пас аз татбиқ: зондҳои HTTP, порт/равандҳо, ҳуқуқҳо.
8) CI/CD и Гитопс
Қубур (бо дархости Pull/Merge):1. Линт/сек: tflint, tfsec/checkov, ansible-lint.
2. Нақша: 'нақшаи terraform' бо нашри артефакт (шарҳ дар MR).
3. Дарвозаи сиёсат: Conftest/Sentinel.
4. Татбиқ кунед (дастӣ/тасдиқшуда): танҳо дар асоси имзои артефактҳо.
5. Ҷойгиркунии Ansible: '--check' дар саҳна, пас '--diff' дар prod.
6. Санҷишҳои баъдӣ: синтетика/проб, панели аннотация.
GITOPS:- Манифестро ҳамчун манбаи ҳақиқат нигоҳ доред; Argo CD/Flux барои Кубернетес, аммо кластерҳои асосӣ/ибтидоӣ тавассути Terraform.
9) Намунаҳо барои Кубернетҳо, шабакаҳо, пойгоҳи додаҳо
9. 1 Кубернетес
Terraform: Кластерҳои EKS/GKE/AKS, гиреҳҳо, IAM, Storage
Ansible: омодасозии AMI/bastion, монтажи тасвир/анборҳо, пас аз насб (регистрҳо/агентҳо/OT bastion).
9. 2 Шабакаҳо ва периметри
Terraform: VPC/subnets/NAT/Transit-Gateway/WAF, хатсайрҳо.
Ansible: NGINX/Envoy/HAP-roxy config, TLS, қоидаҳои WAF.
9. 3 Пойгоҳҳо/кэшҳо/навбатҳо
Terraform: Параметрҳои гурӯҳи RDS/Cloud
Ansible: гармкунии кэш, корҳои муҳоҷират, ташкили нусхабардорӣ/агентҳо.
10) Намунаҳои конфигуратсияҳо
10. 1 Terraform - RDS PostgrE SQL + 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-муштарӣ (фрагмент)
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) Идоракунии дрифт ва мутобиқат
Нақшаи даврии 'terraform' дар калиди танҳо барои хондан; ҳангоми ихтилоф чипта эҷод мекунад.
Ansible --check барои нақшҳои муҳим ба нақша гирифта шудааст (ҳолати аудит).
Ҳисоботҳо: нокомии OPA/Сиёсати махфӣ, захираҳои қайднашуда/нусхабардорӣ/мониторинг.
12) Мушоҳида ва аудит
'terraform applogs' logs ва нақшаи артефактҳо - захира кардани объект.
Ansible: 'callback _ plugins' (json) → log log/ELK; дохил кардани ID, ӯҳдадории SHA, trace_id.
Нишондиҳандаҳо: вақти иҷрои нақшаҳо/китобҳои бозӣ, басомади тағирот, фарогирии тестҳо.
13) Бехатарӣ
Имзои модул/нақш ё барчаспҳои собит/hashes.
Ҳуқуқҳои ҳадди ақали IAM ('нақша' ≠ 'татбиқ'), нақшҳои CI ва барномаи инсониро ҷудо кунед.
Рамзгузории давлат/гузоришҳо, регистрҳои хусусии модулҳо/нақшҳо.
Сиёсати "сирри оддии матн дар VCS", сканерҳои махфӣ (gitleaks/trufflehog).
14) Анти-намунаҳо
Як модули ҳаюло Terraform "барои ҳама чиз"; версияҳои модули гумшуда.
Маҳаллӣ 'terraform. tfstate 'ва ҳеҷ қуфл.
Таҳрири дастӣ дар абр аз болои Ia
Ansible 'shell '/' фармон' ба ҷои модулҳо (idempotency-ро мешиканад).
Инвентаризатсияи "дар як файл" бидуни гурӯҳҳо/тағирёбандаҳо, омезиши prod/марҳила.
Асрҳо дар вариантҳо/анборҳо, набудани Vault/KMS.
Бе нақша ва бидуни баррасии ҳамсолон муроҷиат кунед.
15) Рӯйхати назорати амалисозӣ (0-45 рӯз)
0-10 рӯз
Танзимоти пушти/қулфи дурдаст, васеъ кардани модулҳои Terraform.
Даргиронидани tflint/tfsec/checkov, ansible-lint; гуфтушунид барчасбҳо/тамғакоғазҳо.
Эҷод кардани нақшҳои Ansible барои NGINX/агентҳо/регистрҳо; захираҳо ташкил кунед.
11-25 рӯз
Барои модулҳо/нақшҳои интиқодӣ Conftest/OPA, Terratest ва Molecule илова кунед.
CI: 'нақша' оид ба MR, нақшаи артефакт, дастӣ бо тасдиқ; Марҳилаи Ansible '--check' na.
Интегратсияи нигаҳдории махфӣ (Менеҷери Vault/KMS/Secrets).
26-45 рӯз
Ҷадвали худкор барои муайянкунии дрифт, гузоришҳои сиёсат.
Феҳристи модулҳо/нақшҳо бо версия; 'README. md 'дар ҳар як.
Gitops: эзоҳҳои релизҳо, якҷоя бо дарвозаҳои мониторинг ва ҳушдор.
16) Нишондиҳандаҳои камолот
% муҳитҳо бо ҳолати дурдаст ва қуфлҳо = 100%.
Ҳиссаи модулҳо/нақшҳо бо озмоишҳо (Terratest/Molecule) 70% -ро ташкил медиҳад.
Вақти миёнаи MR барои муроҷиат кардан (prod) соатҳо аст, на рӯзҳо.
Сифр "кашиши дастӣ" (ҳама дигаргуниҳо тавассути MR мегузаранд).
100% захираҳои муҳим бо Сиёсат ҳамчун Кодекс фаро гирифта шудаанд (барчасбҳо, рамзгузорӣ, нусхабардорӣ).
17) Хулоса
Terraform пойгоҳи пешгӯишаванда ва такроршавандаро муайян мекунад; Ansible мизбон ва хидматҳоро ба ҳолати дилхоҳ меорад. Сиёсатро ҳамчун Кодекс илова кунед, ҳолати дурдаст бо макон, санҷишҳо, идоракунии махфӣ ва CI/CD бо нақшаи → баррасии → татбиқ кунед - ва ҳалқаи IA-и шумо идорашаванда, бехатар ва зуд мегардад ва релизҳо атомӣ ва баръакс мебошанд.