GH GambleHub

Инфрасохтор ҳамчун рамз: 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: ҳа' дар ҷое ки лозим нест, бидуни қабати хом).

Намунаи 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

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-и шумо идорашаванда, бехатар ва зуд мегардад ва релизҳо атомӣ ва баръакс мебошанд.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.