كيفية استخدام Terraform مع فريقك

اختار المؤلف صندوق التمويل المفتوح والمجاني ليتلقى تبرعًا كجزء من برنامج الكتابة من أجل التبرعات.

المقدمة

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

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

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

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

المتطلبات المسبقة

  • A DigitalOcean Personal Access Token, which you can create via the DigitalOcean Control Panel. You can find instructions in the DigitalOcean product documents, How to Create a Personal Access Token.
  • تركيب Terraform على جهازك المحلي. إكمال الخطوة 1 من برنامج التعليم الذي يحمل عنوان كيفية استخدام Terraform مع DigitalOcean.
  • إذا كنت ترغب في استخدام خلفية pg، ستحتاج إلى إنشاء وصول إلى مجموعة قواعد بيانات PostgreSQL المدارة Managed PostgreSQL. لمزيد من المعلومات، يرجى زيارة دليل البدء السريع. يمكنك استخدام قاعدة بيانات منفصلة لهذا البرنامج التعليمي.
  • إذا كنت ترغب في استخدام سحابة Hashicorp المدارة، ستحتاج إلى حساب في Terraform Cloud. يمكنك إنشاء حساب على صفحة التسجيل الخاصة بهم.

ملاحظة: لقد قمنا باختبار هذا البرنامج التعليمي بشكل خاص باستخدام Terraform 1.1.3.

تخزين الحالة في قاعدة بيانات PostgreSQL المُدارة

في هذا القسم، ستقوم بإعداد مشروع ينشئ Droplet ويخزن الحالة في قاعدة بيانات DigitalOcean Managed PostgreSQL باستخدام موفر pg. يدعم هذا الموفر قفل الحالة، لذا لن يتم استبدال الحالة أبدًا بواسطة تغييرين أو أكثر يحدثان في نفس الوقت.

ابدأ بإنشاء دليل يسمى terraform-team-pg حيث ستخزن المشروع:

  1. mkdir ~/terraform-team-pg

انتقل إليه:

  1. cd ~/terraform-team-pg

سوف تقوم أولاً بتعريف الموفر ثم تمرر سلسلة الاتصال لقاعدة البيانات والوحدة digitalocean. أنشئ وافتح ملف provider.tf للتحرير:

  1. nano provider.tf

أضف الأسطر التالية:

~/terraform-team-pg/provider.tf
terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }

  backend "pg" {
    conn_str = "your_db_connection_string"
  }
}

variable "do_token" {}

provider "digitalocean" {
  token = var.do_token
}

هنا تحتاج إلى موفر digitalocean وتعرف الخلفية pg، التي تقبل سلسلة الاتصال. ثم، تعرف المتغير do_token وتمرره إلى مثيل موفر digitalocean.

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

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

قم بتهيئة المشروع عن طريق تشغيل:

  1. terraform init

سيكون الإخراج مشابهًا للتالي:

Output
Initializing the backend... Successfully configured the backend "pg"! Terraform will automatically use this backend unless the backend configuration changes. Initializing provider plugins... - Finding digitalocean/digitalocean versions matching "~> 2.0"... - Installing digitalocean/digitalocean v2.16.0... - Installed digitalocean/digitalocean v2.16.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8) Partner and community providers are signed by their developers. If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/cli/plugins/signing.html Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. Terraform has been successfully initialized! ...

تمت تهيئة Terraform بنجاح للواجهة الخلفية، مما يعني أنه تم الاتصال بقاعدة البيانات.

بعد ذلك، قم بتعريف الـ Droplet في ملف يسمى droplets.tf. أنشئه وافتحه للتحرير عن طريق تشغيل:

  1. nano droplets.tf

أضف الأسطر التالية:

~/terraform-team-pg/droplets.tf
resource "digitalocean_droplet" "web" {
  image  = "ubuntu-20-04-x64"
  name   = "web-1"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

سيقوم هذا الكود بنشر Droplet يسمى web-1 في منطقة fra1، يعمل بنظام Ubuntu 20.04 على 1 جيجابايت من ذاكرة الوصول العشوائي ونواة معالج واحدة. هذا كل ما تحتاج إلى تعريفه، لذا قم بحفظ وإغلاق الملف.

سيكون لديك حاجة إلى رمز الوصول الخاص بـ DigitalOcean في متغير بيئي. أنشئ واحدًا، مستبدلاً your_do_token برمز الوصول الخاص بك:

  1. export DO_PAT="your_do_token"

للتحقق من أن الاتصال بقاعدة البيانات يعمل، جرب تخطيط التكوين:

  1. terraform plan -var "do_token=${DO_PAT}"

سيكون الإخراج مشابهًا للتالي:

Output
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # سيتم إنشاء digitalocean_droplet.web + resource "digitalocean_droplet" "web" { + backups = false + created_at = (known after apply) + disk = (known after apply) + graceful_shutdown = false + id = (known after apply) + image = "ubuntu-20-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "web-1" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = (known after apply) + region = "fra1" + resize_disk = true + size = "s-1vcpu-1gb" + status = (known after apply) + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) + vpc_uuid = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ...

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

تخزين الحالة في Terraform Cloud

في هذه الخطوة، ستقوم بإنشاء مشروع ينشئ Droplet ويستخدم Terraform Cloud كخادم خلفي مع موفر cloud. وهذا يتضمن إنشاء المنظمة و مساحة العمل في Terraform Cloud، وكتابة كود البنية التحتية، وتخطيطها.

إنشاء منظمة

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

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

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

ثم سيطلب منك تحديد نوع مساحة العمل.

نظرًا لأنك ستتفاعل مع تيرا فورم كلاود باستخدام سطر الأوامر ، انقر على الخيار سير العمل القائم على سطر الأوامر. ثم أدخل اسمًا لمساحة العمل الخاصة بك واترك الوصف فارغًا.

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

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

قبل الاتصال بها ، ستحتاج إلى تكوين إصدار تيرا فورم الذي ستستخدمه السحابة لتنفيذ الأوامر الخاصة بك. لتعيينه ، انقر فوق القائمة المنسدلة الإعدادات بجوار نظرة عامة وحدد عام من القائمة. عندما تفتح الصفحة ، انتقل إلى القائمة المنسدلة إصدار تيرا فورم واختر 1.1.3 (لهذا البرنامج التعليمي).

ثم، انقر فوق الزر حفظ الإعدادات لحفظ التغييرات.

للاتصال بمشروعك بمؤسستك ومساحة العمل الخاصة بك، ستحتاج أولاً إلى تسجيل الدخول باستخدام سطر الأوامر. قبل تشغيل الأمر، انتقل إلى صفحة الرموز لإنشاء رمز وصول جديد لخادمك، الذي سيوفر الوصول إلى حسابك. ستتلقى إشعارًا لإنشاء رمز API.

الوصف الافتراضي جيد، لذا انقر فوق إنشاء رمز API لإنشائه.

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

في سطر الأوامر، قم بتشغيل الأمر التالي لتسجيل الدخول:

  1. terraform login

ستتلقى الناتج التالي:

Output
Terraform will request an API token for app.terraform.io using your browser. If login is successful, Terraform will store the token in plain text in the following file for use by subsequent commands: /home/sammy/.terraform.d/credentials.tfrc.json Do you want to proceed? Only 'yes' will be accepted to confirm. ...

يحذرك Terraform بأن الرمز سيتم تخزينه محليًا. أدخل نعم عندما يطلب منك:

Output
--------------------------------------------------------------------------------- Open the following URL to access the tokens page for app.terraform.io: https://app.terraform.io/app/settings/tokens?source=terraform-login --------------------------------------------------------------------------------- Generate a token using your browser, and copy-paste it into this prompt. Terraform will store the token in plain text in the following file for use by subsequent commands: /home/sammy/.terraform.d/credentials.tfrc.json Token for app.terraform.io: Enter a value:

الصق الرمز الذي قمت بنسخه وقم بتأكيده بالضغط على ENTER. سيظهر Terraform رسالة نجاح:

Output
... - ----- - --------- -- --------- - ----- --------- ------ ------- ------- --------- ---------- ---- ---------- ---------- -- ---------- ---------- Welcome to Terraform Cloud! - ---------- ------- --- ----- --- Documentation: terraform.io/docs/cloud -------- - ---------- ---------- --------- ----- - New to TFC? Follow these steps to instantly apply an example configuration: $ git clone https://github.com/hashicorp/tfc-getting-started.git $ cd tfc-getting-started $ scripts/setup.sh

لقد قمت بتكوين تثبيت Terraform المحلي للوصول إلى حسابك على Terraform Cloud. الآن ستقوم بإنشاء مشروع ينشئ Droplet وتكوينه لاستخدام Terraform Cloud لتخزين حالته.

إعداد المشروع

أولاً، قم بإنشاء دليل يحمل اسم terraform-team-cloud حيث ستقوم بتخزين المشروع:

  1. mkdir ~/terraform-team-cloud

انتقل إليه:

  1. cd ~/terraform-team-cloud

لإعداد مشروعك، ستحتاج إلى:

  • تحديد وتكوين مزود الخدمة cloud، الذي يتفاعل مع Terraform Cloud.
  • طلب مزود الخدمة digitalocean لتمكينك من نشر موارد DigitalOcean.
  • تحديد وتهيئة المتغيرات التي ستستخدمها.

سوف تقوم بتخزين مواصفات مزود الخدمة والوحدات النمطية في ملف يحمل اسم provider.tf. قم بإنشاءه وفتحه للتحرير عن طريق تشغيل:

  1. nano provider.tf

أضف السطور التالية:

~/terraform-team-cloud/provider.tf
terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }

  cloud {
    organization = "your_organization_name"

    workspaces {
      name = "your_workspace_name"
    }
  }
}

