المتغيرات في Bicep

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

يحل Resource Manager المتغيرات قبل بدء عمليات التوزيع. أينما يتم استخدام المتغير في ملف Bicep، تقوم إدارة الموارد باستبداله بالقيمة التي تم حلها.

أنت مقيد ب 512 متغيرا في ملف Bicep. لمزيد من المعلومات، راجع حدود القالب.

تحديد المتغيرات

بناء جملة تحديد المتغير هو:

@<decorator>(<argument>)
var <variable-name> = <variable-value>

لا يمكن أن يكون للمتغيّر نفس اسم المعلمة، أو الوحدة النمطية، أو المورد.

لاحظ أنك لا تحدد نوع بيانات للمتغير. يتم الاستدلال على النوع من القيمة. المثال التالي يعين متغيرًا إلى السلسلة.

var stringVar = 'example value'

يمكنك استخدام القيمة من معلمة أو متغير آخر عند تكوين المتغير.

param inputValue string = 'deployment parameter'

var stringVar = 'preset variable'
var concatToVar =  '${stringVar}AddToVar'
var concatToParam = '${inputValue}AddToParam'

output addToVar string = concatToVar
output addToParam string = concatToParam

المثال السابق يرجع:

{
  "addToParam": {
    "type": "String",
    "value": "deployment parameterAddToParam"
  },
  "addToVar": {
    "type": "String",
    "value": "preset variableAddToVar"
  }
}

يمكنك استخدام وظائف Bicep لتكوين قيمة المتغير. يستخدم المثال التالي وظائف Bicep لإنشاء قيمة سلسلة لاسم حساب تخزين.

param storageNamePrefix string = 'stg'
var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

output uniqueStorageName string = storageName

المثال السابق يرجع قيمة كالتالي:

"uniqueStorageName": {
  "type": "String",
  "value": "stghzuunrvapn6sw"
}

يمكنك استخدام التكرارات الحلقية عند تحديد متغير. ينشئ المثال التالي صفيف من العناصر ذات الخصائص الثلاث.

param itemCount int = 3

var objectArray = [for i in range(0, itemCount): {
  name: 'myDataDisk${(i + 1)}'
  diskSizeGB: '1'
  diskIndex: i
}]

output arrayResult array = objectArray

يعيد الإخراج صفيف بالقيم التالية:

[
  {
    "name": "myDataDisk1",
    "diskSizeGB": "1",
    "diskIndex": 0
  },
  {
    "name": "myDataDisk2",
    "diskSizeGB": "1",
    "diskIndex": 1
  },
  {
    "name": "myDataDisk3",
    "diskSizeGB": "1",
    "diskIndex": 2
  }
]

لمزيد من المعلومات حول أنواع التكرارات الحلقية التي يمكنك استخدامها مع المتغيرات، راجع الحلقات التكرارية في Bicep.

استخدام مصممي الديكور

تتم كتابة المحسنات بالتنسيق @expression ويتم وضعها فوق إعلانات المتغير. يعرض الجدول التالي المحسنات المتوفرة للمتغيرات.

المصمم الوسيطة ‏‏الوصف
الوصف سلسلة توفير أوصاف للمتغير.
تصدير لا شيء يشير إلى أن المتغير متاح للاستيراد بواسطة ملف Bicep آخر.

يوجد مصممي الديكور في sys namespace. إذا كنت بحاجة إلى تمييز مصمم ديكور عن عنصر آخر يحمل نفس الاسم، فاكتب في مقدمة مصمم الديكور sys. على سبيل المثال، إذا كان ملف Bicep يتضمن متغيرا باسم description، فيجب إضافة مساحة اسم sys عند استخدام مصمم الوصف .

‏‏الوصف

لإضافة شرح، أضف وصفا لإعلان المتغير. على سبيل المثال:

@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)

يمكن استخدام نص بتنسيق Markdown لنص الوصف.

تصدير

استخدم @export() لمشاركة المتغير مع ملفات Bicep الأخرى. لمزيد من المعلومات، راجع تصدير المتغيرات والأنواع والدالات.

استخدام المتغيرات

يوضح المثال التالي كيفية استخدام المتغير لخاصية مورد. يمكنك الرجوع إلى قيمة المتغير من خلال توفير اسم المتغير: storageName.

param rgLocation string
param storageNamePrefix string = 'STG'

var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

resource demoAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageName
  location: rgLocation
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output stgOutput string = storageName

لأن أسماء حسابات التخزين يجب أن تستخدم أحرف صغيرة، المتغير storageName يستخدم الوظيفة toLower لجعل القيمة storageNamePrefix حرف صغير. تقوم الوظيفة uniqueString بإنشاء قيمة فريدة من معرف مجموعة الموارد. يتم ربط القيم بسلسلة.

متغيرات التكوين

يمكنك تحديد المتغيرات التي تحتوي على قيم ذات صلة لتكوين بيئة. أنت تحدد المتغير ككائن مع القيم. يوضح المثال التالي كائنًا يحمل قيمًا لبيئتين - اختبار وإنتاج. قم بتمرير إحدى هذه القيم أثناء التوزيع.

@allowed([
  'test'
  'prod'
])
param environmentName string

var environmentSettings = {
  test: {
    instanceSize: 'Small'
    instanceCount: 1
  }
  prod: {
    instanceSize: 'Large'
    instanceCount: 4
  }
}

output instanceSize string = environmentSettings[environmentName].instanceSize
output instanceCount int = environmentSettings[environmentName].instanceCount

الخطوات التالية