بنيتنا التحتية كانت قصراً من ورق: كيف أنقذنا Terraform من جحيم التغييرات اليدوية

بتذكرها زي كأنها مبارح. كانت الساعة وحدة بعد نص الليل، والجو هادي، وأنا يا دوب مخلص فنجان الميرمية وبدي أروح أنام. فجأة، التلفون برنّ، والمتصل هو مدير المشروع. لما المدير يرن بهيك ساعة، اعرف إنه المصيبة كبيرة. “أبو عمر، الموقع واقع! كل إشي واقع! العملاء معصبين والدنيا مقلوبة!”.

في ثواني، كنت قدام اللابتوب. دخلت على لوحة تحكم AWS، وكل فريق المهندسين معي على الخط، كل واحد فينا بحاول يفهم شو اللي صار. السيرفرات شغالة، قواعد البيانات موجودة، بس ما في إشي بوصل ببعضه. بعد ساعة من البحث والتحليل والضغط النفسي، اكتشفنا الكارثة: مهندس مبتدئ، بنيّة حسنة، عمل “تعديل بسيط” على إعدادات الشبكة (VPC Security Group) عشان يفتح بورت لاختبار معين… ونسي يرجّعه. تعديل يدوي صغير، بكبسة زر، عطّل نظام كامل بيخدم آلاف المستخدمين.

هذيك الليلة، واحنا بنصلح الخراب تحت ضغط هائل، أخذت قرار. قلت للفريق: “يا جماعة، شغلنا هاد ما بنفع يضل هيك. بنيتنا التحتية هاي عبارة عن قصر من ورق، أي نسمة هوا بتوقّعه. من بكرة، بدنا نغير كل إشي”. وكانت هاي بداية رحلتنا مع Terraform.

الجحيم الذي كنا نعيشه: إدارة البنية التحتية يدوياً

قبل ما أحكي عن الحل، خلوني أوصفلكم طبيعة “الجحيم” اللي كنا فيه. يمكن كتير منكم بعيش نفس التجربة حالياً. الإدارة اليدوية للبنية التحتية، سواء عن طريق لوحات التحكم في الخدمات السحابية (AWS Console, Azure Portal) أو عن طريق كتابة سكربتات Bash عشوائية، هي وصفة مضمونة للكوارث.

الانحراف التكويني (Configuration Drift)

هذا المصطلح الفخم هو مجرد طريقة لوصف مشكلة بسيطة: مع الوقت، بيئة الإنتاج (Production) بتصير مختلفة عن بيئة التطوير (Staging). ليش؟ لأنه كل يوم في تعديل يدوي صغير هون، و”إصلاح سريع” هناك. بعد كم شهر، بصير عندك نسختين مختلفتين تماماً من البنية التحتية، ولما تطلق ميزة جديدة بتشتغل تماماً في بيئة التطوير، بتكتشف إنها بتنفجر في بيئة الإنتاج لأسباب غامضة.

غياب التوثيق والمراجعة

لما كل إشي يتم بكبسات الأزرار، مين آخر واحد غيّر إعدادات الـ Firewall؟ ومتى؟ وليش؟ الجواب غالباً ما بكون “الله أعلم”. ما في سجل واضح، ما في Version Control، وما في طريقة لعمل مراجعة (Code Review) لتغييرات البنية التحتية قبل ما تتطبق. البنية التحتية كلها بتصير عايشة في عقول كم واحد من أعضاء الفريق، وإذا واحد منهم أخذ إجازة أو ترك الشغل، بتضيع المعرفة معه.

الخطأ البشري… حتمي!

زي ما صار معنا في القصة اللي حكيتها. كلنا بشر، وكلنا بنغلط. الفرق إنه غلطة في كود التطبيق ممكن يتم اكتشافها باختبارات الوحدة (Unit Tests)، أما غلطة في البنية التحتية ممكن تحذف قاعدة البيانات الرئيسية كلها بكبسة زر واحدة. الاعتماد على التركيز البشري بنسبة 100% في مهام متكررة وحساسة هو مجرد انتظار للكارثة القادمة.

شروق شمس جديدة: مفهوم البنية التحتية كشيفرة (IaC)

وهون بيجي الحل السحري: البنية التحتية كشيفرة (Infrastructure as Code – IaC). الفكرة بسيطة وعبقرية بنفس الوقت: بدل ما نبني السيرفرات والشبكات وقواعد البيانات يدوياً، بنكتب “وصفة” أو “مخطط” لهي البنية التحتية على شكل كود برمجي.

هذا الكود بصير هو المصدر الوحيد للحقيقة (Single Source of Truth). بدك تغير إشي؟ بتعدل الكود، مش السيرفر مباشرة. بدك تعرف حالة البنية التحتية؟ بتقرأ الكود. هاد الأسلوب بحوّل البنية التحتية من عمل فني غامض إلى عملية هندسية منظمة وقابلة للتكرار.

