البنية التحتية كرمز: Terraform، Ansible
البنية التحتية كرمز: Terraform، Ansible
1) لماذا IaC وكيف تختلف الأدوات
Terraform - المنسق التوضيحي IaC: ينشئ/يعدل البنية التحتية السحابية (VPC، K8s، LB، DB، IAM) من خلال مقدمي الخدمة. يدير دورة حياة الموارد وحالة المتاجر.
Ansible - procedural config-IaC and configuration management: configures hosts/software (packages, files, services), without to provide applications, complating, constoration of process. بدون وكيل (SSH/WinRM)، مع حماقة المهام.
الجمع: Terraform - «ما تتكون منه المنصة،» Ansible - «كيف يتم تكوينها وإطلاقها.»
2) هيكل المستودعات والطبقات
نوصي بـ 3 طبقات:1. الأساس (منطقة الهبوط): الشبكات، الإدارة المتكاملة للمعلومات، نظام إدارة الكيمياء، سجلات القواعد/الرصد.
2. المنصة: مجموعات Kubernetes وقواعد البيانات وقوائم الانتظار والمكدس القابل للمراقبة.
3. أعباء العمل: المساحات/مساحات الأسماء، حسابات الخدمات، السياسات، التكوينات.
ريبو:- 'iac/terraform/' - modules and perments (' modules/', 'envs/').
- 'iac/ansible/' - roles (' roles/'), playbook ('playbook/'), instructions (' inventions/').
- «السياسات/» - OPA/Conftest rules.
- 'pipelines/' - CI/CD scripts (lint/plan/apply/test).
3) Terraform: الوحدات، الحالة، البيئات
3. 1 وحدات
صغيرة معاد استخدامها: "vpc"، "eks'،" rds'، "redis'،" alb "،" iam-role ".
متغيرات → المدخلات. النواتج → '. ، الإصدارات - من خلال سجل الوحدات/العلامات البصرية.
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 الدولة
Remote backend (S3/GCS + DynamoDB/LockTable) + أقفال.
الفصل حسب البيئة: 'prod. tfstate '،' انطلاق. tfstate '.
انحراف الدولة: 'خطة أرضية' في جزر كايمان في الموعد المحدد ؛ تنبيه عند الانجراف.
hcl terraform {
backend "s3" {
bucket = "iac-state"
key = "prod/network/terraform. tfstate"
region = "eu-central-1"
dynamodb_table = "iac-locks"
encrypt = true
}
}
3. 3 أماكن عمل/محفزات
الخيارات:- أدلة منفصلة 'enves/prod'، 'enves/stage' (بصرية).
- مساحات العمل لاختلافات الضوء، ولكن تجنب خلط الأسرار.
- المعلمات عبر «tfvars':» prod. tfvars'، 'المرحلة. tfvars '.
4) Ansible: الأدوار، قوائم الجرد، الغباء
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/hosters. yml' + المتغيرات "المجموعة _ vars/host _ vars'.
المخزون الديناميكي: "aws _ ec2"، "gcp _ compute"، "kubernetes. '.
4. 3 الخصوصية
استخدم وحدات (وليس "shell') حيثما أمكن ذلك.
«تغير _ عندما »/« تحقق _ الوضع» للتشغيل الجاف.
المعالجون يفكرون فقط في التغييرات.
5) الأسرار والتكوينات
Terraform: إفراز القيم من خلال 'حساس = حقيقي' ؛ الأسرار نفسها ليست في الولاية (تخزين في AWS Secrets Manager/HashiCorp Vault/KMS والرجوع إلى مصدر البيانات).
Ansible: Vault for variable encryption ('ansible-vault encrypt'), integration with HashiCorp Vault/KMS.
GitOps: أسرار في إعادة الشراء/التخزين المنفصل، والوصول بأقل امتياز.
6) السياسة كمدونة
OPA/Conftest for Terraform plans: حظر S3 العام، فتح SG، الموارد (العلامات) غير الموسومة.
Terraform Cloud/Enterprise - Sentinel كبديل.
Ansible Lint: style and security (بدون 'sudo: yes' where not need, without raw-shell).
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»، Molecule (+ Docker/Podman/EC2) لاختبار الأدوار.
اختبارات الدخان بعد التطبيق: تحقيقات HTTP، المنفذ/العمليات، الحقوق.
8) CI/CD и GitOps
خط الأنابيب (على طلب السحب/الدمج):1. Lint/Sec: tflint، tfsec/checkov، ansible-lint.
2. الخطة: «خطة أرضية» مع نشر القطع الأثرية (تعليق في MR).
3. بوابة السياسة: Conftest/Sentinel.
4. ينطبق (يدويا/معتمدا): فقط على الموقع الرئيسي مع توقيع القطع الأثرية.
5. نشر غير قابل للنشر: «--check» على خشبة المسرح، ثم «-diff» في الحث.
6. الفحوصات اللاحقة: المواد التركيبية/المسبار، لوحة عدادات شروح الإصدار.
GitOps:- الاحتفاظ بالبيانات كمصدر للحقيقة ؛ Argo CD/Flux لـ Kubernetes، ولكن المجموعات الأساسية/البدائية من خلال Terraform.
9) أنماط Kubernetes والشبكات وقواعد البيانات
9. 1 كوبرنيت
Terraform: EKS/GKE/AKS clusters, nodes, IAM, StorageClass, LB.
Ansible: AMI/إعداد المعقل، تجميع/مستودعات الصور، ما بعد التركيب (قاطعي الأشجار/الوكلاء/OTEL).
9. 2 الشبكات والمحيط
Terraform: VPC/subnets/NAT/Transit-Gateway/WAF، الطرق.
Ansible: NGINX/Envoy/HAProxy config و TLS و WAF coffig.
9. 3 قواعد/مخابئ/قوائم انتظار
Terraform: RDS/CloudSQL group parameter، Redis/ElastiCache، Kafka/MSK.
Ansible: تخزين مؤقت الإحماء، وظائف الهجرة، إنشاء نسخ احتياطية/وكلاء.
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 - postrescql-client role (جزء)
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) إدارة الانجراف والامتثال
'الخطة الأرضية' الدورية في مفتاح القراءة فقط ؛ يخلق تذكرة عندما يكون هناك تناقض.
Ansible -- check مجدول للأدوار الحاسمة (وضع التدقيق).
التقارير: فشل سياسات OPA/Conftest، موارد غير موسومة/احتياطية/رصد.
12) قابلية الملاحظة ومراجعة الحسابات
«تطبيق أرضي» القطع الأثرية والتخطيط - باستثناء تخزين الأشياء.
Ansible: 'callback _ plugins' (json) → central log/ELK; تشمل هوية الوظيفة، والالتزام SHA، trace_id.
المقاييس: وقت تنفيذ الخطط/كتب اللعب، وتواتر التغييرات، وتغطية الاختبار.
13) السلامة
التوقيع على الوحدة/الدور أو العلامات/التجزئة الثابتة.
الحد الأدنى من حقوق IAM («خطة» ≠ «تطبيق»)، فصل أدوار CI والتطبيق البشري.
تشفير الحالة/السجلات، السجلات الخاصة للوحدات/الأدوار.
سياسة «لا أسرار النص العادي في VCS»، ماسحات سرية (gitleaks/trufflehog).
14) الأنماط المضادة
وحدة وحش Terraform «لكل شيء» ؛ نسخ الوحدات المفقودة.
الشكل المحلي. تفيستيت "ولا أقفال.
تعديلات يدوية في السحابة فوق IaC → الانجراف الأبدي.
«قذيفة »/« أمر» غير قابلة للتحليل بدلاً من الوحدات (يكسر الخصوصية).
جرد «في ملف واحد» بدون مجموعات/متغيرات، مزج prod/مرحلة.
الأسرار في vars/المستودعات، عدم وجود Vault/KMS.
تقدم بدون خطة وبدون مراجعة الأقران.
15) قائمة التنفيذ المرجعية (0-45 يوما)
0-10 أيام
ضبط بعد خلفية/قفل، توسيع Terraform وحدات.
Enable tflint/tfsec/checkov, ansible-lint; التفاوض على علامات/بطاقات الموارد.
إنشاء أدوار Ansible لـ NGINX/الوكلاء/قاطعي الأشجار ؛ تنظيم عمليات الجرد.
11-25 يومًا
أضف Conftest/OPA و Terratest و Molecule للوحدات/الأدوار الحرجة.
CI: «خطة» على MR، قطعة أثرية مخططة، تطبيق يدوي مع الموافقة ؛ مسرح на Ansible '-- check'.
دمج التخزين السري (Vault/KMS/Secrets Manager).
26-45 يومًا
جدول السيارات للكشف عن الانجراف، تقارير السياسة.
دليل الوحدات/الأدوار مع النسخ ؛ 'README. md 'في كل منها.
GitOps: شروح الإصدارات، مزيج من بوابات المراقبة والتنبيه.
16) مقاييس النضج
% من البيئات ذات الحالة النائية والأقفال = 100%.
حصة الوحدات/الأدوار مع الاختبارات (Terratest/Molecule) ≥ 70٪.
متوسط الوقت من MR للتقديم (prod) هو ساعات وليس أيام.
صفر «الانجراف اليدوي» (جميع التغييرات تمر عبر MR).
تغطي السياسة 100٪ من الموارد الحيوية كمدونة (العلامات والتشفير والنسخ الاحتياطي).
17)
تحدد Terraform قاعدة بنية تحتية قابلة للتنبؤ وقابلة للتكرار ؛ يجلب Ansible المضيفين والخدمات إلى الدولة المرغوبة. أضف السياسة كرمز، حالة بعيدة مع الموقع والاختبارات والإدارة السرية و CI/CD مع plan→review→apply - وتصبح حلقة IaC الخاصة بك قابلة للإدارة وآمنة وسريعة، والإطلاقات ذرية ويمكن عكسها.