Infrastructure as Code: إدارة السيرفرات ككود

Terraform و Ansible يحوّلون إعداد السيرفر لملفات كود. قابلة للمراجعة والإعادة. نشرح المفهوم والبداية.
ما هي البنية التحتية ككود؟
البنية التحتية ككود (Infrastructure as Code - IaC) هي ممارسة إدارة وتجهيز البنية التحتية من سيرفرات وشبكات وقواعد بيانات من خلال ملفات تعريفية قابلة للقراءة بدل الإعداد اليدوي. بدل ما تدخل على كل سيرفر وتعدل الإعدادات يدويا، تكتب ملف يصف الحالة المطلوبة والأداة تنفذها تلقائيا.
هذا التحول من الإدارة اليدوية للإدارة الآلية غير طريقة عمل فرق التشغيل بالكامل. نفس المبادئ التي يطبقها المطورون على الكود مثل التحكم بالإصدارات والمراجعة والاختبار أصبحت تنطبق على البنية التحتية.
لماذا IaC ضرورية؟
1. التكرار (Reproducibility)
ملف IaC واحد ينشئ نفس البيئة بالضبط في كل مرة. لا فرق بين بيئة التطوير والاختبار والإنتاج. هذا يقضي على مشكلة "يشتغل عندي" التي يعاني منها كل مطور.
2. التحكم بالإصدارات
كل تغيير على البنية التحتية مسجل في Git. تعرف من غير ماذا ومتى ولماذا. تقدر ترجع لأي نسخة سابقة خلال ثوان.
3. السرعة
إنشاء بيئة كاملة يستغرق دقائق بدل ساعات أو أيام. التوسع يصبح أمر تلقائي لا يتطلب تدخل بشري.
4. التوثيق الحي
ملفات IaC هي التوثيق. بدل مستندات قديمة لا أحد يحدثها، الملفات نفسها تصف الحالة الحالية للبنية التحتية بدقة.
5. تقليل الأخطاء البشرية
الإعداد اليدوي عرضة للنسيان والأخطاء. IaC تنفذ نفس الخطوات بنفس الترتيب في كل مرة بدون استثناء.
النهجان الأساسيان
التصريحي (Declarative)
تصف الحالة النهائية المطلوبة والأداة تحدد كيف تصل لها.
مثال: "أريد 3 سيرفرات بـ 4GB RAM على شبكة خاصة مع Load Balancer أمامها."
الأداة تقارن الحالة الحالية بالمطلوبة وتنفذ التغييرات اللازمة فقط.
أمثلة: Terraform، Kubernetes manifests، CloudFormation
الإجرائي (Imperative)
تكتب خطوات التنفيذ بالترتيب والأداة تنفذها واحدة تلو الأخرى.
مثال: "أنشئ سيرفر، ثم ثبت Nginx، ثم انسخ ملف الإعداد، ثم أعد تشغيل الخدمة."
أمثلة: Ansible playbooks، Shell scripts، Chef recipes
الأدوات الأساسية
Terraform
Terraform من HashiCorp هي الأداة الأكثر استخداما لإدارة البنية التحتية السحابية. تستخدم لغة HCL (HashiCorp Configuration Language).
مثال لإنشاء سيرفر:
resource "server" "web" {
name = "web-server-01"
cpu = 4
memory = 8192
disk = 100
network {
type = "private"
ip = "10.0.1.10"
}
}
المميزات:
- يدعم مئات مزودي الخدمة عبر Providers
- State file يتتبع الحالة الحالية
- Plan يعرض التغييرات قبل تطبيقها
- Modules لإعادة استخدام الإعدادات
Ansible
Ansible من Red Hat أداة لإدارة الإعدادات وتنفيذ المهام على السيرفرات. تستخدم YAML ولا تحتاج تثبيت agent على السيرفرات المستهدفة.
مثال Playbook:
- name: إعداد خادم الويب
hosts: webservers
tasks:
- name: تثبيت Nginx
apt:
name: nginx
state: present
- name: نسخ ملف الإعداد
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
- name: تشغيل Nginx
service:
name: nginx
state: started
enabled: yes
المميزات:
- Agentless - يعمل عبر SSH فقط
- YAML سهل القراءة والكتابة
- Roles لتنظيم المهام
- Galaxy لمشاركة الأدوار الجاهزة
Pulumi
Pulumi يتيح كتابة IaC بلغات برمجة حقيقية مثل Python وTypeScript وGo. بدل تعلم لغة جديدة مثل HCL، تستخدم لغتك المفضلة.
import pulumi
from pulumi import Config
server = Server("web-01",
cpu=4,
memory=8192,
disk=100
)
pulumi.export("server_ip", server.ip)
هيكل مشروع IaC نموذجي
infrastructure/
├── environments/
│ ├── dev/
│ │ └── main.tf
│ ├── staging/
│ │ └── main.tf
│ └── production/
│ └── main.tf
├── modules/
│ ├── network/
│ ├── compute/
│ └── database/
├── ansible/
│ ├── playbooks/
│ ├── roles/
│ └── inventory/
└── README.md
أفضل الممارسات
1. كل شيء في Git
لا تغيير يحدث خارج Git. كل تعديل على البنية التحتية يمر عبر Pull Request ومراجعة.
2. بيئات منفصلة
ملفات منفصلة لكل بيئة (dev, staging, production) مع متغيرات مختلفة. نفس الكود، قيم مختلفة.
3. الوحدات (Modules)
قسم البنية التحتية لوحدات قابلة لإعادة الاستخدام. شبكة منفصلة عن الحوسبة منفصلة عن قواعد البيانات.
4. State بعيد
لا تحفظ ملف State محليا. استخدم تخزين بعيد مشترك مثل S3 أو GCS مع قفل لمنع التعارض.
5. اختبر قبل التطبيق
استخدم terraform plan دائما قبل terraform apply. راجع التغييرات بدقة. خطأ واحد قد يحذف سيرفر إنتاج.
6. الأسرار خارج الكود
كلمات المرور ومفاتيح API لا تكون في ملفات IaC أبدا. استخدم Vault أو متغيرات بيئة أو خدمة أسرار.
البداية العملية
- ابدأ صغيرا: لا تحاول تحويل كل بنيتك التحتية دفعة واحدة. ابدأ بسيرفر واحد أو خدمة واحدة
- تعلم Terraform أولا: الأكثر طلبا في السوق والأوسع دعما
- أضف Ansible: لإدارة ما يحدث داخل السيرفر بعد إنشائه
- وثق باستمرار: اكتب تعليقات واضحة في ملفاتك
على سيرفرات كلاود (cloud.net.sa) تحصل على VPS بصلاحيات root كاملة، مما يتيح لك تطبيق أي أداة IaC تختارها بدون قيود. ابدأ بسيرفر تطوير وجرب قبل تطبيق الأتمتة على الإنتاج.
ابدأ الآن
جاهز تبني مشروعك؟ اختر خادمك السحابي بالمواصفات اللي يحتاجها تطبيقك، أو راجع الباقات والأسعار.
