Terraform على Azure
هيّئ موفّر AzureRM في Terraform، واكتب خطة بنية أساسية بسيطة، وتعرّف على الحالات التي يُفضّل فيها Terraform على أدوات ARM أو Bicep الأصلية.
Terraform على Azure درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ما Terraform ولماذا Azure؟
Terraform أداة مفتوحة المصدر للبنية الأساسية كتعليمات برمجية، طورتها HashiCorp. وعلى خلاف Bicep، فإن Terraform مستقل عن موفر السحابة؛ إذ يمكن لقاعدة تعليمات برمجية واحدة في Terraform إدارة الموارد عبر Azure وAWS وGCP والعديد من الموفرين الآخرين في الوقت نفسه. ويستخدم Terraform على Azure موفر AzureRM للتفاعل مع ARM API، مما يجعله خيارًا شائعًا للمؤسسات متعددة السحابات.
موفر Terraform لـ AzureRM
موفر AzureRM هو مكوّن إضافي ينزّله Terraform ويستخدمه لترجمة تكوين Terraform إلى استدعاءات ARM API. وتتم صيانته بواسطة HashiCorp وMicrosoft، وهو الطريقة الرسمية لإدارة موارد Azure باستخدام Terraform. اضبطوا الموفر باستخدام معرّف الاشتراك وطريقة المصادقة، ثم شغّلوا terraform init لتنزيله.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}بنية ملفات Terraform
يُقسَّم مشروع Terraform نموذجي على Azure إلى عدة ملفات .tf: يحتوي main.tf على تعريفات الموارد، ويعرّف variables.tf متغيرات الإدخال، ويعرّف outputs.tf قيم المخرجات، ويوفر terraform.tfvars قيم المتغيرات لبيئة محددة. يحمّل Terraform تلقائيًا جميع ملفات .tf الموجودة في الدليل الحالي، ولذلك فإن تقسيمها إلى ملفات متعددة يهدف إلى سهولة القراءة فقط.
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}تعريف موارد Azure
في Terraform، تعرّفون موارد Azure باستخدام كتل resource. ويكون نوع الكتلة هو resource، متبوعًا بنوع مورد AzureRM، مثل 'azurerm_resource_group'، ثم اسم محلي يُستخدم للرجوع إلى المورد داخل التكوين. وتستخدم أسماء الخصائص في Terraform صيغة snake_case بدلًا من camelCase أو PascalCase المستخدمة في ARM JSON.
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}سير عمل Terraform: Init وPlan وApply
يتكون سير عمل Terraform الأساسي من ثلاث خطوات. ينزّل terraform init موفر AzureRM ويُعدّ الواجهة الخلفية. ويقارن terraform plan التكوين بالحالة الحالية، ويعرض الفروقات بين ما سيُنشأ أو يُغيّر أو يُدمّر، على نحو مشابه للمعاينة في ARM. وينفذ terraform apply الخطة ويحدّث Azure ليطابق التكوين.
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyحالة Terraform
يحتفظ Terraform بـ ملف حالة (terraform.tfstate) يسجل الحالة الحالية لجميع الموارد المُدارة ويربطها بالتكوين الخاص بكم. ويتيح هذا الملف لـ Terraform اكتشاف الانحراف بين ما هو مُكوّن وما هو موجود في Azure. وفي بيئات الفرق، خزّنوا الحالة عن بُعد في Azure Storage Account، باعتباره واجهة Terraform الخلفية، حتى يتشارك جميع أعضاء الفريق ملف الحالة نفسه.
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}المصادقة على Azure في Terraform
يدعم Terraform عدة أساليب للمصادقة على Azure. أثناء التطوير المحلي، استخدموا az login، أي مصادقة Azure CLI، وسيحصل Terraform على بيانات الاعتماد تلقائيًا. وفي مسارات CI/CD، استخدموا Service Principal مع سر عميل أو شهادة، ومرروه عبر متغيرات البيئة. أما للوكلاء أو الأجهزة الافتراضية المستضافة على Azure، فاستخدموا Managed Identity للحصول على أكثر طرق المصادقة أمانًا ومن دون أسرار.
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planوحدات Terraform لإعادة الاستخدام
مثل وحدات Bicep، تتيح لكم وحدات Terraform تجميع أنماط البنية الأساسية وإعادة استخدامها. والوحدة دليل يحتوي على ملفات .tf. ويمكنكم الرجوع إليها باستخدام كتلة module، وتمرير المدخلات عبر variables، واستخدام المخرجات. ويستضيف Terraform Registry مئات الوحدات المجتمعية ووحدات Azure الموثقة التي يمكنكم استخدامها مباشرةً، مثل وحدة شبكة AzureRM.
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}متى تختارون Terraform بدلًا من Bicep؟
اختاروا Bicep عندما تكون مؤسستكم تستخدم Azure فقط وتريد أضيق تكامل مع ميزات Azure الجديدة، إذ يحصل Bicep على دعم أنواع الموارد الجديدة منذ اليوم الأول. واختاروا Terraform عندما تديرون موارد عبر موفري سحابة متعددين، أو تحتاجون إلى النظام البيئي الكبير للوحدات المجتمعية، أو تفضلون صيغة HCL وسلسلة أدوات HashiCorp. كلاهما مناسب لعمليات النشر على Azure فقط، وغالبًا ما يحسم تفضيل المؤسسة الاختيار.
استيراد الموارد الموجودة مسبقًا
إذا كانت الموارد موجودة مسبقًا في Azure قبل بدء استخدام Terraform، يمكنكم إخضاعها لإدارة Terraform باستخدام terraform import. يجلب هذا الأمر الحالة الحالية للمورد ويضيفها إلى ملف حالة Terraform. وبعد الاستيراد، يجب عليكم كتابة كتلة التكوين المطابقة للمورد المستورد يدويًا، ثم تشغيل terraform plan للتأكد من عدم وجود فروقات.
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}أفضل ممارسات Terraform على Azure
اتبعوا أفضل الممارسات التالية عند استخدام Terraform على Azure: خزّنوا الحالة عن بُعد في Azure Blob Storage مع تمكين تأمين الحالة، واستخدموا مساحات العمل أو ملفات حالة منفصلة للبيئات المختلفة، ولا تودعوا الأسرار مطلقًا في نظام التحكم بالمصادر، بل استخدموا مصادر بيانات Azure Key Vault، وثبّتوا إصدارات الموفرين لتجنب التغييرات المعطِّلة، وشغّلوا Terraform في مسار CI/CD، مثل Azure Pipelines أو GitHub Actions، مع بوابات للموافقة على الخطة.
تحقق سريع
اختبروا مدى فهمكم لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.
مراجعة الدرس
تعلمتم في هذا الدرس أن Terraform أداة IaC مستقلة عن موفر السحابة، تستخدم موفر AzureRM لإدارة موارد Azure؛ وأن سير عمل init وplan وapply يتيح عمليات نشر آمنة ويمكن التنبؤ بها؛ وأن الحالة عن بُعد في Azure Blob Storage ضرورية للتعاون بين أعضاء الفريق. بعد ذلك سنستكشف إنشاء خطط App Service وتطبيقات الويب.
الأسئلة الشائعة
هل درس «Terraform على Azure» مجاني؟
نعم — نص درس «Terraform على Azure» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ماذا ستتعلم في «Terraform على Azure»؟
هيّئ موفّر AzureRM في Terraform، واكتب خطة بنية أساسية بسيطة، وتعرّف على الحالات التي يُفضّل فيها Terraform على أدوات ARM أو Bicep الأصلية. تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟
لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «Terraform على Azure»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟
نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كيف يعمل Azure Resource Manager
- كتابة قوالب ARM
- Bicep: IaC حديث لـ Azure
- Terraform على Azure