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

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

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

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

Определение переменной

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

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.

Использование переменной

В следующем примере показано, как использовать переменную для свойства ресурса. Вы ссылаетесь на значение переменной, указав имя переменной: storageName.

param rgLocation string
param storageNamePrefix string = 'STG'

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

resource demoAccount 'Microsoft.Storage/storageAccounts@2021-02-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

Дальнейшие действия