0Pricing
Azure Fundamentals · درس

Bicep: IaC حديث لـ Azure

تعلّم بنية Bicep المختصرة بوصفها تجريدًا قوي الأنواع فوق ARM JSON، وحوّل قالب ARM موجودًا إلى Bicep، وانشره باستخدام Azure CLI.

Bicep: IaC حديث لـ Azure درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ما هي Bicep ولماذا نستخدمها؟

Bicep هي لغة متخصصة بالمجال (DSL) طوّرتها Microsoft بوصفها بديلًا موجزًا ومحدد الأنواع لقوالب ARM JSON. تُترجم Bicep إلى ARM JSON قياسي، ولذلك تستخدم محرك نشر ARM نفسه وتدعم جميع أنواع موارد Azure منذ اليوم الأول. وتزيل Bicep الكثير من التعليمات البرمجية التمهيدية المطلوبة في JSON الخام، كما توفر أمانًا أفضل للأنواع ودعمًا أفضل لـ IntelliSense.

مقارنة بناء جملة Bicep وARM JSON

يحتاج حساب التخزين نفسه، الذي يتطلب نحو 25 سطرًا من JSON في قالب ARM، إلى 8 أسطر فقط تقريبًا في Bicep. تزيل Bicep '$schema' وcontentVersion والغلاف الذي يحيط بمصفوفة resources وبناء الجملة المطوّل للتعبيرات. وتظل أسماء الخصائص وأنواعها متطابقة، لأن Bicep طبقة تجريد مباشرة فوق ARM JSON — ولا يوجد أي اختلاف وقت التشغيل.

// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
  }
}

المعلمات والمزخرفات في Bicep

تستخدم معلمات Bicep بناء الجملة الموجز param name type = defaultValue. ويمكنكم تطبيق المزخرفات (التي تسبقها @) مباشرةً فوق المعلمة لإضافة قيود مثل @minLength() و@maxLength() و@allowed() و@description(). ويحدّد المزخرف @secure() المعلمة على أنها حساسة، وهو ما يعادل secureString في ARM JSON.

@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string

@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'

@secure()
param adminPassword string

المتغيرات والتعبيرات في Bicep

يُعلن عن المتغيرات في Bicep باستخدام الكلمة المفتاحية var، ويمكن أن تحتوي على أي تعبير، بما في ذلك استيفاء السلاسل باستخدام بناء الجملة '${value}'. ويُعد استيفاء السلاسل من أكثر التحسينات سهولة في القراءة مقارنةً بـ ARM JSON، إذ يلغي الحاجة إلى استدعاءات الدالة concat(). وتدعم Bicep أيضًا التعبيرات الشرطية باستخدام العامل الثلاثي condition ? trueValue : falseValue.

param environment string = 'dev'
param baseName string = 'myapp'

var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'

تعريفات الموارد والأسماء الرمزية

يحصل كل مورد في Bicep على اسم رمزي، وهو معرّف يُستخدم للإشارة إلى المورد داخل القالب. ولا يكون الاسم الرمزي هو نفسه اسم المورد في Azure. استخدموا الأسماء الرمزية للوصول إلى خصائص الموارد وإنشاء تبعيات ضمنية من خلال الإشارة إلى مورد داخل مورد آخر، مما يلغي الحاجة إلى مصفوفة dependsOn صريحة.

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: 'myVNet'
  location: location
  properties: {
    addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
  }
}

// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
  parent: vnet  // Bicep knows to create vnet first
  name: 'mySubnet'
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

المخرجات في Bicep

يُصرَّح عن المخرجات في Bicep باستخدام الكلمة الأساسية output متبوعة باسم المخرج ونوعه وقيمته. ويمكنكم الرجوع إلى خصائص مورد منشور باستخدام الاسم الرمزي وترميز النقطة، وهو أكثر قابلية للقراءة بكثير من دالة ARM ‏reference(). وتُعد المخرجات ضرورية لتمرير القيم بين استدعاءات وحدات Bicep.

output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.id

وحدات Bicep

تُعد وحدات Bicep المكافئ للقوالب المرتبطة في ARM JSON، إذ تتيح لكم تقسيم البنية الأساسية إلى مكونات قابلة لإعادة الاستخدام. والوحدة ببساطة هي ملف .bicep آخر. ويمكنكم الرجوع إليها باستخدام الكلمة الأساسية module، وتمرير المعلمات إليها، واستخدام مخرجاتها. كما يمكن نشر الوحدات واستهلاكها من Azure Container Registry لإعادة استخدامها على مستوى الفريق.

// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
  name: 'storageDeploy'
  params: {
    storageAccountName: 'myuniquestorage'
    location: location
    sku: 'Standard_LRS'
  }
}

// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpoint

تحويل قوالب ARM إلى Bicep

إذا كانت لديكم قوالب ARM JSON موجودة مسبقًا، يمكن لـ Bicep CLI فك تجميعها إلى Bicep باستخدام bicep decompile. وقد تحتاج النتيجة إلى بعض التنظيف اليدوي، لكنها توفر نقطة بداية ممتازة. كما توفر Microsoft مساحة تشغيل تجريبية عبر الإنترنت على العنوان aka.ms/bicepdemo، حيث يمكنكم لصق ARM JSON ومشاهدة ما يعادله في Bicep مباشرةً.

# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade

# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory

# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicep

نشر Bicep باستخدام Azure CLI

يدعم Azure CLI ملفات Bicep مباشرةً، ولذلك لا تحتاجون إلى تجميعها يدويًا إلى ARM JSON قبل نشرها. مرروا مسار ملف .bicep إلى az deployment group create باستخدام الخيار --template-file، وسيُجمّعه CLI بشفافية. كما تعمل الأوامر الفرعية validate وwhat-if نفسها مع ملفات Bicep تمامًا كما تعمل مع ARM JSON.

# Deploy a Bicep file directly
az deployment group create \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

# What-if preview with Bicep
az deployment group what-if \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

الحلقات والشروط في Bicep

يدعم Bicep حلقات الموارد باستخدام الصيغة for ... in لإنشاء مثيلات متعددة لمورد من معلمة مصفوفة، مما يلغي تكرار النسخ واللصق. وتتيح الكلمة الأساسية if النشر الشرطي للموارد، أي تضمين المورد فقط عندما يكون شرط معين صحيحًا. وتُجمَّع هاتان الميزتان في بنيتي ARM ‏copy وcondition على التوالي.

// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']

resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
  name: '${name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}]

// Condition: only deploy in prod
param deployKeyVault bool = false

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
  name: 'myKeyVault'
  location: location
  properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}

أدوات Bicep وفحص التعليمات البرمجية

يوفر ملحق Bicep لبرنامج Visual Studio Code ميزات IntelliSense الغنية، والتحقق من الأنواع، وإبراز الأخطاء ضمن السطر أثناء الكتابة. ويتضمن Bicep CLI أداة linter تتحقق من مخالفات أفضل الممارسات، مثل المعلمات غير المستخدمة، والأوصاف المفقودة، وإصدارات API غير الصحيحة. شغّلوا az bicep lint --file main.bicep في مسار CI الخاص بكم لاكتشاف المشكلات قبل النشر.

# Run the Bicep linter
az bicep lint --file main.bicep

# Format a Bicep file
az bicep format --file main.bicep

# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format json

تحقق سريع

اختبروا مدى فهمكم لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.

مراجعة الدرس

تعلمتم في هذا الدرس أن Bicep طبقة تجريد موجزة ومحددة الأنواع فوق ARM JSON، وتُجمَّع إلى قوالب ARM القياسية؛ وأن الوحدات والحلقات تتيحان كتابة تعليمات بنية أساسية قابلة لإعادة الاستخدام ومتوافقة مع مبدأ DRY؛ وأن Azure CLI ينشر ملفات Bicep مباشرةً مع دعم سير العمل نفسه للتحقق والمعاينة والنشر. بعد ذلك سنستكشف Terraform على Azure.

الأسئلة الشائعة

هل درس «Bicep: IaC حديث لـ Azure» مجاني؟

نعم — نص درس «Bicep: IaC حديث لـ Azure» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.

ماذا ستتعلم في «Bicep: IaC حديث لـ Azure»؟

تعلّم بنية Bicep المختصرة بوصفها تجريدًا قوي الأنواع فوق ARM JSON، وحوّل قالب ARM موجودًا إلى Bicep، وانشره باستخدام Azure CLI. تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟

لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «Bicep: IaC حديث لـ Azure»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟

نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كيف يعمل Azure Resource Manager
  2. كتابة قوالب ARM
  3. Bicep: IaC حديث لـ Azure
  4. Terraform على Azure
← العودة إلى Azure Fundamentals