Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para implementar opcionalmente un recurso o módulo en Bicep, use la expresión if. Una expresión if incluye una condición que se resuelve en true o false. Cuando la condición if es true, se implementa el recurso. Cuando el valor es false, el recurso no se crea. Solo puede aplicar el valor a todo el recurso o módulo.
Advertencia
La implementación condicional no se aplica en cascada a los recursos secundarios. Si desea implementar condicionalmente un recurso y sus recursos secundarios, debe aplicar la misma condición a cada tipo de recurso.
El código de diagnóstico de Bicep BCP318 se produce cuando se intenta acceder a una propiedad en un recurso condicional que puede ser NULL si el recurso no está implementado. Para suprimir la advertencia o evitar una excepción en tiempo de ejecución, use el operador null-forgiving o el operador safe-dereference. Para obtener más información, consulte BCP318.
Definición de la condición para la implementación
En Bicep, puede implementar condicionalmente un recurso pasando un parámetro que especifica si se implementa el recurso. Pruebe la condición con una if expresión en la declaración de recursos. En el ejemplo siguiente se muestra la sintaxis de una expresión if en un archivo de Bicep. Implementa condicionalmente una zona del sistema de nombres de dominio (DNS). Cuando deployZone es true, implementa la zona DNS. Cuando deployZone es false, omite la implementación de la zona DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
En el ejemplo siguiente se implementa condicionalmente un módulo:
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
Las condiciones se pueden usar con declaraciones de dependencia. Para las dependencias explícitas, Azure Resource Manager los quita automáticamente de las dependencias necesarias cuando el recurso no se implementa. En el caso de las dependencias implícitas, se permite hacer referencia a una propiedad de un recurso condicional, pero podría producir un error de implementación.
Recurso nuevo o existente
Puede usar la implementación condicional para crear un recurso nuevo o usar uno existente. En el ejemplo siguiente se muestra cómo implementar una nueva cuenta de almacenamiento o usar una cuenta de almacenamiento 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)
Cuando el parámetro newOrExisting está establecido en new, la condición se evalúa como true. Se implementa la cuenta de almacenamiento. De lo contrario, se usa la cuenta de almacenamiento existente.
Advertencia
Si hace referencia a un recurso implementado condicionalmente, pero el recurso no está implementado, obtendrá un error. El mensaje de error indica que el recurso no está definido en la plantilla.
Funciones en tiempo de ejecución
Si usa una función de referencia o lista con un recurso que especifique para la implementación condicional, la función se evalúa. Si el recurso no está implementado, obtendrá un error.
Use el operador de expresión condicional ?: para asegurarse de que la función solo se evalúa para las condiciones cuando se implementa el recurso. En la plantilla de ejemplo siguiente se muestra cómo usar esta función con expresiones que solo son válidas bajo ciertas condiciones.
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')
Pasos siguientes
- Puede encontrar recomendaciones sobre cómo crear archivos de Bicep en Procedimientos recomendados para Bicep.
- Para crear varias instancias de un recurso, consulte Bucles iterativos en Bicep.