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

قد تتساءل: ما هي البنية التحتية ككود؟ كيف تحسن عملية وتجربة التطوير، وأين يأتي Terraform في الصورة؟ حسنًا، سنستكشف كل هذا والمزيد في هذا الدليل. ولكن قبل أن نبدأ، إليك بعض المتطلبات الأساسية:

  • معرفة أساسية بالسحابة ومصطلحات السحابة

  • الوصول إلى جهاز كمبيوتر لتنفيذ أمثلة الكود

  • حساب GCP

مع ذلك، دعونا نبدأ.

إليك ما سنغطيه:

  1. نظرة عامة على البنية التحتية ككود

  2. ما هو Terraform؟

  3. فوائد Terraform

  4. المصطلحات الشائعة المستخدمة في تيرافورم

  5. مشروع تجريبي: كيفية كتابة تكوين تيرافورم

  6. الخاتمة

نظرة عامة على البنية التحتية ككود (IaC)

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

هناك نهجان متميزان للبنية التحتية ككود: النهج الإصدار التوجيهي والنهج الإصدار التصريحي.

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

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

بعض الأدوات قادرة على استخدام كلا النهجين بينما تناسب أدوات أخرى واحدًا فقط. تشمل أمثلة بعض أدوات IaC الشائعة المستخدمة عالميًا Terraform IaC، AWS Cloud Formation، Ansible، و Pulumi، و Chef، من بين أخرى.

كما يوحي الاسم – البنية التحتية كـ كود – فإن الكود الذي ينشئ البنية التحتية مكتوب بلغات قالب مختلفة ضمن مساحة IaC. تشمل لغات القوالب الشائعة JSON و YAML و ARM template و HCL و Heat Scripts، وما إلى ذلك.

يمكنك أيضًا استخدام أدوات البرمجة النصية لتنفيذ بنية تحتية سحابية. تشمل بعض الأدوات الشائعة Bash و PowerShell. غالبًا ما تأتي هذه مثبتة مسبقًا على معظم أجهزة الكمبيوتر الشخصية.

من بين كل هذه الأدوات، إن Terraform مميزة لأسباب مختلفة – وهي التي سنفحصها في هذا المقال.

ما هو Terraform؟

تيرا فورم هي أداة مفتوحة المصدر تم تطويرها بواسطة هاشي كورب في عام 2014. لقد تطورت على مر السنين وأصبحت الآن تعتبر أداة بنية تحتية تعمل على أساس السحابة وتتيح لك إنشاء بنية تحتية عبر عدة مزودي خدمات سحابية.

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

ومثل غيرها من أدوات البنية على شكل رمز، فإن الإطار الرمزي المستخدم لإنشاء البنية في Terraform هو لغة قوالب هاشي كورب (HCL).

فوائد Terraform

الآن سأسلط الضوء على بعض فوائد استخدام Terraform كمهندس سحابة، جنبًا إلى جنب مع الدور الرئيسي للأداة في نظام السحابة.

1. نهج تصريحي

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

2. التعامل مع الصراعات

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

3. غير مرتبط بسحابة معينة

Terraform هو مزود خدمة أتمتة متعدد الأغراض ومتعدد السحابات مع قدرات أتمتة بنية تحتية فعالة عبر مقدمي خدمات السحابة الرئيسيين (AWS، GCP وAzure). كما أنه يتيح الأتمتة الهجينة والتفاعلية بين مقدمي الخدمات.

4. سهل الاستخدام

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

5. قدرات إدارة الملفات

ينشئ Terraform تلقائيًا نسخة احتياطية محلية لحالات الأتمتة على جهاز الكمبيوتر المحلي الخاص بك لضمان الاسترجاع الفوري وإدارة الملفات في حالة حدوث أي خطأ. كما يقدم خيارات النسخ الاحتياطي عن بُعد لمقدمي خدمات السحابة عن بُعد عند الضرورة.

6. التحكم في الإصدارات

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

7. إعادة استخدام الشيفرة

يقدم Terraform مجموعة واسعة من قوالب الشيفرة لسهولة إعادة الاستخدام على صفحة وثائق المطورين الخاصة به.

الآن بعد أن أبرزنا فوائد Terraform، دعونا نتعرف على بعض المصطلحات الشائعة المستخدمة في Terraform وما تعنيه.

