Skip to content

البنية التحتية ككود

مقدمة

هل عشت هذه الكابوس من قبل: خادم الإنتاج معطل ولا أحد يتذكر كيف تم تكوينه في الأصل؟ تسجيل الدخول يدوياً للخادم، وكتابة الأوامر من الذاكرة، والدعاء بعدم ارتكاب خطأ — هذا هو العمل اليومي للعمليات التقليدية. البنية التحتية ككود (Infrastructure as Code, IaC) غيّرت كل ذلك جذرياً: استخدام الكود لتعريف وإدارة البنية التحتية، جاعلاً تكوين الخوادم قابلاً للتحكم بالإصدارات وقابلاً للتكرار وقابلاً للتدقيق، تماماً مثل البرمجيات.

ماذا ستتعلم في هذا المقال؟

بعد إتمام هذا الفصل، ستحصل على:

  • المفاهيم الأساسية: فهم ما هو IaC ولماذا هو حجر الأساس في العمليات الحديثة
  • معرفة سير العمل: إتقان المراحل الأربع لسير عمل Terraform: Write → Plan → Apply → Destroy
  • اختيار الأدوات: التعرف على مزايا وعيوب الأدوات الرئيسية مثل Terraform وPulumi وCloudFormation
  • الوعي بالمخاطر: فهم مخاطر انحراف التكوين وطرق الكشف
  • أفضل الممارسات: إتقان أساليب الإدارة الهندسية لمشاريع IaC
الفصلالمحتوىالمفهوم الأساسي
الفصل 1مفهوم IaCالعمليات اليدوية مقابل الإدارة بالكود
الفصل 2سير عمل TerraformWrite → Plan → Apply
الفصل 3مقارنة الأدواتTerraform، Pulumi، CDK
الفصل 4انحراف التكوينالكشف، الوقاية، الإصلاح
الفصل 5أفضل الممارساتالوحدات، إدارة الحالة، CI/CD

0. صورة شاملة: لماذا تحتاج البنية التحتية أيضاً إلى "كود مصدر"؟

تخيل أنك طباخ. إذا طبخت كل طبق بالحدس، اليوم ملعقة ملح وغداً ملعقتين، لن يكون الطعم مستقراً أبداً. لكن إذا كتبت الوصفة — بدقة حتى جرام كل توابل — يمكن لأي شخص إعادة إنتاج نفس الطعم.

إدارة البنية التحتية تواجه نفس المشكلة. تكوين خادم واحد قد يشمل نظام التشغيل وقواعد الشبكة ومجموعات الأمان وأقراص التخزين ومتغيرات البيئة وعشرات المعاملات. التكوين اليدوي ليس فقط عرضة للأخطاء، بل هو أيضاً غير قابل للتكرار وغير قابل للتدقيق وغير قابل للتراجع.

القيمة الأساسية لـ IaC

  • قابل للتكرار: نفس الكود، مهما نُفذ مرات عديدة، النتيجة واحدة (الخنوع)
  • قابل للتحكم بالإصدارات: تغييرات البنية التحتية تُدار عبر Git، من غيّر ماذا ولماذا، واضح بنظرة واحدة
  • قابل للتدقيق: جميع التغييرات مسجلة، تلبي متطلبات الامتثال
  • قابل للأتمتة: النشر التلقائي عبر خطوط أنابيب CI/CD، إزالة مخاطر العمليات اليدوية
  • قابل للتعاون: أعضاء الفريق يراجعون تغييرات البنية التحتية عبر طلبات السحب، مثل مراجعة الكود

1. مفهوم IaC: من "النقر اليدوي" إلى "الإعلان بالكود"

طريقة العمل في العمليات التقليدية هي: تسجيل الدخول إلى وحدة تحكم المنصة السحابية، والنقر يدوياً لإنشاء خوادم وتكوين الشبكات وإعداد مجموعات الأمان. هذه الطريقة تنجح عند إدارة بضعة خوادم، لكن عندما يتوسع النطاق إلى عشرات أو مئات الخوادم، تصبح كابوساً.

