أساسيات البنية التحتية كبرمجيات (IaC): دليل كامل لعام
٥ مايو ٢٠٢٦
ملخص
- البنية التحتية كبرمجية (IaC) تقوم بأتمتة إعداد البنية التحتية باستخدام الكود بدلاً من الإعداد اليدوي.
- تضمن الاتساق، وقابلية التكرار، وقابلية التوسع عبر البيئات المختلفة.
- تشمل الأدوات الشائعة Terraform (مرخص بـ BSL منذ أغسطس 20231)، ونسخته مفتوحة المصدر OpenTofu (MPL-2.0)2، و Pulumi، و AWS CloudFormation/CDK، و Crossplane، و Ansible لإدارة الإعدادات.
- تتكامل IaC بشكل عميق مع أنابيب CI/CD لعمليات نشر موثوقة.
- الأمان، والاختبار، وقابلية المراقبة هي أمور أساسية لـ IaC الجاهزة للإنتاج.
ما ستتعلمه
- ما هي البنية التحتية كبرمجية ولماذا هي مهمة.
- الأنواع المختلفة لـ IaC (التصريحية مقابل الأمرية).
- كيفية كتابة ونشر أول إعداد IaC خاص بك.
- الأخطاء الشائعة وكيفية تجنبها.
- كيفية اختبار وتأمين ومراقبة IaC في بيئة الإنتاج.
- حالات استخدام واقعية من شركات تقنية كبرى.
المتطلبات الأساسية
يجب أن يكون لديك:
- فهم أساسي لـ الحوسبة السحابية (AWS، Azure، أو GCP).
- إلمام بـ أدوات سطر الأوامر.
- اختياري: خبرة في Git و أنابيب CI/CD.
إذا كنت جديداً على هذه المفاهيم، فلا تقلق — هذا الدليل يشرح المفاهيم الأساسية من الصفر.
مقدمة: لماذا غيرت IaC عالم DevOps للأبد
قبل ظهور IaC، كانت البنية التحتية تُعد يدوياً — كان المهندسون يتنقلون عبر لوحات تحكم السحابة، وينشئون الأجهزة الافتراضية (VMs)، ويعدلون الإعدادات يدوياً. كان ذلك يعمل، لكنه كان بطيئاً، وعرضة للأخطاء، وغير متسق.
ثم جاءت البنية التحتية كبرمجية — وهي نقلة نوعية تعامل تعريفات البنية التحتية ككود برمي. باستخدام ملفات إعداد تصريحية أو أمرية، يمكن للفرق التحكم في الإصدارات، و المراجعة، و أتمتة إعداد البنية التحتية.
هذا النهج يربط إدارة البنية التحتية بنفس المبادئ التي أحدثت ثورة في هندسة البرمجيات: الأتمتة، وقابلية إعادة الإنتاج، والتعاون1.
ملاحظة حول Terraform مقابل OpenTofu (2026): في أغسطس 2023، قامت HashiCorp بتغيير ترخيص Terraform من MPL-2.0 إلى رخصة المصدر للأعمال (BSL 1.1)1. استجاب المجتمع عبر اشتقاق آخر إصدار مرخص بـ MPL لإنشاء OpenTofu، وهو الآن مشروع تابع لمؤسسة Linux، ومرخص بـ MPL-2.0، ويعتبر بديلاً مباشراً لإصدارات Terraform ≥ 1.62. خلال هذا الدليل، ستعمل نفس ملفات
.tfمع كل منterraformأوtofu— استبدل اسم البرنامج بحرية.
فهم المفاهيم الأساسية
IaC التصريحية مقابل الأمرية
| النهج | الوصف | أمثلة للأدوات | المميزات | العيوب |
|---|---|---|---|---|
| التصريحي (Declarative) | تحديد ماذا يجب أن تكون عليه الحالة النهائية؛ الأداة تكتشف كيفية تحقيق ذلك. | Terraform, OpenTofu, AWS CloudFormation, Pulumi, Crossplane | أسهل في الفهم، ذاتية التنفيذ (idempotent) | تحكم أقل في ترتيب التنفيذ |
| الأمري (Imperative) | تحديد كيفية الوصول إلى الحالة المطلوبة خطوة بخطوة. | Ansible3, Chef | تحكم دقيق جداً | أصعب في الصيانة عند التوسع |
يُفضل استخدام IaC التصريحية بشكل عام لـ توفير موارد السحابة، بينما تتألق IaC الأمرية في إدارة الإعدادات.
نظرة عامة على بنية IaC
إليك نظرة عالية المستوى على كيفية تناسب IaC مع سير عمل DevOps الحديث:
graph TD
A[Developer] --> B[Git Repository]
B --> C[CI/CD Pipeline]
C --> D[Terraform/Ansible Runner]
D --> E[Cloud Provider API]
E --> F[Provisioned Infrastructure]
يضمن هذا التدفق أن تغييرات البنية التحتية يتم مراجعتها واختبارها ونشرها بطريقة محكومة وقابلة للتدقيق.
خطوة بخطوة: أول نشر IaC لك باستخدام Terraform (أو OpenTofu)
دعنا نمر بمثال بسيط ولكنه واقعي باستخدام Terraform، أحد أكثر أدوات IaC اعتماداً1. كل أمر وإعداد هنا يعمل بشكل متطابق مع OpenTofu — استبدل tofu بـ terraform إذا كنت تفضل النسخة مفتوحة المصدر2.
1. تثبيت Terraform أو OpenTofu
# macOS — Terraform
brew install terraform
# macOS — OpenTofu
brew install opentofu
# Ubuntu/Debian — Terraform
sudo apt-get update && sudo apt-get install -y terraform
# Ubuntu/Debian — OpenTofu
# See https://opentofu.org/docs/intro/install/ for the official repo setup
2. إعداد المزود (Provider)
أنشئ ملفاً باسم main.tf:
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "example" {
bucket = "my-iac-demo-bucket-${random_id.suffix.hex}"
}
resource "random_id" "suffix" {
byte_length = 4
}
# As of AWS provider v4+, the `acl` argument on `aws_s3_bucket` is deprecated.
# Use the standalone resource instead — and note that AWS disabled ACLs by
# default for new buckets in April 2023, so most workloads should rely on
# bucket policies + Block Public Access rather than ACLs.
resource "aws_s3_bucket_ownership_controls" "example" {
bucket = aws_s3_bucket.example.id
rule {
object_ownership = "BucketOwnerEnforced"
}
}
3. تهيئة Terraform
terraform init
المخرجات:
Initializing the backend...
Initializing provider plugins...
Terraform has been successfully initialized!
4. التخطيط والتطبيق
terraform plan
terraform apply -auto-approve
سيقوم Terraform بالتواصل مع واجهات برمجة تطبيقات AWS وإنشاء حاوية S3 الخاصة بك. يمكنك التحقق من ذلك في لوحة تحكم AWS.
5. التنظيف
terraform destroy -auto-approve
يضمن ذلك بقاء بيئتك نظيفة — وهي ممارسة أساسية في سير عمل IaC.
متى تستخدم IaC ومتى تتجنبها
| استخدم IaC عندما | تجنب IaC عندما |
|---|---|
| تحتاج إلى بيئات متسقة عبر التطوير، والاختبار، والإنتاج. | بنيتك التحتية نادراً ما تتغير وهي صغيرة الحجم. |
| تريد عمليات نشر مؤتمتة وقابلة للتكرار. | تفتقر إلى الخبرة أو الموارد لصيانة أنابيب IaC. |
| تتكامل مع CI/CD وواجهات برمجة تطبيقات السحابة. | تدير أنظمة قديمة في الموقع (on-prem) بدون وصول لـ API. |
| تحتاج إلى التعافي من الكوارث أو إعدادات متعددة المناطق. | تدير فقط عدداً قليلاً من الخوادم الثابتة يدوياً. |
تتألق IaC في البيئات الديناميكية، والقابلة للتوسع، والمبنية للسحابة — ولكنها قد تكون مجهوداً زائداً عن الحاجة للإعدادات الصغيرة والثابتة.
دراسة حالة واقعية: IaC على نطاق واسع
شاركت شركات تقنية كبرى علناً كيف تستخدم IaC لإدارة بنية تحتية معقدة:
- تستخدم Netflix قوالب بنية تحتية تصريحية لإدارة آلاف موارد AWS بكفاءة، مما يضمن قابلية إعادة الإنتاج أثناء عمليات النشر4.
- تعتمد Stripe أنابيب IaC مؤتمتة لتوفير بنية تحتية آمنة وقابلة للتدقيق5.
- Airbnb ناقشت استخدام Terraform لتوحيد تعريفات البنية التحتية عبر الفرق6.
توضح هذه الأمثلة كيف تدعم البنية التحتية كبرمجيات (IaC) السرعة والأمان والنطاق في بيئات الإنتاج.
الأخطاء الشائعة والحلول
| الخطأ الشائع | الوصف | الحل |
|---|---|---|
| الانحراف (Drift) | التغييرات اليدوية تجعل الحالة الفعلية تختلف عن الكود. | استخدم terraform plan بانتظام؛ وافرض التغييرات عبر IaC فقط. |
| تلف ملف الحالة (State File) | ملفات الحالة المشتركة تؤدي إلى تعارضات. | استخدم واجهة خلفية (backend) للحالة عن بُعد مع خاصية القفل (locking). بالنسبة لـ S3، يفضل قفل الحالة الأصلي لـ S3 (use_lockfile = true)، المتاح بشكل عام (GA) منذ Terraform 1.11 — القفل المعتمد على DynamoDB مهجور ومن المقرر إزالته في إصدار فرعي مستقبلي1. |
| الموديولات شديدة التعقيد | الكثير من التجريد يخفي القصد من الكود. | اجعل الموديولات صغيرة، سهلة القراءة، وموثقة جيداً. |
| سوء التكوين الأمني | وجود أسرار أو مفاتيح داخل الكود. | استخدم متغيرات البيئة أو مديري الأسرار (secret managers). |
| تغييرات غير محكومة | عدم وجود عملية مراجعة لتحديثات IaC. | ادمج IaC مع طلبات السحب (pull requests) المعتمدة على Git. |
الاعتبارات الأمنية
تقدم IaC أسطحاً أمنية جديدة. اتبع أفضل الممارسات التالية:
- لا تضع الأسرار أبداً داخل الكود — استخدم أدوات مثل AWS Secrets Manager أو HashiCorp Vault7.
- طبق مبدأ الحد الأدنى من الصلاحيات في أدوار IAM.
- افحص كود IaC باستخدام أدوات مثل
tfsecأوCheckov. - افرض الامتثال للسياسات باستخدام أدوات مثل Open Policy Agent (OPA).
- دقق في مسارات (pipelines) الـ IaC — تأكد من تسجيل ومراجعة جميع التغييرات.
يجب التعامل مع الأمن ككود، تماماً مثل البنية التحتية.
تداعيات الأداء والقابلية للتوسع
تعمل IaC على تحسين الأداء ليس بجعل الخوادم أسرع، ولكن عن طريق تقليل التأخير البشري — الوقت المستغرق لتجهيز وتكوين وتوسيع البنية التحتية.
- إنشاء الموارد بالتوازي: يمكن للأدوات التصريحية مثل Terraform إنشاء موارد متعددة في وقت واحد.
- البنية التحتية غير القابلة للتغيير (Immutable): إعادة البناء من الصفر يتجنب انحراف التكوين ووقت التوقف.
- تكامل التوسع التلقائي: يمكن أن تتضمن قوالب IaC سياسات توسع للتعامل مع طفرات حركة المرور تلقائياً.
غالباً ما تبلغ المؤسسات واسعة النطاق عن انخفاض كبير في أوقات التجهيز بعد اعتماد سير عمل IaC1.
اختبار البنية التحتية ككود
يضمن اختبار IaC الموثوقية قبل النشر.
أنواع اختبارات IaC
- التحليل الساكن (Static Analysis): فحص التنسيق (Linting) والتحقق من صحة القواعد.
- اختبارات الوحدة (Unit Tests): التحقق من الموديولات بشكل منفصل.
- اختبارات التكامل (Integration Tests): النشر في بيئة معزولة (sandbox) والتحقق من السلوك.
- اختبارات السياسة (Policy Tests): ضمان الامتثال لمعايير الأمن الداخلية.
مثال: اختبار Terraform باستخدام terratest
func TestS3Bucket(t *testing.T) {
terraformOptions := &terraform.Options{
TerraformDir: "../examples/s3-bucket",
}
defer terraform.Destroy(t, terraformOptions)
terraform.InitAndApply(t, terraformOptions)
bucketID := terraform.Output(t, terraformOptions, "bucket_id")
assert.Contains(t, bucketID, "my-iac-demo")
}
يضمن هذا الاختبار المعتمد على لغة Go إنشاء دلو (bucket) S3 باتفاقية التسمية الصحيحة.
أنماط معالجة الأخطاء
غالباً ما تفشل أدوات IaC بسبب أخطاء عابرة (مثل حدود معدل الطلبات في API، أو فقدان الأذونات). تشمل الأنماط الشائعة ما يلي:
- منطق إعادة المحاولة (Retry logic): محاولات إعادة مدمجة لإخفاقات API العابرة.
- التراجع السلس (Graceful rollbacks): تدمير الموارد التي تم إنشاؤها جزئياً عند الفشل.
- العمليات المتماثلة (Idempotent operations): يجب أن يؤدي تشغيل نفس السكربت مرة أخرى إلى نفس النتيجة.
تفرض أدوات IaC التصريحية مثل Terraform و OpenTofu التماثل بشكل افتراضي12.
المراقبة والقابلية للملاحظة لـ IaC
تعني مراقبة IaC تتبع كل من حالة البنية التحتية و مسارات النشر.
- كشف انحراف الحالة: استخدم Terraform Cloud أو Atlantis للكشف عن الانحراف تلقائياً.
- مراقبة المسارات: ادمج سير عمل IaC في لوحات معلومات CI/CD (مثل GitHub Actions، GitLab CI).
- تدقيق التغييرات: سجل كل تغيير في البنية التحتية للامتثال.
- التنبيه: إخطار الفرق عند فشل تشغيل IaC أو حدوث انحراف.
أخطاء شائعة يقع فيها الجميع
- تخطي التحكم في الإصدار: قم دائماً بتخزين IaC في Git.
- خلط البيئات: افصل بين تكوينات التطوير (dev)، والاختبار (staging)، والإنتاج (prod).
- تجاهل التوثيق: يحتاج المداومون المستقبليون إلى أوصاف واضحة للموديولات.
- عدم وسم (tagging) الموارد: تساعد الوسوم في تتبع التكاليف والملكية.
- الإصلاحات اليدوية: قم دائماً بإصلاح المشكلات عبر الكود، وليس عبر نقرات لوحة التحكم.
دليل استكشاف الأخطاء وإصلاحها
| الخطأ | السبب المحتمل | الإصلاح |
|---|---|---|
Error acquiring state lock | تشغيل Terraform بشكل متزامن | استخدم واجهة خلفية للحالة عن بُعد مع خاصية القفل — يفضل قفل الحالة الأصلي لـ S3 (use_lockfile = true، متاح بشكل عام في Terraform 1.11+)؛ نمط S3 + DynamoDB القديم لا يزال يعمل لعمليات الهجرة ولكنه مهجور1. |
AccessDenied | فقدان أذونات IAM | قم بتحديث سياسة IAM أو تقمص الدور الصحيح. |
Resource already exists | تعارض في الأسماء | استخدم أسماء موارد فريدة أو استورد المورد الموجود. |
Plan shows unexpected changes | انحراف أو تحديث للمزود (provider) | الأمر الفرعي terraform refresh مهجور منذ Terraform 0.15.4 — استخدم terraform plan -refresh-only (وطبق باستخدام terraform apply -refresh-only) بحيث تظهر التغييرات للمراجعة قبل كتابتها في الحالة1. |
اتجاهات الصناعة لعام 2026
- الانقسام بين Terraform / OpenTofu أصبح الآن دائماً. أطلقت OpenTofu خارطة طريق خاصة بها (تشفير الحالة، تكوين المزود الديناميكي) والتي تبتعد عن مسار Terraform المرخص بـ BSL2. اختر جانباً بناءً على التسامح مع التراخيص، وليس فقط على تكافؤ الميزات.
- خاصية قفل الحالة الأصلية في S3 (Native S3 state locking) حلت محل نمط S3 + DynamoDB التقليدي في إعدادات Terraform و OpenTofu الجديدة1.
- تكامل GitOps + IaC: بنية تحتية تعريفية (Declarative) تُدار بالكامل من خلال سير عمل Git (مثل Atlantis، Terraform Cloud / HCP Terraform، Spacelift، env0، Scalr).
- السياسة ككود (Policy-as-Code): دمج الامتثال والحوكمة مباشرة في مسارات IaC عبر Open Policy Agent (OPA) أو Sentinel أو Conftest.
- IaC المدعوم بالذكاء الاصطناعي: أدوات تقوم بإنشاء أو التحقق من تكوينات البنية التحتية تلقائيًا.
- تنسيق السحابة المتعددة (Multi-cloud orchestration): إدارة موحدة لـ IaC عبر AWS و Azure و GCP — وتتم معالجتها بشكل متزايد عبر Pulumi (لغات البرمجة العامة) و Crossplane (لوحة تحكم تعتمد على Kubernetes).
تستمر IaC في التطور كحجر زاوية في DevOps السحابي الأصلي (cloud-native DevOps).
ملخص
IaC ليست مجرد أتمتة — إنها تحول ثقافي.
- عامل البنية التحتية مثل البرمجيات: يتم إصدارها، واختبارها، ومراجعتها.
- تبنَّ التعريفات التصريحية (declarative) لضمان قابلية التكرار.
- ادمج IaC في CI/CD لعمليات نشر آمنة وقابلة للتدقيق.
- أمن مساراتك وتحقق من التكوينات باستمرار.
الخطوات التالية
- جرب تجهيز VPC كامل باستخدام Terraform.
- ادمج IaC الخاصة بك مع GitHub Actions للأتمتة.
- استكشف أدوات "السياسة ككود" مثل OPA لضمان الامتثال.
- اشترك في المدونة لمتابعة الشروحات العميقة القادمة حول وحدات Terraform وسير عمل GitOps.
Footnotes
-
HashiCorp Terraform Documentation, license history, and the S3 backend /
-refresh-onlyreferences – https://developer.hashicorp.com/terraform/docs and https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 -
OpenTofu — Linux Foundation–hosted, MPL-2.0 fork of Terraform 1.5.x, drop-in compatible with Terraform ≥ 1.6 – https://opentofu.org/ and https://opentofu.org/blog/opentofu-announces-fork-of-terraform/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Ansible Documentation – https://docs.ansible.com/ ↩
-
Netflix Tech Blog – "Automating AWS Infrastructure at Scale" – https://netflixtechblog.com/ ↩
-
Stripe Engineering Blog – "Infrastructure Automation at Stripe" – https://stripe.com/blog/engineering ↩
-
مدونة Airbnb الهندسية – "Scaling Infrastructure with Terraform" – https://medium.com/airbnb-engineering ↩
-
وثائق HashiCorp Vault – https://developer.hashicorp.com/vault/docs ↩