Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para, opcionalmente, implantar um recurso ou módulo no Bicep, use a expressão if. Uma expressão if inclui uma condição que é resolvida como true ou false. Quando a condição if for verdadeira, o recurso será implantado. Quando o valor for false, o recurso não será criado. Você só pode aplicar o valor a todo o recurso ou módulo.
Aviso
A implantação condicional não é propagada para os recursos filhos. Para implantar condicionalmente um recurso e seus recursos filhos, aplique a mesma condição a cada tipo de recurso.
O código de diagnóstico Bicep BCP318 ocorre quando você tenta acessar uma propriedade em um recurso condicional que pode ser nulo se o recurso não for implantado. Para suprimir o aviso ou impedir uma exceção de runtime, use o operador de perdão nulo ou o operador de desreferência segura. Para obter mais informações, consulte BCP318.
Definir condição para implantação
No Bicep, você pode implantar condicionalmente um recurso passando um parâmetro que especifica se o recurso é implantado. Teste a condição com uma expressão if na declaração de recurso. O exemplo a seguir mostra a sintaxe de uma expressão if em um arquivo Bicep. Ele implanta condicionalmente uma zona DNS (Sistema de Nomes de Domínio). Quando deployZone é true, ele implanta a zona DNS. Quando deployZone é false, ele ignora a implantação da zona DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
O exemplo a seguir implanta condicionalmente um módulo:
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Você pode usar condições com declarações de dependência. Para dependências explícitas, o Azure Resource Manager as remove automaticamente das dependências necessárias quando o recurso não é implantado. Para dependências implícitas, fazer referência a uma propriedade de um recurso condicional é permitido, mas pode produzir um erro de implantação.
Recurso novo ou existente
Você pode usar a implantação condicional para criar um recurso novo ou usar um existente. O exemplo a seguir mostra como implantar uma nova conta de armazenamento ou usar uma conta de armazenamento existente.
param storageAccountName string
param location string = resourceGroup().location
@allowed([
'new'
'existing'
])
param newOrExisting string = 'new'
resource saNew 'Microsoft.Storage/storageAccounts@2025-06-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
resource saExisting 'Microsoft.Storage/storageAccounts@2025-06-01' existing = if (newOrExisting == 'existing') {
name: storageAccountName
}
output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)
Quando o parâmetro newOrExisting é definido como novo, a condição é avaliada como true. A conta de armazenamento é implantada. Caso contrário, a conta de armazenamento existente será usada.
Aviso
Se você fizer referência a um recurso implantado condicionalmente, mas o recurso não for implantado, você receberá um erro. A mensagem de erro indica que o recurso não está definido no modelo.
Funções de runtime
Se você usar uma função de referência ou lista com um recurso especificado para implantação condicional, a função será avaliada. Se o recurso não for implantado, você receberá um erro.
Use a expressão condicional?: operador para garantir que a função seja avaliada apenas para as condições quando o recurso for implantado. O modelo de exemplo a seguir mostra como usar essa função com expressões que só são válidas condicionalmente.
param vmName string
param location string
param logAnalytics string = ''
resource vmName_omsOnboarding 'Microsoft.Compute/virtualMachines/extensions@2025-04-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')
Próximas etapas
- Para ver recomendações sobre como criar arquivos Bicep, consulte Práticas recomendadas para Bicep.
- Para criar várias instâncias de um recurso, consulte loops iterativos no Bicep.