الفكرة الأساسية لـ IaC هي: استخدام كود إعلاني لوصف الحالة المرغوبة للبنية التحتية، وترك الأدوات تنفذها تلقائياً. لا تحتاج لإخبار الأداة "أنشئ VPC أولاً، ثم subnet، ثم مجموعة أمان" (إلزامي)، فقط قل "أريد بيئة شبكة هكذا" (إعلاني)، والأداة ستحسب الخطوات المطلوبة تلقائياً.

交互演示 ── 手动运维 vs 基础设施即代码
手动运维流程
1
🌐
登录云控制台
需要记住密码
2
🖥️
手动创建服务器
配置可能遗漏
3
🔧
配置安全组规则
容易开放过多端口
4
💾
挂载存储卷
大小可能选错
5
🔗
配置负载均衡
路由规则易出错
6
📋
手动记录到文档
文档很快过时
对比维度手动运维基础设施即代码
可重复性每次操作可能不同代码保证完全一致
速度分钟到小时级秒到分钟级
审计追踪依赖人工记录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. سير عملها واضح وبديهي، مقسم إلى أربع مراحل، مثل عملية تطوير البرمجيات "الترميز ← المراجعة ← النشر ← التنظيف".

交互演示 ── Terraform 工作流四阶段
📝Write
🔍Plan
🚀Apply
🗑️Destroy
📝Write ── 编写基础设施代码

用声明式语言(HCL)描述你期望的基础设施状态。代码就是文档,可以提交到 Git 进行版本管理和 Code Review。

Terminal
📄使用 .tf 文件描述资源
🔧HCL 语法简洁易读
📦支持模块化复用

سير العمل بأربع مراحل

  1. Write (كتابة): كتابة ملفات تعريف البنية التحتية (.tf) بلغة HCL (HashiCorp Configuration Language). تعريف الموارد التي تحتاجها: خوادم، قواعد بيانات، شبكات، إلخ.
  2. Plan (تخطيط): تشغيل terraform plan، يقارن Terraform الحالة الحالية بالحالة المستهدفة ويُنشئ "خطة تنفيذ" — يخبرك بما ينوي إنشاؤه أو تعديله أو حذفه من الموارد. هذه هي شبكة الأمان التي تسمح لك بتأكيد التغييرات قبل التنفيذ الفعلي.
  3. Apply (تنفيذ): بعد التأكد من أن الخطة صحيحة، شغّل terraform apply، ينشئ Terraform أو يعدل الموارد حسب الخطة. عند الانتهاء، تُحفظ الحالة الحالية في ملف الحالة (terraform.tfstate).
  4. Destroy (تدمير): عندما لا تحتاجها بعد الآن، شغّل terraform destroy لتنظيف جميع الموارد وتجنب التكاليف غير الضرورية.
الأمرالوظيفةهل يعدل البنية التحتية؟حالة الاستخدام
terraform initتهيئة المشروع، تنزيل Providerلاأول مرة أو عند إضافة Provider جديد
terraform planمعاينة التغييرات، إنشاء خطة تنفيذلايجب تشغيله قبل كل تغيير
terraform applyتنفيذ التغييرات، إنشاء/تعديل المواردنعمالتشغيل بعد تأكيد الخطة
terraform destroyتدمير جميع المواردنعمتنظيف بيئة الاختبار، إيقاف الخدمات
terraform stateعرض/إدارة ملف الحالةيعتمد على العمليةترحيل الحالة، استيراد الموارد

3. مقارنة الأدوات: اختيار أداة IaC المناسبة

مجال IaC يحتوي على أدوات متعددة، لكل منها نقاط قوة. عند اختيار أداة، يجب النظر في حزمة تقنيات الفريق والمنصة السحابية وحجم المشروع. لا توجد أداة "الأفضل"، فقط الأداة الأنسب لسيناريو конкрет.

