若要选择在 Bicep 中部署资源或模块,请使用 if
表达式。
if
表达式包含解析为 true 或 false 的条件。 当 if
条件为 true 时,将部署资源。 如果值为 false,则未创建该资源。 值只能应用到整个资源或模块。
备注
条件部署不会级联到子资源。 如果要有条件地部署资源及其子资源,需要对每种资源类型应用相同的条件。
在 Bicep 中,可以通过传入指定是否部署资源的参数来有条件地部署资源。 使用 if
资源声明中的表达式测试条件。 以下示例显示了 Bicep 文件中 if
表达式的语法。 它有条件地部署域名系统(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 资源管理器会自动将其从所需的依赖项中删除。 对于隐式依赖项,允许引用条件资源的属性,但可能会生成部署错误。
可以使用条件部署来创建新资源或使用现有资源。 以下示例演示如何部署新的存储帐户或使用现有存储帐户。
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 中的迭代循环。