يا جماعة الخير، السلام عليكم ورحمة الله. اسمحوا لي اليوم أحكي لكم قصة صارت معي ومع فريقي قبل كم سنة، قصة علّمتنا درس قاسي لكنه كان ضروري. كنا في عزّ إطلاق منتج جديد، تطبيق كنا سهرانين عليه شهور طويلة. الساعة كانت حوالي 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). الفكرة بسيطة وعبقرية: عامل البنية التحتية تبعتك (سيرفرات، شبكات، قواعد بيانات) بنفس الطريقة اللي بتعامل فيها كود التطبيق تبعك. يعني:
- تكتبها في ملفات نصية (شيفرة).
- تحفظها في نظام إدارة نسخ مثل Git.
- تراجعها مع فريقك (Code Review).
- تطبقها بشكل آلي وموثوق.
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) في نفس المجلد وقم بتنفيذ الأوامر التالية بالترتيب:
terraform init
هذا الأمر يجب تشغيله مرة واحدة في كل مشروع جديد. يقوم بتحميل الإضافات اللازمة للمزود الذي حددته (AWS provider في حالتنا).terraform plan
هذا هو فحص الأمان الخاص بك. سيقوم Terraform بقراءة الكود ومقارنته بالحالة الحالية (التي هي لا شيء الآن) وسيخبرك بما سيقوم به. ستظهر لك رسالة تقول إنه سيقوم بإنشاء مورد واحد (1 to add).terraform apply
إذا كنت راضياً عن الخطة، نفذ هذا الأمر. سيطلب منك تأكيداً بكتابة “yes”. بعد ذلك، اجلس وشاهد Terraform وهو يبني لك السيرفر في ثوانٍ. لو ذهبت الآن إلى واجهة AWS، ستجد السيرفر الجديد هناك!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. قد تكون الرحلة صعبة في البداية، لكن راحة البال والثقة التي ستحصل عليها في المقابل لا تقدر بثمن. والله ولي التوفيق.