ولماذا Terraform بالذات؟

يوجد العديد من الأدوات لتطبيق مفهوم الـ IaC، مثل AWS CloudFormation أو Ansible. لكن بالنسبة إلي ولفريقي، وقع اختيارنا على Terraform من شركة HashiCorp، ولأسباب وجيهة جداً.

مفتوح المصدر ومستقل عن المنصات (Cloud-Agnostic)

Terraform لا يكترث إذا كنت تستخدم AWS, Google Cloud, Azure, DigitalOcean, أو حتى VMware في مركز بياناتك الخاص. لديه “مزودين” (Providers) لكل هاي المنصات وغيرها الكثير. هذا يعني أنك بتتعلم أداة واحدة بتقدر تستخدمها في كل مكان، وما بتكون محبوس مع مزود خدمة سحابية واحد.

لغة تعريفية بسيطة (Declarative Language)

Terraform بيستخدم لغة اسمها HCL (HashiCorp Configuration Language)، وهي لغة سهلة القراءة والكتابة. الأهم من هيك، إنها لغة “تعريفية” (Declarative). شو يعني؟

نصيحة أبو عمر: الفرق بين التعريفي (Declarative) والأمري (Imperative) هو كالفرق بين إنك تطلب بيتزا جاهزة (بتوصف النتيجة النهائية: بدي بيتزا بيبروني) وبين إنك تعطي الشيف وصفة خطوة بخطوة (اعجن العجينة، افردها، حط الصلصة…). Terraform هو الأول، أنت تصف “ماذا” تريد، وهو يتكفل بـ “كيف”.

أنت فقط تصف الحالة النهائية التي تريد أن تكون عليها بنيتك التحتية، وTerraform ذكي كفاية ليعرف الخطوات اللازمة للوصول لهي الحالة.

التخطيط قبل التنفيذ (Plan Before You Apply)

هاي الميزة لحالها بتستاهل استخدام Terraform. قبل ما يطبق أي تغيير، بتنفذ أمر terraform plan. هذا الأمر بيعطيك تقرير مفصل بكل التغييرات اللي راح تصير: شو الموارد اللي راح يتم إنشاؤها (+)، شو اللي راح يتعدل (~)، وشو اللي راح ينحذف (-). هذا بيعطيك فرصة ذهبية لمراجعة التغييرات وتجنب الكوارث قبل وقوعها.

يالله نشتغل شغل مرتب: أول خطواتنا مع Terraform

الكلام النظري حلو، بس خلينا نشوف الموضوع بشكل عملي. لنفترض أننا نريد إنشاء سيرفر ويب بسيط (EC2 instance) على AWS.

الخطوة الأولى: تعريف المزود (Provider)

أول إشي، بنعمل ملف اسمه main.tf وبنخبر Terraform إننا رح نشتغل مع AWS.


terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

# تعريف إعدادات المزود، مثل المنطقة الجغرافية
provider "aws" {
  region = "eu-west-1" # منطقة أيرلندا على سبيل المثال
}

الخطوة الثانية: إنشاء أول مورد (Resource)

الآن، نضيف “مورد” جديد في نفس الملف لوصف السيرفر اللي بدنا إياه.


resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0" # هذا مثال، يجب استخدام AMI صحيح لمنطقتك
  instance_type = "t2.micro"             # أصغر وأرخص نوع سيرفر

  tags = {
    Name = "MyFirstWebServer-Terraform"
    Owner = "Abu Omar"
  }
}

لاحظوا كيف الكود وصفي جداً: “أريد مورد من نوع aws_instance، اسمه المنطقي web_server، بهذه المواصفات”.

الخطوة الثالثة: دورة حياة Terraform

الآن تأتي المتعة. افتح الطرفية (Terminal) في نفس المجلد الذي يحتوي على ملفك ونفذ الأوامر التالية بالترتيب:

  1. terraform init: هذا الأمر يقرأ ملفك، ويرى أنك بحاجة لمزود AWS، ويقوم بتحميله. تنفذه مرة واحدة فقط في بداية المشروع.
  2. terraform plan: هذا الأمر سيقوم بمقارنة الكود الذي كتبته مع الحالة الحقيقية في حسابك على AWS (اللي هي حالياً لا شيء)، وسيخبرك: “سأقوم بإنشاء سيرفر aws_instance واحد جديد”.
  3. terraform apply: بعد أن تتأكد من خطة العمل، اكتب yes للتأكيد، واذهب لإعداد فنجان قهوة. خلال دقائق، سيقوم Terraform بإنشاء السيرفر لك تماماً كما وصفته في الكود.

الآن، إذا أردت تغيير نوع السيرفر من t2.micro إلى t2.small، كل ما عليك فعله هو تغيير سطر واحد في الكود، ثم تنفيذ plan و apply مرة أخرى. سيقوم Terraform بتعديل السيرفر الموجود دون تدميره.

