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

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

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

ساد صمت رهيب. ما حدا عارف. ما في سجل، ما في تاريخ، ما في أي إشي موثّق. كل الإعدادات كانت محفوظة في عقولنا، أو في ملفات “notes.txt” متناثرة على 10 أجهزة مختلفة. بدأنا سباق مع الزمن عشان نعيد بناء السيرفر من الصفر، نقرة بنقرة، في واجهة AWS. كل خطوة كانت مليانة توتر واحتمالية خطأ. بعد 4 ساعات من الجحيم، رجع الموقع يشتغل، لكننا خسرنا ثقة المستخدمين في أهم ليلة بحياتنا المهنية. وقتها تطلعت في الشباب وقلت لهم: “يا زلمة شو هالحكي؟ شغلنا كله مبني على قصر من ورق. بكبسة زر غلط، كل إشي بينهار. لازم نلاقي حل جذري”.

هذيك الليلة كانت بداية رحلتنا مع ما يُعرف بـ “البنية التحتية كشيفرة” (Infrastructure as Code)، والأداة السحرية اللي أنقذتنا: Terraform.

ما هو جحيم “النقرات اليدوية” الذي كنا نعيشه؟

قبل ما ندخل في الحل، خلوني أوصف لكم طبيعة “الجحيم” اللي كنا فيه، ويمكن كثير منكم بعيشه الآن. الإدارة اليدوية للبنية التحتية، يعني الدخول لواجهة AWS أو Azure أو Google Cloud والبدء في إنشاء السيرفرات وقواعد البيانات والشبكات عن طريق النقر بالفأرة، هي وصفة لكارثة حتمية. وهذه أهم أسبابها:

  • غياب التناسق (Environment Drift): بيئة التطوير (Development) عندك شغالة تمام، بس لما ترفع الكود على بيئة الإنتاج (Production) كل إشي بضرب. ليش؟ لأنه في إعداد صغير نسيته، أو نسخة مكتبة مختلفة. البيئات عمرها ما بتكون متطابقة 100% لما تبنيها بإيدك.
  • انعدام التوثيق والتاريخ (No Version Control): مين اللي غير حجم قاعدة البيانات يوم الثلاثاء الماضي؟ مين اللي فتح بورت جديد في الجدار الناري؟ لا أحد يعلم. ما في `git blame` لواجهة AWS. التغييرات بتصير وما بتت留下 أي أثر واضح.
  • البطء والتعرض للخطأ البشري: إنشاء بنية تحتية معقدة يدوياً عملية بطيئة ومملة وخطيرة. تخيل أنك تحتاج لإنشاء 10 سيرفرات بنفس المواصفات بالضبط. احتمالية أنك تنسى خطوة أو تختار خيار خاطئ في واحد منهم تكاد تكون 100%.
  • كابوس التعافي من الكوارث (Disaster Recovery): زي ما صار معنا في القصة. لما يوقع سيرفر أو حتى منطقة كاملة (Region)، إعادة بنائها من الذاكرة هي مهمة شبه مستحيلة ومليئة بالضغط النفسي.

باختصار، كنا شغالين بطريقة “ع البركة”، وهذا إشي ما بنفع في عالم الهندسة اللي لازم يكون دقيق وموثوق.

المنقذ Terraform: حين تصبح البنية التحتية شيفرة برمجية

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

  1. تكتبها في ملفات نصية (شيفرة).
  2. تحفظها في نظام إدارة نسخ مثل Git.
  3. تراجعها مع فريقك (Code Review).
  4. تطبقها بشكل آلي وموثوق.

Terraform هي الأداة اللي طورتها شركة HashiCorp لتحقيق هذا المفهوم على أرض الواقع. هي أداة مفتوحة المصدر بتخليك توصف بنيتك التحتية باستخدام لغة بسيطة اسمها HCL (HashiCorp Configuration Language).

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

“الأمر ليس مجرد أتمتة، بل هو تغيير في العقلية. أنت لا ‘تبني’ سيرفرات، بل ‘تصف’ الحالة النهائية التي تريد أن تكون عليها بنيتك التحتية.” – أبو عمر

هناك عدة أسباب جعلت Terraform هي الخيار الأفضل لنا ولكثير من الشركات حول العالم:

  • لغة وصفية (Declarative): أنت لا تكتب الخطوات (افعل كذا ثم كذا). بل تصف النتيجة النهائية (أريد سيرفر بهذه المواصفات وقاعدة بيانات بهذه المواصفات). Terraform ذكي كفاية ليعرف كيف يصل لهذه النتيجة.
  • متعدد المنصات (Provider-Agnostic): هل تستخدم AWS اليوم وتريد الانتقال إلى Azure غداً؟ أو ربما تستخدم مزيجاً من الاثنين؟ Terraform يدعم مئات المزودين (Providers) من خلال لغة واحدة موحدة.
  • إدارة الحالة (State Management): تيرافورم يحتفظ بملف اسمه “state” يسجل فيه كل الموارد التي قام بإنشائها. هذا يسمح له بمعرفة ما يجب تحديثه أو حذفه بدقة متناهية.
  • التخطيط قبل التنفيذ (Planning): هذه هي الميزة القاتلة. قبل تطبيق أي تغيير، يمكنك تشغيل أمر terraform plan. هذا الأمر سيخبرك بالضبط ماذا سيفعل Terraform: “سأقوم بإنشاء سيرفر جديد، وسأقوم بتعديل هذه القاعدة، وسأحذف تلك الشبكة”. لا مفاجآت بعد اليوم!