交互演示 ── 主流 IaC 工具对比
选择要对比的工具(至少选 2 个):
特性🟣Terraform🟠CloudFormation
厂商HashiCorpAWS
配置语言HCLYAML / JSON
声明式/命令式声明式声明式
多云支持原生多云仅 AWS
状态管理State 文件AWS 托管
学习曲线中等中等偏高
社区生态非常活跃AWS 生态
最佳场景多云/混合云纯 AWS 环境
点击下方工具名称查看详细介绍和代码示例
الأداةاللغةدعم السحابةمنحنى التعلمحالة الاستخدام
TerraformHCLمتعدد السحابات (AWS/Azure/GCP)متوسطبيئات متعددة السحابات، تعاون الفريق
PulumiPython/TS/Goمتعدد السحاباتمنخفض (لغات برمجة مألوفة)صديق للمطورين، منطق معقد
AWS CloudFormationJSON/YAMLAWS فقطمتوسطبيئة AWS حصرية
AWS CDKPython/TS/JavaAWS فقطمنخفضAWS + تفضيل لغات البرمجة
AnsibleYAMLمتعدد السحابات + bare metalمنخفضإدارة التكوين، بيئات هجينة

كيف تختار؟

  • فرق ناشئة / سحابة واحدة: CloudFormation (AWS) أو أداة المنصة السحابية الأصلية، أفضل تكامل مع النظام البيئي
  • متعدد السحابات / فرق متوسطة وكبيرة: Terraform، أكبر مجتمع، أكثر Provider وفرة، أسهل في التوظيف
  • فرق يقودها المطورون: Pulumi أو CDK، كتابة البنية التحتية بلغات برمجة مألوفة، دعم IDE جيد
  • تحتاج إدارة التكوين: Ansible، ممتاز في التكوين الداخلي للخوادم (تثبيت البرامج، تعديل ملفات التكوين)

4. انحراف التكوين: قنبلة موقوتة صامتة

انحراف التكوين (Configuration Drift) هو العدو الأخطر في ممارسات IaC. يشير إلى الانحراف التدريجي بين الحالة الفعلية للبنية التحتية والحالة المعرفة في الكود.

كيف يحدث هذا الانحراف عادةً؟ شخص ما من أجل "إصلاح سريع" لمشكلة في الإنتاج، يسجل الدخول مباشرة إلى وحدة التحكم ويعدل قواعد مجموعة الأمان يدوياً؛ شخص آخر من أجل التصحيح، يزيد مؤقتاً تكوين خادم لكنه ينسى إعادته. هذه "التغييرات الصغيرة" تتراكم بمرور الوقت، مما يؤدي في النهاية إلى فجوة خطيرة بين الكود والبيئة الفعلية.

交互演示 ── 配置漂移:无声的定时炸弹
初始部署
手动修改
又一次修改
漂移加剧
IaC 检测
期望状态(代码定义)
🖥️
Server-A
Nginx 1.24 | 443 | 2GB
🖥️
Server-B
Nginx 1.24 | 443 | 2GB
🖥️
Server-C
Nginx 1.24 | 443 | 2GB
状态一致
实际状态(线上环境)
🖥️
Server-A
Nginx 1.24 | 443 | 2GB
🖥️
Server-B
Nginx 1.24 | 443 | 2GB
🖥️
Server-C
Nginx 1.24 | 443 | 2GB
第 0 步:通过 IaC 初始部署

团队使用 Terraform 部署了 3 台 Web 服务器,配置完全一致:Nginx 1.24、端口 443、2GB 内存。代码和实际状态完美匹配。

关键教训
🚫禁止手动修改线上环境,所有变更必须通过代码
🔍定期运行 terraform plan 检测漂移
🔒限制生产环境的 SSH 权限,减少人为干预
📋建立变更审批流程(PR → Review → Merge → Apply)

مخاطر انحراف التكوين

  1. غير قابل للتكرار: البيئة الموصوفة في الكود لا تتطابق مع البيئة الفعلية، تظهر مشاكل عند إنشاء بيئات جديدة
  2. فشل التراجع: يُعتقد أن العودة للإصدار السابق ستستعيد كل شيء، لكن البيئة الفعلية دُمجت يدوياً
  3. مخاطر أمنية: المنافذ المفتوحة يدوياً والصلاحيات الموسعة قد تُنسى، وتصبح نقاط دخول للهجمات
  4. تدقيق غير فعال: تدقيق الامتثال يعتمد على الكود، لكن الكود لا يعكس الحالة الفعلية