المصطلحات الشائعة المستخدمة في Terraform

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

  1. المزودون: في Terraform، المزود هو واجهة برمجة التطبيقات التي تتيح لـ Terraform التفاعل مع واجهات برمجة التطبيقات المختلفة وخدمات السحابة. على سبيل المثال، ستستخدم مزودًا للتفاعل مع موفر خدمة سحابية مثل GCP أو Azure.

  2. الوحدات: الوحدات هي مكونات تم إنشاؤها خصيصًا داخل إطار عمل Terraform وتعمل كعناصر قابلة لإعادة الاستخدام تتيح لك تنظيم خدمات السحابة بسهولة. يمكنك أيضًا تخزين معلومات أساسية تتعلق بخدمات السحابة في وحدة، ثم تعديلها لضمان التميز باستخدام متغيرات الوحدة.

  3. الموارد: الموارد في Terraform تشير إلى مكونات البنية التحتية السحابية التي يجب إنشاؤها. أمثلة على ذلك تشمل شبكات السحابة، وحدات الحوسبة الظاهرية، ومناطق التوافر، والبنية التحتية الأخرى.

  4. الحالة: مفهوم الحالة في Terraform يشكل أساس كفاءته. تتتبع الحالة التكوين الحالي لموارد البنية التحتية الخاصة بك، وتحتوي على تفاصيل حول كل مورد أنشأته Terraform، أو قمت بتعديله، أو حذفه. يستخدم نظام التحكم في الإصدارات الخاص بـ Terraform لتتبع أي تغييرات تقوم بها على ملف الكود ويستخدم تلك المعلومات لتدمير وتوفير البنية التحتية عند الضرورة.

  5. مساحة العمل: تعمل مساحة العمل بطريقة مشابهة إلى حد ما لنظام التحكم في الإصدارات، حيث تنشئ نوعًا من القيد حول ملف عمل. تسمح لك مساحات العمل بإدارة عدة نسخ من تكوين البنية التحتية الواحدة بطريقة نظيفة ومعزولة ضمن نفس الخلفية. يمكنك استخدام مساحات العمل لفصل البيئات مثل التطوير والاستضافة والإنتاج بينما تستخدم نفس تكوين Terraform.

مشروع العرض: كيفية كتابة تكوين Terraform

في هذا القسم، سنقوم بالتعمق أكثر في كتابة أول ملف Terraform لتنظيم جهاز افتراضي لبرنامج Google Cloud ببضع خطوط من الكود فقط. ولكن قبل أن نبدأ، سنناقش الأوامر المختلفة التي يجب أن تفهمها قبل تنفيذ مشروع العرض.

أوامر Terraform الشائعة

  • Terraform init: هذا الأمر يقوم بتهيئة أداة Terraform وتنزيل الملفات الأساسية الخاصة بموفر الخدمة السحابية. كما ينشئ اتصالًا بين Terraform وموفر الخدمة السحابية المعني. في حالتنا، الاتصال بين GCP وموفر Terraform.

  • تيرافورم fmt: هذا الأمر يضمن تنسيق الكود والمسافة بشكل تلقائي. يضمن تنفيذ مرتب للكود ويقلل من أي أخطاء.

  • تيرافورم plan: هذا الأمر يوضح خطوات تنفيذ كود تيرافورم، ويكتشف أي أخطاء قد تحدث أثناء عملية التنفيذ. كما يسلط الضوء على أي أخطاء في كود تيرافورم قد تعيق التنفيذ. وأخيرًا، يعمل جنبًا إلى جنب مع إدارة حالة تيرافورم لاكتشاف أي تغيير في الحالة وإلغاء توفير أو إنشاء أي خدمات سحابية إضافية إذا لزم الأمر.

  • Terraform apply: هذه الأمر ينفذ حالة Terraform المخطط التي تم تنفيذها بواسطة أمر Terraform plan.

  • Terraform destroy: هذه الأمر هو الأمر النهائي في مخطط Terraform والذي يستخدم لتعطيل أو تدمير جميع خدمات السحابة التي تم إنشاؤها باستخدام أمر Terraform apply. من المهم ملاحظة أنه يجب عليك تنفيذ الأوامر المذكورة أعلاه بالتسلسل لضمان إنشاء البنية التحتية الخاصة بك بشكل صحيح.

إنشاء آلة افتراضية مدعومة بـ IaC على GCP

الآن بعد أن تعلمت هذه الأوامر المهمة، دعنا نجربها جميعًا عن طريق إنشاء أول آلة افتراضية مدعومة بـ IaC على GCP.

في محرر التعليمات البرمجية الخاص بك، اكتب الكود التالي:

provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"        
}

