البنية التحتية ككود
مقدمة
هل عشت هذه الكابوس من قبل: خادم الإنتاج معطل ولا أحد يتذكر كيف تم تكوينه في الأصل؟ تسجيل الدخول يدوياً للخادم، وكتابة الأوامر من الذاكرة، والدعاء بعدم ارتكاب خطأ — هذا هو العمل اليومي للعمليات التقليدية. البنية التحتية ككود (Infrastructure as Code, IaC) غيّرت كل ذلك جذرياً: استخدام الكود لتعريف وإدارة البنية التحتية، جاعلاً تكوين الخوادم قابلاً للتحكم بالإصدارات وقابلاً للتكرار وقابلاً للتدقيق، تماماً مثل البرمجيات.
ماذا ستتعلم في هذا المقال؟
بعد إتمام هذا الفصل، ستحصل على:
- المفاهيم الأساسية: فهم ما هو IaC ولماذا هو حجر الأساس في العمليات الحديثة
- معرفة سير العمل: إتقان المراحل الأربع لسير عمل Terraform: Write → Plan → Apply → Destroy
- اختيار الأدوات: التعرف على مزايا وعيوب الأدوات الرئيسية مثل Terraform وPulumi وCloudFormation
- الوعي بالمخاطر: فهم مخاطر انحراف التكوين وطرق الكشف
- أفضل الممارسات: إتقان أساليب الإدارة الهندسية لمشاريع IaC
| الفصل | المحتوى | المفهوم الأساسي |
|---|---|---|
| الفصل 1 | مفهوم IaC | العمليات اليدوية مقابل الإدارة بالكود |
| الفصل 2 | سير عمل Terraform | Write → Plan → Apply |
| الفصل 3 | مقارنة الأدوات | Terraform، Pulumi، CDK |
| الفصل 4 | انحراف التكوين | الكشف، الوقاية، الإصلاح |
| الفصل 5 | أفضل الممارسات | الوحدات، إدارة الحالة، CI/CD |
0. صورة شاملة: لماذا تحتاج البنية التحتية أيضاً إلى "كود مصدر"؟
تخيل أنك طباخ. إذا طبخت كل طبق بالحدس، اليوم ملعقة ملح وغداً ملعقتين، لن يكون الطعم مستقراً أبداً. لكن إذا كتبت الوصفة — بدقة حتى جرام كل توابل — يمكن لأي شخص إعادة إنتاج نفس الطعم.
إدارة البنية التحتية تواجه نفس المشكلة. تكوين خادم واحد قد يشمل نظام التشغيل وقواعد الشبكة ومجموعات الأمان وأقراص التخزين ومتغيرات البيئة وعشرات المعاملات. التكوين اليدوي ليس فقط عرضة للأخطاء، بل هو أيضاً غير قابل للتكرار وغير قابل للتدقيق وغير قابل للتراجع.
القيمة الأساسية لـ IaC
- قابل للتكرار: نفس الكود، مهما نُفذ مرات عديدة، النتيجة واحدة (الخنوع)
- قابل للتحكم بالإصدارات: تغييرات البنية التحتية تُدار عبر Git، من غيّر ماذا ولماذا، واضح بنظرة واحدة
- قابل للتدقيق: جميع التغييرات مسجلة، تلبي متطلبات الامتثال
- قابل للأتمتة: النشر التلقائي عبر خطوط أنابيب CI/CD، إزالة مخاطر العمليات اليدوية
- قابل للتعاون: أعضاء الفريق يراجعون تغييرات البنية التحتية عبر طلبات السحب، مثل مراجعة الكود
1. مفهوم IaC: من "النقر اليدوي" إلى "الإعلان بالكود"
طريقة العمل في العمليات التقليدية هي: تسجيل الدخول إلى وحدة تحكم المنصة السحابية، والنقر يدوياً لإنشاء خوادم وتكوين الشبكات وإعداد مجموعات الأمان. هذه الطريقة تنجح عند إدارة بضعة خوادم، لكن عندما يتوسع النطاق إلى عشرات أو مئات الخوادم، تصبح كابوساً.
الفكرة الأساسية لـ IaC هي: استخدام كود إعلاني لوصف الحالة المرغوبة للبنية التحتية، وترك الأدوات تنفذها تلقائياً. لا تحتاج لإخبار الأداة "أنشئ VPC أولاً، ثم subnet، ثم مجموعة أمان" (إلزامي)، فقط قل "أريد بيئة شبكة هكذا" (إعلاني)، والأداة ستحسب الخطوات المطلوبة تلقائياً.
| 对比维度 | 手动运维 | 基础设施即代码 |
|---|---|---|
| 可重复性 | 每次操作可能不同 | 代码保证完全一致 |
| 速度 | 分钟到小时级 | 秒到分钟级 |
| 审计追踪 | 依赖人工记录 | Git 历史自动记录 |
| 协作 | 口头传达、截图 | Code Review、PR 流程 |
| 回滚 | 几乎不可能 | git revert 一键回滚 |
| البُعد | العمليات اليدوية | البنية التحتية ككود |
|---|---|---|
| طريقة التشغيل | تسجيل الدخول والنقر | كتابة ملفات كود |
| قابلية التكرار | تعتمد على التوثيق والذاكرة | الكود هو التوثيق، 100% قابل للتكرار |
| تتبع التغييرات | بدون سجل أو سجل غير مكتمل | تحكم بإصدارات Git، تاريخ كامل |
| طريقة التعاون | تواصل شفهي، نقل وثائق | مراجعة عبر طلبات السحب |
| القدرة على التراجع | عملية عكسية يدوية | git revert + إعادة التطبيق |
| الاتساق | فروق كبيرة بين البيئات | تطوير/اختبار/إنتاج متطابق تماماً |
الإعلاني مقابل الإلزامي
- الإعلاني (Declarative): يصف "ماذا أريد"، الأداة تحسب "كيف" تلقائياً. Terraform وCloudFormation يستخدمان هذه الطريقة. الميزة: خنوع جيد. العيب: مرونة محدودة.
- الإلزامي (Imperative): يصف "كيف"، ينفذ خطوة بخطوة. Ansible وسكربتات Shell تستخدم هذه الطريقة. الميزة: مرونة. العيب: صعوبة ضمان الخنوع.
- هجين: Pulumi وAWS CDK تُكتب بلغات برمجة عامة، تجمع بين إدارة الحالة الإعلانية ومرونة الإلزامي.
2. سير عمل Terraform: Write → Plan → Apply
Terraform هو أداة IaC الأكثر شعبية حالياً، طورتها HashiCorp. سير عملها واضح وبديهي، مقسم إلى أربع مراحل، مثل عملية تطوير البرمجيات "الترميز ← المراجعة ← النشر ← التنظيف".
用声明式语言(HCL)描述你期望的基础设施状态。代码就是文档,可以提交到 Git 进行版本管理和 Code Review。
سير العمل بأربع مراحل
- Write (كتابة): كتابة ملفات تعريف البنية التحتية (.tf) بلغة HCL (HashiCorp Configuration Language). تعريف الموارد التي تحتاجها: خوادم، قواعد بيانات، شبكات، إلخ.
- Plan (تخطيط): تشغيل
terraform plan، يقارن Terraform الحالة الحالية بالحالة المستهدفة ويُنشئ "خطة تنفيذ" — يخبرك بما ينوي إنشاؤه أو تعديله أو حذفه من الموارد. هذه هي شبكة الأمان التي تسمح لك بتأكيد التغييرات قبل التنفيذ الفعلي. - Apply (تنفيذ): بعد التأكد من أن الخطة صحيحة، شغّل
terraform apply، ينشئ Terraform أو يعدل الموارد حسب الخطة. عند الانتهاء، تُحفظ الحالة الحالية في ملف الحالة (terraform.tfstate). - Destroy (تدمير): عندما لا تحتاجها بعد الآن، شغّل
terraform destroyلتنظيف جميع الموارد وتجنب التكاليف غير الضرورية.
| الأمر | الوظيفة | هل يعدل البنية التحتية؟ | حالة الاستخدام |
|---|---|---|---|
terraform init | تهيئة المشروع، تنزيل Provider | لا | أول مرة أو عند إضافة Provider جديد |
terraform plan | معاينة التغييرات، إنشاء خطة تنفيذ | لا | يجب تشغيله قبل كل تغيير |
terraform apply | تنفيذ التغييرات، إنشاء/تعديل الموارد | نعم | التشغيل بعد تأكيد الخطة |
terraform destroy | تدمير جميع الموارد | نعم | تنظيف بيئة الاختبار، إيقاف الخدمات |
terraform state | عرض/إدارة ملف الحالة | يعتمد على العملية | ترحيل الحالة، استيراد الموارد |
3. مقارنة الأدوات: اختيار أداة IaC المناسبة
مجال IaC يحتوي على أدوات متعددة، لكل منها نقاط قوة. عند اختيار أداة، يجب النظر في حزمة تقنيات الفريق والمنصة السحابية وحجم المشروع. لا توجد أداة "الأفضل"، فقط الأداة الأنسب لسيناريو конкрет.
| 特性 | Terraform | CloudFormation |
|---|---|---|
| 厂商 | HashiCorp | AWS |
| 配置语言 | HCL | YAML / JSON |
| 声明式/命令式 | 声明式 | 声明式 |
| 多云支持 | 原生多云 | 仅 AWS |
| 状态管理 | State 文件 | AWS 托管 |
| 学习曲线 | 中等 | 中等偏高 |
| 社区生态 | 非常活跃 | AWS 生态 |
| 最佳场景 | 多云/混合云 | 纯 AWS 环境 |
| الأداة | اللغة | دعم السحابة | منحنى التعلم | حالة الاستخدام |
|---|---|---|---|---|
| Terraform | HCL | متعدد السحابات (AWS/Azure/GCP) | متوسط | بيئات متعددة السحابات، تعاون الفريق |
| Pulumi | Python/TS/Go | متعدد السحابات | منخفض (لغات برمجة مألوفة) | صديق للمطورين، منطق معقد |
| AWS CloudFormation | JSON/YAML | AWS فقط | متوسط | بيئة AWS حصرية |
| AWS CDK | Python/TS/Java | AWS فقط | منخفض | AWS + تفضيل لغات البرمجة |
| Ansible | YAML | متعدد السحابات + bare metal | منخفض | إدارة التكوين، بيئات هجينة |
كيف تختار؟
- فرق ناشئة / سحابة واحدة: CloudFormation (AWS) أو أداة المنصة السحابية الأصلية، أفضل تكامل مع النظام البيئي
- متعدد السحابات / فرق متوسطة وكبيرة: Terraform، أكبر مجتمع، أكثر Provider وفرة، أسهل في التوظيف
- فرق يقودها المطورون: Pulumi أو CDK، كتابة البنية التحتية بلغات برمجة مألوفة، دعم IDE جيد
- تحتاج إدارة التكوين: Ansible، ممتاز في التكوين الداخلي للخوادم (تثبيت البرامج، تعديل ملفات التكوين)
4. انحراف التكوين: قنبلة موقوتة صامتة
انحراف التكوين (Configuration Drift) هو العدو الأخطر في ممارسات IaC. يشير إلى الانحراف التدريجي بين الحالة الفعلية للبنية التحتية والحالة المعرفة في الكود.
كيف يحدث هذا الانحراف عادةً؟ شخص ما من أجل "إصلاح سريع" لمشكلة في الإنتاج، يسجل الدخول مباشرة إلى وحدة التحكم ويعدل قواعد مجموعة الأمان يدوياً؛ شخص آخر من أجل التصحيح، يزيد مؤقتاً تكوين خادم لكنه ينسى إعادته. هذه "التغييرات الصغيرة" تتراكم بمرور الوقت، مما يؤدي في النهاية إلى فجوة خطيرة بين الكود والبيئة الفعلية.
团队使用 Terraform 部署了 3 台 Web 服务器,配置完全一致:Nginx 1.24、端口 443、2GB 内存。代码和实际状态完美匹配。
مخاطر انحراف التكوين
- غير قابل للتكرار: البيئة الموصوفة في الكود لا تتطابق مع البيئة الفعلية، تظهر مشاكل عند إنشاء بيئات جديدة
- فشل التراجع: يُعتقد أن العودة للإصدار السابق ستستعيد كل شيء، لكن البيئة الفعلية دُمجت يدوياً
- مخاطر أمنية: المنافذ المفتوحة يدوياً والصلاحيات الموسعة قد تُنسى، وتصبح نقاط دخول للهجمات
- تدقيق غير فعال: تدقيق الامتثال يعتمد على الكود، لكن الكود لا يعكس الحالة الفعلية
| إجراء وقائي | الوصف |
|---|---|
| منع التغييرات اليدوية | تقييد صلاحيات التشغيل في وحدة التحكم عبر سياسات IAM |
| كشف الانحراف الدوري | تشغيل terraform plan دورياً للتحقق من الاختلافات |
| إصلاح تلقائي | عند كشف انحراف، تشغيل apply تلقائياً لاستعادة الاتساق |
| تدقيق التغييرات | تفعيل CloudTrail وغيرها من سجلات التدقيق لتتبع مصدر جميع التغييرات |
5. أفضل الممارسات: جعل مشاريع IaC تتطور بشكل مستدام
كود IaC مثل كود التطبيقات، يحتاج ممارسات هندسية جيدة لضمان قابلية الصيانة. مع نمو حجم البنية التحتية، كود IaC بدون منهجية يتحول إلى "ديون تقنية" بشكل آخر.
# 忽略本地状态文件
*.tfstate
*.tfstate.backup
.terraform/
# 忽略敏感变量文件
*.tfvars
!example.tfvarsست ممارسات أساسية أفضل
- الوحدات: تجريد البنية التحتية القابلة لإعادة الاستخدام كوحدات (مثل وحدة VPC، وحدة قاعدة البيانات)، تجنب النسخ واللصق. مثل كتابة الدوال: تعريف مرة، استدعاء متعدد.
- عزل البيئات: التطوير والاختبار والإنتاج تستخدم ملفات حالة وملفات متغيرات مستقلة، معزولة عبر workspaces أو هيكل المجلدات.
- إدارة الحالة عن بُعد: ملف الحالة (tfstate) يُخزن في backend بعيد (S3 + DynamoDB)، يدعم تعاون الفريق وقفل الحالة، يتجنب تعارضات التزامن.
- إدارة المعلومات الحساسة: كلمات المرور والمفاتيح والمعلومات الحساسة الأخرى لا تُكتب في الكود، استخدم Vault وAWS Secrets Manager والأدوات الأخرى.
- تكامل CI/CD: دمج
terraform planفي عملية PR، وapplyيُنفذ تلقائياً عبر pipeline، إزالة العمليات اليدوية المحلية. - مراجعة الكود: تغييرات البنية التحتية تحتاج مراجعة كود مثل كود التطبيقات، خاصة التغييرات المتعلقة بمجموعات الأمان وسياسات IAM.
الخلاصة
البنية التحتية ككود هي حجر الأساس في العمليات السحابية الحديثة. إنها تحول "العمليات اليدوية غير القابلة للوصف" إلى "كود قابل للتحكم بالإصدارات"، ناقلة إدارة البنية التحتية من "فن" إلى "هندسة".
مراجعة النقاط الرئيسية في هذا الفصل:
- جوهر IaC: الإعلان بالكود عن الحالة المرغوبة للبنية التحتية، وترك الأدوات تنفذها تلقائياً
- سير عمل Terraform: ثلاث خطوات Write → Plan → Apply، الخطة هي شبكة الأمان
- اختيار الأدوات: متعدد السحابات اختر Terraform، سحابة واحدة اختر الأدوات الأصلية، فرق المطورين اختر Pulumi
- انحراف التكوين: الخطر الأكثر خفاءً، يحتاج حماية مزدوجة عبر العمليات والأدوات
- الإدارة الهندسية: الوحدات، عزل البيئات، الحالة عن بُعد، تكامل CI/CD — لا غنى عن أي منها
قراءة إضافية
- دليل Terraform الرسمي - تعلم Terraform من الصفر
- توثيق Pulumi - اكتب البنية التحتية بلغات البرمجة
- AWS CDK Workshop - دروس عملية AWS CDK
- Infrastructure as Code (O'Reilly) - الكتاب الكلاسيكي في مجال IaC
- Spacelift Blog - أفضل ممارسات IaC واتجاهات الصناعة