إجراء وقائيالوصف
منع التغييرات اليدويةتقييد صلاحيات التشغيل في وحدة التحكم عبر سياسات IAM
كشف الانحراف الدوريتشغيل terraform plan دورياً للتحقق من الاختلافات
إصلاح تلقائيعند كشف انحراف، تشغيل apply تلقائياً لاستعادة الاتساق
تدقيق التغييراتتفعيل CloudTrail وغيرها من سجلات التدقيق لتتبع مصدر جميع التغييرات

5. أفضل الممارسات: جعل مشاريع IaC تتطور بشكل مستدام

كود IaC مثل كود التطبيقات، يحتاج ممارسات هندسية جيدة لضمان قابلية الصيانة. مع نمو حجم البنية التحتية، كود IaC بدون منهجية يتحول إلى "ديون تقنية" بشكل آخر.

交互演示 ── IaC 最佳实践
📂
实践一:基础设施代码纳入版本控制
像管理应用代码一样管理基础设施代码
✅ 推荐做法
所有 .tf 文件提交到 Git 仓库
使用分支策略(main / dev / feature)
通过 Pull Request 进行代码审查
在 CI 中自动运行 terraform plan
❌ 反面模式
在本地执行 apply 后不提交代码
直接在 main 分支上修改
将 .tfstate 文件提交到 Git
跳过 Code Review 直接部署
.gitignore 示例
# 忽略本地状态文件
*.tfstate
*.tfstate.backup
.terraform/

# 忽略敏感变量文件
*.tfvars
!example.tfvars
实践成熟度
入门
基础
进阶
成熟
卓越

ست ممارسات أساسية أفضل

  1. الوحدات: تجريد البنية التحتية القابلة لإعادة الاستخدام كوحدات (مثل وحدة VPC، وحدة قاعدة البيانات)، تجنب النسخ واللصق. مثل كتابة الدوال: تعريف مرة، استدعاء متعدد.
  2. عزل البيئات: التطوير والاختبار والإنتاج تستخدم ملفات حالة وملفات متغيرات مستقلة، معزولة عبر workspaces أو هيكل المجلدات.
  3. إدارة الحالة عن بُعد: ملف الحالة (tfstate) يُخزن في backend بعيد (S3 + DynamoDB)، يدعم تعاون الفريق وقفل الحالة، يتجنب تعارضات التزامن.
  4. إدارة المعلومات الحساسة: كلمات المرور والمفاتيح والمعلومات الحساسة الأخرى لا تُكتب في الكود، استخدم Vault وAWS Secrets Manager والأدوات الأخرى.
  5. تكامل CI/CD: دمج terraform plan في عملية PR، وapply يُنفذ تلقائياً عبر pipeline، إزالة العمليات اليدوية المحلية.
  6. مراجعة الكود: تغييرات البنية التحتية تحتاج مراجعة كود مثل كود التطبيقات، خاصة التغييرات المتعلقة بمجموعات الأمان وسياسات IAM.

الخلاصة

البنية التحتية ككود هي حجر الأساس في العمليات السحابية الحديثة. إنها تحول "العمليات اليدوية غير القابلة للوصف" إلى "كود قابل للتحكم بالإصدارات"، ناقلة إدارة البنية التحتية من "فن" إلى "هندسة".

مراجعة النقاط الرئيسية في هذا الفصل:

  1. جوهر IaC: الإعلان بالكود عن الحالة المرغوبة للبنية التحتية، وترك الأدوات تنفذها تلقائياً
  2. سير عمل Terraform: ثلاث خطوات Write → Plan → Apply، الخطة هي شبكة الأمان
  3. اختيار الأدوات: متعدد السحابات اختر Terraform، سحابة واحدة اختر الأدوات الأصلية، فرق المطورين اختر Pulumi
  4. انحراف التكوين: الخطر الأكثر خفاءً، يحتاج حماية مزدوجة عبر العمليات والأدوات
  5. الإدارة الهندسية: الوحدات، عزل البيئات، الحالة عن بُعد، تكامل CI/CD — لا غنى عن أي منها

قراءة إضافية