Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описано, как определять и использовать переменные в файле Bicep. Вы используете переменные для упрощения разработки файла Bicep. Вместо повторения сложных выражений по всему файлу Bicep вы определяете переменную, содержащую такое сложное выражение. Затем вы используете эту переменную по мере необходимости в файле Bicep.
Resource Manager разрешает переменные перед началом операций развертывания. Когда в файле Bicep используется переменная, Resource Manager заменяет ее разрешенным значением. В файле Bicep ограничено 512 переменными. Дополнительные сведения см. в разделе Ограничения шаблона.
Определение переменных
Имя переменной не может совпадать с именем параметра, модуля или ресурса. Для каждой переменной можно добавить один или несколько декораторов. Дополнительные сведения см. в разделе "Использование декораторов".
Нетипизированные переменные
При определении переменной без указания типа данных тип выводится из значения. Синтаксис определения нетипизированной переменной:
@<decorator>(<argument>)
var <variable-name> = <variable-value>
В следующем примере переменной присваивается строка.
var stringVar = 'preset variable'
При создании переменной можно использовать значение из параметра или другой переменной.
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"
}
Типизированные переменные
Начиная с интерфейса командной строки Bicep версии 0.36.X, Bicep поддерживает типизированные переменные, где вы явно объявляете тип данных переменной, чтобы обеспечить безопасность типов и повысить четкость кода. Преимущества типизированных переменных:
- Обнаружение ошибок: компилятор Bicep проверяет, соответствуют ли назначенные значения объявленному типу, перехватыв ошибки рано.
- Ясность кода: явные типы позволяют ясно, какие данные хранятся в переменной.
- Поддержка Intellisense: такие инструменты, как Visual Studio Code, обеспечивают лучшую автозавершение и проверку для типизированных переменных.
- Рефакторинг безопасности. Убедитесь, что изменения в назначениях переменных непреднамеренно нарушают ожидания типов.
Чтобы определить типированную переменную, используйте var
ключевое слово, за которым следует имя переменной, тип и назначенное значение:
var <variable-name> <data-type> = <variable-value>
В следующих примерах показано, как определить типизированные переменные:
var resourceName string = 'myResource'
var instanceCount int = 3
var isProduction bool = true
var tags object = { environment: 'dev' }
var subnets array = ['subnet1', 'subnet2']
Для object
типов можно определить схему для применения определенной структуры. Компилятор гарантирует, что объект соответствует определенной схеме.
var config {
name: string
count: int
enabled: bool
} = {
name: 'myApp'
count: 5
enabled: true
}
В следующем примере используются типизированные переменные с декораторами для принудительного применения ограничений:
@description('The environment to deploy to')
@allowed(['dev', 'test', 'prod'])
param environment string = 'dev'
var instanceCount int = environment == 'prod' ? 5 : 2
var resourcePrefix string = 'app'
var tags {
environment: string
deployedBy: string
} = {
environment: environment
deployedBy: 'Bicep'
}
resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: '${resourcePrefix}storage${instanceCount}'
location: 'westus'
tags: tags
kind: 'Storage'
sku: {
name: 'Standard_LRS'
}
}
В этом примере:
-
instanceCount
типизируется какint
и использует условное выражение. -
resourcePrefix
вводится какstring
. -
tags
типируется какobject
с определенной структурой.
Использование итеративных циклов
Для определения переменной можно использовать итеративные циклы. В следующем примере создается массив объектов с тремя свойствами.
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. Если вам важно, чтобы декоратор не путался с другими элементами с таким же именем, добавьте к нему префикс sys
. Например, если файл Bicep содержит переменную с именем description
, необходимо добавить пространство имен sys при использовании декоратора описания .
Описание
Чтобы добавить объяснение, добавьте описание в объявление переменной. Например:
@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)
Текст в формате Markdown можно использовать для текста описания.
Экспорт (Export)
Используется @export()
для совместного использования переменной с другими файлами Bicep. Дополнительные сведения см. в разделе "Экспорт переменных", "типы" и "Функции".
Переменные конфигурации
Вы можете определить переменные, содержащие связанные значения для настройки среды. Переменная определяется как объект со значениями. В следующем примере показан объект, содержащий значения для двух сред — 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
Следующие шаги
- Дополнительные сведения о доступных свойствах для переменных см. в статье Общие сведения о структуре и синтаксисе файлов Bicep.
- Дополнительные сведения об использовании синтаксиса циклов см. в статье Интерактивные циклы в Bicep.