Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы по желанию развернуть ресурс или модуль в Bicep, используйте выражение if
.
if
Выражение включает условие, определяющее истинность или ложность.
if
Если условие имеет значение true, ресурс развертывается. Если значение false, ресурс не создан. Значение можно применить только ко всему ресурсу или модулю.
Примечание.
Условное развертывание не распространяется каскадом на дочерние ресурсы. Если требуется условно развернуть ресурс и его дочерние ресурсы, необходимо применить одно и то же условие к каждому типу ресурсов.
Обучающие материалы
Если вы предпочитаете изучать условия с пошаговыми инструкциями, обратитесь к Созданию гибких шаблонов Bicep с помощью условий и циклов.
Определение условия развертывания
В Bicep можно условно развернуть ресурс, передав параметр, который определяет, нужно ли развернуть ресурс. Проверьте условие при помощи if
выражения в объявлении ресурса. В следующем примере показан синтаксис выражения if
в файле Bicep. Он условно развертывает зону доменных имен (DNS). Когда deployZone
— true
, он развертывает зону DNS. Если deployZone
является false
, он пропускает развертывание зоны DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
Следующий пример условно развертывает модуль:
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Условия можно использовать с объявлениями зависимостей. Для явных зависимостей Azure Resource Manager автоматически удаляет их из необходимых зависимостей, когда ресурс не развернут. Для неявных зависимостей ссылка на свойство условного ресурса разрешена, но может привести к ошибке развертывания.
Новый или существующий ресурс
Вы можете воспользоваться условным развертыванием, чтобы создать новый ресурс или использовать существующий. В следующем примере показано, как развернуть новую учетную запись хранения или использовать существующую учетную запись хранения.
param storageAccountName string
param location string = resourceGroup().location
@allowed([
'new'
'existing'
])
param newOrExisting string = 'new'
resource saNew 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource saExisting 'Microsoft.Storage/storageAccounts@2023-04-01' existing = if (newOrExisting == 'existing') {
name: storageAccountName
}
output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)
Если для параметра newOrExisting
задано значение new, условие принимает значение true. Учетная запись хранения развертывается. В противном случае используется существующая учетная запись хранения.
Предупреждение
Если вы ссылаетесь на условно развернутый ресурс, но ресурс не развернут, вы получите ошибку. Сообщение об ошибке указывает, что ресурс не определен в шаблоне.
Функции времени выполнения
Если вы используете функцию ссылки или списка вместе с ресурсом, который вы указываете для условного развертывания, функция будет оценена. Если ресурс не развернут, вы получите ошибку.
Используйте условное выражение ?: оператор, чтобы убедиться, что функция вычисляется только для условий при развертывании ресурса. В следующем примере шаблона показано использование этой функции с выражениями, которые являются только условно допустимыми.
param vmName string
param location string
param logAnalytics string = ''
resource vmName_omsOnboarding 'Microsoft.Compute/virtualMachines/extensions@2024-03-01' = if (!empty(logAnalytics)) {
name: '${vmName}/omsOnboarding'
location: location
properties: {
publisher: 'Microsoft.EnterpriseCloud.Monitoring'
type: 'MicrosoftMonitoringAgent'
typeHandlerVersion: '1.0'
autoUpgradeMinorVersion: true
settings: {
workspaceId: ((!empty(logAnalytics)) ? reference(logAnalytics, '2022-10-01').customerId : null)
}
protectedSettings: {
workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2022-10-01').primarySharedKey : null)
}
}
}
output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')
Следующие шаги
- Рекомендации по созданию файлов Bicep см. в статье Рекомендации по использованию Bicep.
- Чтобы создать несколько экземпляров ресурса, см. итеративные циклы в Bicep.