Implantação condicional no Bicep
Às vezes, você precisa implantar um recurso ou módulo no Bicep. Use a palavra-chave if para especificar se o recurso ou módulo foi implantado. O valor da condição é resolvido como true ou false. Quando o valor for true, o recurso será criado. Quando o valor for false, o recurso não será criado. O valor só pode ser aplicado para o recurso ou módulo inteiro.
Observação
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.
Microsoft Learn
Se você preferir aprender sobre condições por meio de diretrizes passo a passo, confira Criar modelos Bicep flexíveis usando condições e loops no Microsoft Learn.
Condição de implantação
Você pode transmitir um valor de parâmetro que indica se um recurso foi implantado. O exemplo a seguir implanta condicionalmente uma zona DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = if (deployZone) {
name: 'myZone'
location: 'global'
}
O próximo exemplo implanta condicionalmente um módulo.
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
As condições podem ser usadas com declarações de dependência. Para dependências explícitas, o Azure Resource Manager o remove automaticamente das dependências obrigató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 existente.
param storageAccountName string
param location string = resourceGroup().location
@allowed([
'new'
'existing'
])
param newOrExisting string = 'new'
resource sa 'Microsoft.Storage/storageAccounts@2019-06-01' = if (newOrExisting == 'new') {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Quando o parâmetro newOrExisting é definido como novo, a condição é avaliada como true. A conta de armazenamento é implantada. No entanto, quando newOrExisting é definido como existente, a condição é avaliada como false e a conta de armazenamento não é implantada.
Funções de runtime
Ao usar uma função de referência ou de lista com um recurso implantado condicionalmente, a função é avaliada mesmo quando o recurso não é implantado. Você receberá um erro se a função se referir a um recurso que não existe.
Use o operador expressão condicional ?: para garantir que a função só seja avaliada quanto às condições quando o recurso estiver 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@2017-03-30' = 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, '2015-11-01-preview').customerId : null)
}
protectedSettings: {
workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2015-11-01-preview').primarySharedKey : null)
}
}
}
output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')
Próximas etapas
- Para um módulo do Microsoft Learn sobre condições e loops, consulte Criar modelos Bicep flexíveis usando condições e loops.
- 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.