هذا الكود يبرز مزود السحابة الذي نستخدمه لتوليد موارد السحابة التي نحتاجها. في حالتنا، هو برنامج Google السحابي. الاسم المعين له هو ببساطة “google”. مزودات السحابة الأخرى مثل AWS وAzure هي “aws” و”azure” على التوالي.

السطر الثاني يحدد معرف الاشتراك في GCP، والذي يكون فريدًا لكل حساب GCP (ويساعد على تسهيل التكامل الدقيق). يجب عليك استخدام الخاص بك في المساحة المقدمة.

سيتعين عليك أيضًا تضمين منطقة مورد مناسبة ومنطقة توفر مورد. تعتبر هذه القاعدة الفعلية للجهاز الظاهري الذي سنقوم بإنشائه حتى نتمكن من تشغيله. في هذ scen، اخترت منطقة central في الولايات المتحدة ومنطقة توفر 1-a، على التوالي. يمكنك قراءة المزيد هنا حول مناطق السحاب ومناطق توفر الموارد.

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"      
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11" 
    }
  }

يحدد مقتطف الكود أعلاه المورد الحسابي الدقيق الذي سيتم تنسيقه، والذي في حالتنا هذه هو مثيل الجهاز الظاهري المشفر كـ “vm_instance”. 'example-vm' هو الاسم الذي نرغب في تعيينه للجهاز الظاهري الذي سنقوم بإنشائه لهذا المشروع. من المهم ملاحظة أن اسم الجهاز الظاهري يجب أن يكون فريدًا أيضًا. نوع الجهاز الظاهري الذي اخترناه كان نوع E2 (غرض عام) – جهاز ظاهري من الحجم المتوسط. يمكنك الحصول على مزيد من المعلومات حول أنواع الجهاز الظاهري هنا.

علاوة على ذلك، نحدد أيضًا نظام التشغيل الذي من المتوقع أن يتم تشغيله (“boot_disk”) والذي هو صورة من نظام التشغيل Debian Linux الإصدار 11 في حالتي.

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

لإكمال إنشاء الجهاز الظاهري الخاص بنا، نحتاج إلى إعداد شبكة افتراضية للسماح بالوصول عن بُعد إلى الجهاز الظاهري. يربط كتلة واجهة الشبكة الجهاز الظاهري بشبكة VPC (السحابة الخاصة الظاهرية) الافتراضية المقدمة من قِبل GCP. لن نتمكن من التفاعل مع الجهاز الظاهري بدون شبكة VPC. تُعرض كتلة الإخراج أيضًا عنوان IP للوصول الافتراضي في الطرفية، والذي يمكننا استخدامه للاتصال بالجهاز الظاهري.

إليك الكود المتوقع في النهاية:


provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"       
}

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"         
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"  
    }
  }

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

من هناك، سنقوم الآن بتنفيذ هذا الكود باستخدام الأوامر المُظللة في الصورة أدناه:

الأمر terraform -v يؤكد أن Terraform قد تم تثبيته بنجاح على الطرفية. الإخراج المتوقع سيكون إصدار أداة Terraform المثبتة.

يتم تنفيذ الأمر التالي، وهو وظيفة terraform init التي تبدأ في التواصل مع مزوِّد خدمة السحابة، الذي هو في حالتنا GCP. يتم أيضًا تثبيت جميع التبعيات الضرورية.

يتم تشغيل الأمر terraform fmt أيضًا لضمان تنسيق الكود والمسافات بشكل مناسب. ثم يتم تنفيذ الأمر terraform plan بتسلسل.

من الصورة أعلاه، يمكنك رؤية الخطوات التي تنوي Terraform استخدامها لإنشاء الجهاز الظاهري المتوقع.

بنجاح تنفيذ خطة Terraform، سنقوم بعد ذلك بتنفيذ وظيفة terraform apply لتنفيذ الخطوات المحددة في خطة Terraform.

سيُولِّد ذلك نافذة تطلب تأكيد تنفيذ Terraform كما هو موضح أعلاه. كتابة “نعم” ستسمح بانتقال العملية بسلاسة.

عند تنفيذ ناجح، سيتم عرض رسالة نجاح كما هو موضح أعلاه. من خلال ذلك، قمنا بإنشاء بنية السحاب الخاصة بنا بمجرد الكود. يمكن بعد ذلك استدعاء الأمر terraform destroy لإزالة الآلات الافتراضية التي تم إنشاؤها.

الاستنتاج

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

لتعزيز معرفتك بشكل أكبر، يمكنك الاطلاع على وثائق Terraform لمزيد من أمثلة الكود. أوصي أيضًا باستخدام معرفتك الجديدة لتلقيم مشروع باستخدامات حقيقية.

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