زیرساخت به عنوان کد: زمینی، غیر ممکن
زیرساخت به عنوان کد: زمینی، غیر ممکن
1) چرا IAc و چگونه ابزارها متفاوت هستند
Terraform - هماهنگ کننده اعلانی IaC: ایجاد/اصلاح زیرساخت های ابر (VPC، K8s، LB، DB، IAM) از طریق ارائه دهندگان. مدیریت چرخه عمر منابع و دولت فروشگاه.
Ansible - procedural config-IaC and configuration management: پیکربندی میزبان/نرم افزار (بسته ها، فایل ها، خدمات)، می داند که چگونه برنامه های کاربردی، قالب بندی، ارکستراسیون مراحل را ارائه دهد. بدون عامل (SSH/WinRM)، با توانایی وظایف.
ترکیب: Terraform - «پلتفرم از چه چیزی ساخته شده است»، Ansible - «نحوه پیکربندی و راه اندازی آن».
2) ساختار مخازن و لایه ها
ما 3 لایه را توصیه می کنیم:1. بنیاد (منطقه فرود): شبکه ها، IAM، KMS، سیاهههای مربوط به پایه/نظارت.
2. بستر های نرم افزاری: خوشه Kubernetes، پایگاه داده، صف، پشته مشاهده پذیری.
3. بارهای کاری: فضاهای/فضای نام، حساب های سرویس، سیاست ها، پیکربندی ها.
ذخیره سازی:- 'iac/terraform/' - ماژول ها و محیط ها (' ماژول ها/'، 'envs/').
- «iac/ansible/» - نقش ها (« نقش ها »)، playbooks (« playbooks/»)، موجودی ها («اختراعات/»).
- 'policies/' - قوانین OPA/Conftest.
- 'خطوط/' - اسکریپتهای CI/CD (lint/plan/apply/test).
3) Terraform: ماژول ها، حالت ها، محیط ها
3. 1 ماژول ها
کوچک، استفاده مجدد: 'vpc'، 'eks'، 'rds'، 'redis'، 'alb'، 'iam-role'.
ورودی → "متغیرها. 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 + DynamoDB/LockTable) + قفل.
جداسازی توسط محیط زیست: "تحریک. tfstate '،' صحنه سازی. وضعیت '.
رانش دولت: 'طرح زمینی' در 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/prod»، «envs/stage» (بصری).
- فضاهای کاری برای تغییرات نور، اما اجتناب از مخلوط کردن اسرار.
- پارامترها از طریق 'tfvars': 'prod. tfvars '،' مرحله. tfvars '.
4) غیر ممکن: نقش ها، موجودی ها، بی نظمی
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/hosts. yml '+ variables' group _ vars/host _ vars '.
موجودی پویا: 'aws _ ec2'، 'gcp _ compute'، 'kubernetes. هسته ای است.
4. 3 عدم توانایی
در صورت امکان از ماژول ها (نه «پوسته») استفاده کنید.
'changed _ when '/' check _ mode' for dry runs.
مدیران فقط تغییرات را منعکس می کنند.
5) اسرار و پیکربندی
ترافرم: ترشح مقادیر از طریق 'sensitive = true'; اسرار خود را در دولت نیست (فروشگاه در AWS Secrets Manager/HashiCorp Vault/KMS و به منبع داده مراجعه کنید).
غیر ممکن: خرک برای رمزگذاری متغیر («ansible-vault encrypt»)، ادغام با HashiCorp Vault/KMS.
GitOps: اسرار در یک مخزن/ذخیره سازی جداگانه، دسترسی به حداقل امتیاز.
6) سیاست به عنوان کد
OPA/Conftest برای برنامه های Terraform: ممنوعیت S3 عمومی، SG باز، منابع بدون برچسب (برچسب ها).
ابر Terraform/شرکت - نگهبان به عنوان یک جایگزین.
Ansible Lint: سبک و امنیت (بدون 'sudo: yes' که در آن مورد نیاز نیست، بدون خام پوسته).
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-lint»، مولکول (+ Docker/Podman/EC2) برای آزمایش نقش ها.
تست دود پس از اعمال: پروب HTTP، پورت/فرآیندها، حقوق.
8) CI/CD и GitOps
خط لوله (در درخواست کشیدن/ادغام):1. Lint/Sec: tflint، tfsec/checkov، ansible-lint.
2. طرح: «طرح زمینی» با انتشار مصنوعات (نظر در MR).
3. دروازه سیاست: Constest/Sentinel.
4. درخواست (دستی/تایید شده): فقط در اصلی با امضای مصنوعات.
5. استقرار غیر ممکن: '- چک' در مرحله، پس از آن '- - diff' در تولید.
6. پس از بررسی: synthetics/Probe، داشبورد حاشیه نویسی آزاد.
گیت اپس:- مانیفست ها را به عنوان منبع حقیقت حفظ کنید ؛ Argo CD/Flux برای Kubernetes، اما خوشه های اولیه/اولیه از طریق Terraform.
9) الگوهای Kubernetes، شبکه ها، پایگاه داده ها
9. 1 کوبرنتیز
ترافرم: خوشه های EKS/GKE/AKS، گره ها، IAM، StorageClass، LB.
غیر ممکن: آماده سازی AMI/bastion، مونتاژ تصویر/مخازن، پس از نصب (loggers/agents/OTel).
9. 2 شبکه ها و محیط
ترافرم: VPC/subnets/NAT/Transit-Gateway/WAF، مسیرها.
غیر ممکن است: NGINX/Envoy/HAProxy config، TLS، WAF قوانین پیکربندی.
9. 3 پایه/کش/صف
پارامتر گروه RDS/CloudSQL، Redis/ElastiCache، Kafka/MSK.
غیر ممکن: کش گرم کردن، شغل مهاجرت، راه اندازی پشتیبان گیری/عوامل.
10) نمونه هایی از پیکربندی
10. 1 ترافرم - 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 غیر ممکن - نقش 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 غیر ممکن - 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) رانش و مدیریت انطباق
«برنامه ریزی زمینی» دوره ای در کلید فقط خواندنی ؛ ایجاد یک بلیط زمانی که اختلاف وجود دارد.
غیر ممکن - بررسی برنامه ریزی شده برای نقش های بحرانی (حالت حسابرسی).
گزارش ها: شکست خورده OPA/Conftest سیاست، untagged/منابع پشتیبان/نظارت.
12) قابلیت مشاهده و حسابرسی
'terraform apply' logs and plan artifacts - صرفه جویی در ذخیره سازی شی.
غیر ممکن: 'callback _ plugins' (json) → ورود به سیستم مرکزی/ELK ؛ شامل شناسه شغلی، تعهد SHA، trace_id.
معیارها: زمان اجرای برنامه ها/playbooks، فرکانس تغییرات، پوشش تست.
13) ایمنی
امضای ماژول/نقش یا برچسب ها/هش های ثابت.
حداقل حقوق IAM («برنامه» ≠ «اعمال»)، نقش CI و برنامه انسانی را جدا کنید.
رمزگذاری حالت/سیاهههای مربوط، ثبت خصوصی ماژول ها/نقش ها.
سیاست «هیچ اسرار متن ساده در VCS»، اسکنرهای مخفی (gitleaks/trufflehog).
14) ضد الگوهای
یک ماژول هیولا Terraform «برای همه چیز» ؛ نسخه های گم شده ماژول
محلی 'شکل. بدون قفل.
ویرایش دستی در ابر بیش از IaC → رانش ابدی.
«shell »/« command» غیر ممکن به جای ماژول ها (idempotency breaks).
موجودی «در یک فایل» بدون گروه/متغیر، مخلوط کردن تولید/مرحله.
اسرار در vars/مخازن، عدم وجود vault/KMS.
درخواست بدون برنامه و بدون بررسی دقیق.
15) چک لیست پیاده سازی (0-45 روز)
0-10 روز
پیکربندی backend/lock از راه دور، ماژول های Terraform را گسترش دهید.
فعال کردن tflint/tfsec/checkov، ansible-lint ؛ مذاکره برچسب ها/برچسب های منابع.
ایجاد نقش های غیر ممکن برای NGINX/عوامل/loggers ؛ سازماندهی موجودی ها
11-25 روز
Conftest/OPA، Terratest و Molecule را برای ماژول ها/نقش های مهم اضافه کنید.
CI: «طرح» در MR، طرح مصنوع، کتابچه راهنمای کاربر با تصویب ؛ غیر ممکن «- بررسی» مرحله на.
ادغام ذخیره سازی مخفی (Vault/KMS/Secrets Manager).
26-45 روز
برنامه خودکار برای تشخیص رانش، گزارش های سیاست.
فهرست ماژول ها/نقش ها با نسخه بندی ؛ مرا بخوانید. در هر یک.
GitOps: حاشیه نویسی نسخه ها، ترکیبی با دروازه های نظارت و هشدار.
16) معیارهای بلوغ
٪ از محیط های با حالت از راه دور و قفل = 100٪.
سهم ماژول ها/نقش ها با آزمون (Terratest/Molecule) 70٪ ≥.
میانگین زمان از MR برای درخواست (prod) ساعت ها است، نه روزها.
صفر «رانش دستی» (تمام تغییرات از طریق MR).
100٪ از منابع بحرانی توسط سیاست به عنوان کد (برچسب ها، رمزگذاری، پشتیبان گیری) پوشش داده شده است.
17) نتیجه گیری
Terraform یک پایگاه زیرساخت قابل پیش بینی و قابل تکرار را مشخص می کند. Ansible میزبان ها و خدمات را به حالت مورد نظر می رساند. سیاست را به عنوان کد اضافه کنید، وضعیت از راه دور با مکان، تست ها، مدیریت مخفی و CI/CD با برنامه → بررسی → اعمال کنید - و حلقه IaC شما قابل کنترل، امن و سریع می شود و نسخه ها اتمی و برگشت پذیر هستند.