ما المقصود بـ Terraform؟

مكتمل

يمكنك استخدام Terraform لتوفير الموارد الخاصة بك. تريد معرفة المزيد حول وحدات Terraform بحيث يمكنك اتخاذ قرار مستنير حول اللغة التي يجب استخدامها.

تغطي هذه الوحدة لغة Terraform والفوائد التي توفرها لتأليف الوحدة النمطية.

لغة Terraform - لغة تكوين HashiCorp (HCL)

تسمى اللغة المستخدمة من قبل Terraform لغة تكوين HashiCorp عادة ما يتم اختصارها إلى HCL. يتم استخدام لغة HCL في أدوات HashiCorp الأخرى، مثل Packer، ولكنها تعرف على نطاق واسع باسم لغة Terraform.

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

إشعار

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

فوائد Terraform

يوفر Terraform العديد من التحسينات على تأليف قالب ARM، بما في ذلك:

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

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

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

  • التحقق من صحة النوع و IntelliSense: ملحقات Terraform لميزة Visual Studio Code ميزة التحقق من الصحة الغنية و IntelliSense لجميع أنواع موارد Azure. تساعد هذه الميزة على تقديم تجربة تأليف أسهل.

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

variable "name_prefix" {
  type    = string
  default = "storage"
}

locals {
  storage_account_name             = "${var.name_prefix}${random_id.random_suffix.hex}"
  storage_account_replication_type = "RAGRS"
}

resource "random_id" "random_suffix" {
    byte_length = 4
}

resource "azurerm_resource_group" "example" {
  name     = "storage-resource-group"
  location = "eastus"
}

resource "azurerm_storage_account" "example" {
  name                      = local.storage_account_name
  location                  = azurerm_resource_group.example.location
  resource_group_name       = azurerm_resource_group.example.name
  sku                       = "Standard"
  account_replication_type  = local.storage_account_replication_type
  account_kind              = "StorageV2"
  access_tier               = "Hot"
  enable_https_traffic_only = true
}

output "storage_account_resource_id" {
  value = azurerm_storage_account.example.id
}