يلا نشمّر عن إيدينا: أول خطواتنا مع Terraform

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

1. الإعداد الأولي (The Setup)

أولاً، تحتاج لتثبيت Terraform على جهازك (ابحث عن Install Terraform CLI). ثانياً، يجب أن تكون لديك صلاحيات للوصول إلى حساب AWS الخاص بك (عادةً عن طريق AWS CLI configured credentials).

2. كتابة أول شيفرة Terraform

أنشئ مجلداً جديداً، وداخله ملف اسمه main.tf. هذا هو الملف الذي سنكتب فيه وصفتنا.


# main.tf

# 1. تحديد المزود (Provider) الذي سنعمل عليه، وهو AWS في هذه الحالة.
# نخبر Terraform أننا نريد استخدام مزود خدمات أمازون السحابية.
provider "aws" {
  region = "us-east-1" # نحدد المنطقة التي نريد إنشاء مواردنا فيها
}

# 2. تعريف مورد (Resource) نريد إنشاءه.
# نستخدم "resource" block لتعريف أي شيء نريد بناءه.
# "aws_instance" هو نوع المورد (سيرفر EC2).
# "app_server" هو اسم منطقي نطلقه على هذا المورد داخل شيفرة Terraform.
resource "aws_instance" "app_server" {
  # Amazon Machine Image (AMI) - هذا هو قالب نظام التشغيل.
  # هذه القيمة خاصة بـ Amazon Linux 2 في منطقة us-east-1.
  ami           = "ami-0c55b159cbfafe1f0" 

  # نوع السيرفر (حجمه وقدراته). t2.micro مناسب للطبقة المجانية.
  instance_type = "t2.micro"

  # الوسوم (Tags) تساعدنا في تنظيم وتحديد مواردنا في واجهة AWS.
  tags = {
    Name      = "MyFirstTerraformServer"
    ManagedBy = "Terraform"
  }
}

3. دورة الحياة: Plan, Apply, Destroy

الآن، افتح الطرفية (Terminal) في نفس المجلد وقم بتنفيذ الأوامر التالية بالترتيب:

  1. terraform init
    هذا الأمر يجب تشغيله مرة واحدة في كل مشروع جديد. يقوم بتحميل الإضافات اللازمة للمزود الذي حددته (AWS provider في حالتنا).
  2. terraform plan
    هذا هو فحص الأمان الخاص بك. سيقوم Terraform بقراءة الكود ومقارنته بالحالة الحالية (التي هي لا شيء الآن) وسيخبرك بما سيقوم به. ستظهر لك رسالة تقول إنه سيقوم بإنشاء مورد واحد (1 to add).
  3. terraform apply
    إذا كنت راضياً عن الخطة، نفذ هذا الأمر. سيطلب منك تأكيداً بكتابة “yes”. بعد ذلك، اجلس وشاهد Terraform وهو يبني لك السيرفر في ثوانٍ. لو ذهبت الآن إلى واجهة AWS، ستجد السيرفر الجديد هناك!
  4. terraform destroy
    هل انتهيت من تجربتك؟ ببساطة نفذ هذا الأمر. سيقوم Terraform بتدمير كل الموارد التي أنشأها. هذا يجعل عملية التنظيف سهلة جداً ويمنع التكاليف غير المتوقعة.

بهذه البساطة، قمنا بوصف وإنشاء وتدمير قطعة من البنية التحتية بشكل موثوق وقابل للتكرار.

من كوخ صغير إلى قصر منيع: مفاهيم متقدمة في Terraform

ما رأيناه كان مجرد البداية. قوة Terraform الحقيقية تظهر عندما تبدأ بنيتك التحتية بالنمو والتعقيد. هنا بعض المفاهيم التي ستنقل شغلك لمستوى آخر:

المتغيرات (Variables) والمخرجات (Outputs)

بدلاً من كتابة القيم مباشرة في الكود (مثل منطقة AWS أو نوع السيرفر)، يمكنك استخدام المتغيرات. هذا يجعل الكود قابلاً لإعادة الاستخدام. المخرجات (Outputs) تسمح لك باستخراج معلومات من بنيتك التحتية بعد إنشائها، مثل عنوان IP العام للسيرفر.

الوحدات (Modules)

هذا هو سر إدارة التعقيد. يمكنك تجميع مجموعة من الموارد التي تشكل جزءاً منطقياً (مثل شبكة كاملة VPC، أو مجموعة من سيرفرات الويب خلف موازن أحمال) في “وحدة” (Module). بعد ذلك، يمكنك إعادة استخدام هذه الوحدة مراراً وتكراراً، تماماً مثل استدعاء دالة في لغة برمجة.

إدارة الحالة عن بعد (Remote State Management)

