كانت بنيتنا التحتية قصراً من ورق: كيف أنقذنا 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. قد تكون الرحلة صعبة في البداية، لكن راحة البال والثقة التي ستحصل عليها في المقابل لا تقدر بثمن. والله ولي التوفيق.

أبو عمر

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

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

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

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

آخر المدونات

التوسع والأداء العالي والأحمال

طلبات المستخدمين كانت تضيع: كيف أنقذتنا “طوابير الرسائل” (Message Queues) من جحيم فقدان البيانات؟

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

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

كان المحتالون يرقصون بين قواعدنا: كيف أنقذتنا ‘نماذج اكتشاف الشذوذ’ من جحيم الاحتيال؟

في هذه المقالة، أشارككم قصة حقيقية من قلب المعركة ضد الاحتيال المالي. نستكشف كيف فشلت الأنظمة التقليدية وكيف كانت نماذج اكتشاف الشذوذ (Anomaly Detection) طوق...

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

من الخوف إلى الإبداع: كيف أنقذت “السلامة النفسية” فريقي من شلل الصمت القاتل؟

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

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

كانت واجهاتنا شبكة عنكبوت: كيف أنقذ نمط ‘بوابة الواجهة البرمجية’ (API Gateway) مشروعنا من الفوضى؟

واجهات المستخدم تتحدث مع عشرات الخدمات المصغرة؟ فوضى عارمة! في هذه المقالة، أسرد لكم حكايتي مع هذه المشكلة وكيف كان نمط 'بوابة الواجهة البرمجية' (API...

23 مايو، 2026 قراءة المزيد
ذكاء اصطناعي

كان بحثنا يفهم الكلمات لا المعاني: كيف أنقذتنا ‘التضمينات المتجهة’ (Vector Embeddings) من جحيم البحث الحرفي؟

بتذكر مرة كنا بنبني نظام بحث داخلي لشركة، وكان الموظف يسأل "كيف آخذ إجازة مرضية؟" والنظام ما يرجعله إشي، لأن المستند الرسمي عنوانه "سياسة الإجازات...

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