variable "do_token" {}

provider "digitalocean" {
  token = var.do_token
}

هنا، تحدد إصدار Terraform أولاً. ثم، تحدد مزود الخدمة digitalocean كما هو مطلوب وتعيين الخلفية إلى cloud. بالنسبة للقيم المؤشرة باللون الأصفر للـ organization و workspaces.name، قم بتغييرها بالأسماء التي حددتها.

بعد ذلك، قم بتعريف متغير يسمى do_token، الذي تمرره إلى مزود الخدمة digitalocean الذي تم إنشاؤه بعده. لقد قمت الآن بتكوين مشروعك للاتصال بمنظمتك، لذا احفظ وأغلق الملف.

قم بتهيئة مشروعك باستخدام الأمر التالي:

  1. terraform init

سيكون الإخراج مشابهًا لهذا:

Output
Initializing Terraform Cloud... Initializing provider plugins... - Finding digitalocean/digitalocean versions matching "~> 2.0"... - Installing digitalocean/digitalocean v2.18.0... - Installed digitalocean/digitalocean v2.18.0 (signed by a HashiCorp partner, key ID F82037E524B9C0E8) Partner and community providers are signed by their developers. If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/cli/plugins/signing.html Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. Terraform Cloud has been successfully initialized! ...

منذ أن تعريف القطرة هو نفسه كما في المشروع السابق، يمكنك نسخه عن طريق تشغيل:

  1. cp ../terraform-team-pg/droplets.tf .

وأخيراً، ستقوم بتعريف قيم المتغيرات. موفر السحابة لا يدعم تمرير القيم إلى المتغيرات عبر سطر الأوامر، لذا سيتعين عليك تمريرها باستخدام ملفات المتغيرات أو تعيينها في Terraform Cloud. يقرأ Terraform قيم المتغيرات من ملفات تنتهي باسم الملف .auto.tfvars. قم بإنشاء ملف وافتحه واسمه vars.auto.tfvars للتحرير، حيث ستقوم بتعريف المتغير do_token:

  1. nano vars.auto.tfvars

أضف السطر التالي، مستبدلاً your_do_token برمز مميز API لـ DigitalOcean الخاص بك:

vars.auto.tfvars
do_token = "your_do_token"

عند الانتهاء، احفظ وأغلق الملف. سيراقب Terraform هذا الملف تلقائياً عند تخطيط الإجراءات.

المشروع الخاص بك الآن مكتمل ومعد لاستخدام Terraform Cloud كخلفية له. الآن ستخطط وتنفذ القطرة وتراجع كيف ينعكس ذلك في تطبيق السحابة.

تطبيق التكوين

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

يمكنك تطبيق المشروع عن طريق تشغيل الأمر التالي لتحديثه:

  1. terraform apply

ستلاحظ أن الناتج مختلف عند استخدام local كواجهة خلفية:

Output
Running apply in Terraform Cloud. Output will stream here. Pressing Ctrl-C will cancel the remote apply if it's still pending. If the apply started it will stop streaming the logs, but will not stop the apply running remotely. Preparing the remote apply... To view this run in a browser, visit: https://app.terraform.io/app/sammy-shark/sammy/runs/run-euVu9t1yUtuq5sy9 Waiting for the plan to start... Terraform v1.1.3 on linux_amd64 Configuring remote state backend... Initializing Terraform configuration... Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # سيتم إنشاء digitalocean_droplet.web + resource "digitalocean_droplet" "web" { + backups = false + created_at = (known after apply) + disk = (known after apply) + graceful_shutdown = false + id = (known after apply) + image = "ubuntu-20-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "web-1" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = (known after apply) + region = "fra1" + resize_disk = true + size = "s-1vcpu-1gb" + status = (known after apply) + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) + vpc_uuid = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ...

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

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

يمكنك الآن إتلاف الموارد المنشأة بتشغيل الأمر التالي:

  1. terraform destroy

في هذا القسم، قمت بتوصيل مشروعك بـ Terraform Cloud، مما يجعل حالة مشروعك متاحة لفريقك في مكان مركزي. يتيح هذا المشاركة والمزامنة للجميع الذين لديهم وصول إلى المشروع، مما يؤدي إلى تجربة أكثر سلاسة.

الختام

في هذا البرنامج التعليمي، استخدمت واجهتي خلفية مختلفتين: Terraform Cloud، والتي هي العرض السحابي الذي يديره Hashicorp لـ Terraform؛ و pg، الذي يسمح لك بتخزين حالة المشروع في قاعدة بيانات PostgreSQL. استخدمت قاعدة بيانات PostgreSQL المُدارة من DigitalOcean، التي يمكنك توفيرها واستخدامها مع Terraform في دقائق.

لمزيد من المعلومات حول ميزات Terraform Cloud، قم بزيارة المستندات الرسمية.

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-terraform-within-your-team