عندما تعمل ضمن فريق، لا يمكنك الاحتفاظ بملف الحالة (state file) على جهازك المحلي. يجب تخزينه في مكان مشترك وآمن، مثل AWS S3 Bucket. هذا يضمن أن كل أعضاء الفريق يعملون على نفس النسخة من حالة البنية التحتية ويمنع تضارب التغييرات.

نصائح من أبو عمر: خلاصة تجربة سنين طويلة

  • ابدأ صغيراً: لا تحاول تحويل كل بنيتك التحتية إلى Terraform دفعة واحدة. ابدأ بمشروع جديد أو جزء صغير غير حرج. تعلم وامشِ خطوة بخطوة.
  • Plan هو صديقك الصدوق: لا تقم أبداً بتنفيذ terraform apply بدون مراجعة دقيقة ومتمعنة لمخرجات terraform plan. هذا الأمر أنقذني من كوارث لا تعد ولا تحصى.
  • كل شيء في Git: من اليوم الأول، ضع كل ملفات .tf الخاصة بك في مستودع Git. تاريخ بنيتك التحتية لا يقل أهمية عن تاريخ الكود البرمجي.
  • نظّم شغلك بالوحدات (Modules): حتى في المشاريع الصغيرة، اعتد على التفكير بطريقة الوحدات. هذا سيجعل حياتك أسهل بكثير عندما يكبر المشروع.
  • أمّن ملف الحالة (State File): ملف الحالة يحتوي على معلومات حساسة أحياناً. استخدم دائماً التخزين عن بعد (Remote Backend) مع تفعيل القفل (Locking) والتشفير (Encryption).

الخلاصة: وداعاً للفوضى، ومرحباً بالهندسة المنظمة 🏗️

العودة إلى تلك الليلة الكارثية… اليوم، لو حدث نفس السيناريو و “تبخر” سيرفرنا الرئيسي، لن أشعر بنفس الهلع. كل ما علي فعله هو الذهاب إلى نظام الـ CI/CD الخاص بنا، والضغط على زر “إعادة النشر”. في غضون دقائق، سيقوم Terraform بإعادة بناء السيرفر وكل ما يتعلق به من الصفر، بنفس المواصفات الدقيقة الموثقة في الكود.

الانتقال إلى Terraform لم يكن مجرد تغيير في الأدوات، بل كان تغييراً في العقلية. انتقلنا من دور “عمال البناء” الذين يضعون طوبة فوق طوبة يدوياً، إلى دور “المهندسين المعماريين” الذين يصممون المخططات بدقة، ثم يتركون الآلات تقوم بالبناء بشكل مثالي.

نصيحتي الأخيرة لك: لا تنتظر حتى تحترق أصابعك أو ينهار قصرك الورقي. ابدأ اليوم بتعلم Terraform. قد تكون الرحلة صعبة في البداية، لكن راحة البال والثقة التي ستحصل عليها في المقابل لا تقدر بثمن. والله ولي التوفيق.

أبو عمر

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

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

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

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

آخر المدونات

برمجة وقواعد بيانات

تحديثات قاعدة البيانات بدون توقف: كيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من جحيم التوقفات المجدولة؟

هل سئمت من إيقاف الخدمة مع كل تحديث لهيكلة قاعدة البيانات؟ أشارككم قصة حقيقية وكيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من ليالي النشر الطويلة والمُجهدة،...

4 يونيو، 2026 قراءة المزيد
الشبكات والـ APIs

كانت إعادة المحاولة كارثة: كيف أنقذتنا مفاتيح عدم تكرار العمليات (Idempotency Keys) من جحيم الفواتير المزدوجة؟

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

4 يونيو، 2026 قراءة المزيد
الحوسبة السحابية

من التوقف التام إلى النجاة: كيف أنقذتنا استراتيجية “الضوء المرشد” (Pilot Light) يوم انقطعت السحابة؟

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

4 يونيو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كانت مهمتي البرمجية للاختبار مجرد كود: كيف أنقذني توثيق القرارات من جحيم الصمت بعد المقابلة؟

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

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

من الانتظار لأيام إلى الدفع في ثوانٍ: كيف أنقذتنا شبكات الدفع الفوري من جحيم التحويلات البنكية؟

أسرد لكم من واقع تجربتي كـ "أبو عمر"، كيف عانينا من بطء وتكلفة التحويلات البنكية الدولية، وكيف جاءت شبكات الدفع الفوري ومعيار ISO 20022 لتكون...

4 يونيو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كان كل خادم لدينا ‘ندفة ثلج’ فريدة: كيف أنقذنا ‘الكود كبنية تحتية’ (IaC) من جحيم الانجراف اليدوي؟

في هذه المقالة، أشارككم قصة حقيقية من قلب المعركة التقنية مع "خوادم ندفات الثلج" الفوضوية. سنغوص في مفهوم "الكود كبنية تحتية" (IaC) وكيف أن أدوات...

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

كانت تغطية الاختبارات 100% لكن الأخطاء تتسرب: كيف أنقذنا “الاختبار الطفري” من جحيم الثقة الزائفة؟

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

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