Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы по желанию развернуть ресурс или модуль в Bicep, используйте выражение if
.
if
Выражение включает условие, разрешающее значение true или false.
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.