📖 ما هو IaC؟
Infrastructure as Code
بدلاً من إعداد الخوادم يدوياً عبر واجهات، تعرّف كل شيء (خوادم، شبكات، قواعد بيانات) في ملفات كود. يمكنك مراجعتها، نسخها، وإعادة بناء البنية بالكامل بأمر واحد.
🏗️
Terraform (توفير)
يُنشئ البنية التحتية من الصفر: خوادم، شبكات، قواعد بيانات عبر APIs.
⚙️
Ansible (إعداد)
يُعدّ الخوادم بعد إنشائها: تثبيت برامج، إعدادات، نشر تطبيقات.
🏗️ Terraform — الأساسيات
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "web-server"
Env = "production"
}
}
output "public_ip" {
value = aws_instance.web.public_ip
}
terraform init
terraform plan
terraform apply -auto-approve
terraform show
terraform destroy
⚠️
ملف terraform.tfstate يحتوي معلومات حساسة. احفظه في remote backend (S3 + DynamoDB) وليس محلياً.
📋 Terraform — بنية متقدمة
variable "instance_type" {
description = "EC2 instance type"
type = string
default = "t3.micro"
}
variable "env" {
description = "Environment name"
type = string
default = "production"
}
instance_type = "t3.medium"
env = "staging"
⚙️ Ansible — الأساسيات
إعداد الخوادم بدون Agent
Ansible يتصل بالخوادم عبر SSH وينفّذ المهام. لا يحتاج تثبيت عميل على الخوادم المستهدفة.
[webservers]
web1 ansible_host=10.0.1.10
web2 ansible_host=10.0.1.11
[dbservers]
db1 ansible_host=10.0.2.10
[all:vars]
ansible_user=devops
ansible_ssh_private_key_file=~/.ssh/id_ed25519
---
- name: Setup Web Servers
hosts: webservers
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx
service:
name: nginx
state: started
enabled: yes
- name: Deploy app config
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: restart nginx
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
ansible all -m ping
ansible-playbook playbook.yml
ansible-playbook playbook.yml --limit webservers
ansible-playbook playbook.yml --syntax-check
ansible-playbook playbook.yml --check
✅ أفضل الممارسات
🎯
1. استخدم remote backend لـ Terraform state
2. لا تضع Secrets في الكود — استخدم Vault أو Variables
3. نفّذ terraform plan قبل apply
4. استخدم modules لإعادة الاستخدام
5. اجعل Ansible playbooks idempotent (قابلة للتكرار بأمان)
6. استخدم Git لتتبع تغييرات البنية التحتية