Поделиться через


Переменные в Bicep

В этой статье описано, как определять и использовать переменные в файле Bicep. Вы используете переменные для упрощения разработки файла Bicep. Вместо повторения сложных выражений по всему файлу Bicep вы определяете переменную, содержащую такое сложное выражение. Затем вы используете эту переменную по мере необходимости в файле Bicep.

Resource Manager разрешает переменные перед началом операций развертывания. Когда в файле Bicep используется переменная, Resource Manager заменяет ее разрешенным значением.

В файле Bicep ограничено 512 переменными. Дополнительные сведения см. в разделе Ограничения шаблона.

Определение переменных

Для определения переменной используется следующий синтаксис:

@<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 и помещаются над объявлениями переменных. В следующей таблице показаны доступные декораторы для переменных.

Декоратор Аргумент Description
описание строка Укажите описания переменной.
Экспорт ничего Указывает, что переменная доступна для импорта другим файлом Bicep.

Декораторы находятся в пространстве имен sys. Если вам важно, чтобы декоратор не путался с другими элементами с таким же именем, добавьте к нему префикс sys. Например, если файл Bicep содержит переменную с именем description, необходимо добавить пространство имен sys при использовании декоратора описания .

Description

Чтобы добавить объяснение, добавьте описание в объявление переменной. Например:

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

Текст в формате Markdown можно использовать для текста описания.

Экспорт (Export)

Используется @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 создает уникальное значение из идентификатора группы ресурсов. Значения сцепляются в строку.

Переменные конфигурации

Вы можете определить переменные, содержащие связанные значения для настройки среды. Переменная определяется как объект со значениями. В следующем примере показан объект, содержащий значения для двух сред — test и prod. Передайте одно из этих значений во время развертывания.

@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

Следующие шаги