نصائح من الخبير (أو الختيار، زي ما بدكم)

بعد سنوات من استخدام Terraform في مشاريع صغيرة وكبيرة، تعلمت بعض الدروس بالطريقة الصعبة. خذوا مني هاي النصائح العملية:

لا تلمس ملف الحالة (State File) يدوياً!

Terraform يخزن “ذاكرته” عن البنية التحتية التي بناها في ملف اسمه terraform.tfstate. هذا الملف مقدس! إياك ثم إياك أن تعدله يدوياً. للعمل كفريق، لا تخزن هذا الملف على جهازك، بل استخدم ما يسمى بـ “Remote State Backends” مثل Amazon S3 لتخزينه بشكل مركزي وآمن.

نظم شيفرتك باستخدام الوحدات (Modules)

عندما يكبر مشروعك، لا تضع كل الكود في ملف واحد. استخدم الوحدات (Modules) لتقسيم بنيتك التحتية إلى مكونات منطقية قابلة لإعادة الاستخدام (مثلاً، وحدة للشبكة، وحدة للسيرفرات، وحدة لقاعدة البيانات). فكر فيها كأنها “وظائف” (functions) في عالم البنية التحتية.

استخدم Git دائماً وأبداً

بما أن بنيتك التحتية أصبحت الآن كوداً، عاملها ككود! ضع كل ملفات Terraform في مستودع Git. هذا يعطيك تاريخاً كاملاً للتغييرات، القدرة على التراجع (revert)، والعمل مع فريقك من خلال Pull Requests لمراجعة التغييرات قبل تطبيقها.

الخلاصة: من قصر الورق إلى قلعة منيعة

التحول إلى Terraform لم يكن مجرد تغيير تقني، بل كان تحولاً في العقلية والثقافة داخل الفريق. انتقلنا من حالة الخوف الدائم من التغيير، والاجتماعات الطارئة في منتصف الليل، إلى حالة من الثقة والهدوء.

اليوم، بنيتنا التحتية لم تعد قصراً من ورق، بل أصبحت قلعة منيعة موثقة، مؤتمتة، وقابلة للتطوير. عندما نريد إضافة خدمة جديدة أو تغيير إعدادات 50 سيرفر دفعة واحدة، لا نفتح أي لوحة تحكم، بل نفتح محرر الكود، نكتب بضعة أسطر، ونشرب الشاي بينما Terraform يقوم بالعمل الشاق عنا. 😉

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

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

التوظيف وبناء الهوية التقنية

مقابلاتنا التقنية كانت يانصيباً: كيف أنقذنا ‘إطار المقابلات المنظم’ من جحيم التحيز والتقييمات غير العادلة؟

أنا أبو عمر، وهذا المقال هو قصة حقيقية عن كيف تحولت مقابلاتنا التقنية من فوضى قائمة على "التحيز" و"الحظ" إلى عملية منظمة وعادلة. سأشارككم بالتفصيل...

24 أبريل، 2026 قراءة المزيد
التوسع والأداء العالي والأحمال

طلبات المستخدمين كانت تموت ببطء: كيف أنقذتنا ‘قوائم انتظار الرسائل’ من جحيم العمليات المتزامنة؟

أشارككم قصة حقيقية من قلب المعركة التقنية، كيف أن تطبيقنا كاد أن ينهار تحت ضغط المستخدمين، وكيف كانت "قوائم انتظار الرسائل" (Message Queues) هي طوق...

24 أبريل، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

كان الربط مع البنوك كابوساً: كيف أنقذتنا ‘الخدمات المصرفية المفتوحة’ (Open Banking) من جحيم التكاملات المعقدة؟

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

24 أبريل، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

كانت مساراتنا المهنية طريقاً مسدوداً: كيف أنقذتنا ‘مصفوفات الكفاءة’ من جحيم الركود الوظيفي؟

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

24 أبريل، 2026 قراءة المزيد
اختبارات الاداء والجودة

واجهاتنا كانت تتغير بشكل عشوائي: كيف أنقذنا ‘اختبار الانحدار البصري’ من جحيم الأخطاء المرئية؟

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف أنقذنا مشروعنا من أخطاء الواجهة الأمامية الكارثية باستخدام اختبار الانحدار البصري (Visual Regression Testing). مقالة عملية مع...

24 أبريل، 2026 قراءة المزيد
نصائح برمجية

كودنا كان مليئاً بالأرقام الغامضة: كيف أنقذتنا ‘التعدادات’ (Enums) من جحيم الأرقام السحرية؟

أتذكر ليلة طويلة من تصحيح الأخطاء، كان السبب رقماً غامضاً في الكود. في هذه المقالة، أشارككم قصة كيف أنقذتنا التعدادات (Enums) من فوضى "الأرقام السحرية"،...

24 أبريل، 2026 قراءة المزيد
البودكاست