Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per distribuire facoltativamente una risorsa o un modulo in Bicep, usare l'espressione if
. Un'espressione if
include una condizione che viene risolta in true o false. Quando la condizione if
è true, la risorsa viene distribuita. Quando il valore è false, la risorsa non viene creata. È possibile applicare il valore solo all'intera risorsa o modulo.
Nota
La distribuzione condizionale non si propaga a catena alle risorse figlio. Per distribuire in modo condizionale una risorsa e le relative risorse figlio, è necessario applicare la stessa condizione a ciascun tipo di risorsa.
Risorse di formazione
Se si preferisce ottenere informazioni sulle condizioni tramite istruzioni dettagliate, vedere Creare file Bicep flessibili usando condizioni e cicli.
Definire la condizione per la distribuzione
In Bicep è possibile distribuire in modo condizionale una risorsa passando un parametro che specifica se la risorsa viene distribuita. Testare la condizione con un'espressione if
nella dichiarazione di risorsa. Nell'esempio seguente, viene illustrata la sintassi di un'espressione if
in un file Bicep. Distribuisce in modo condizionale una zona DNS (Domain Name System). Quando deployZone
è true
, distribuisce la zona DNS. Quando deployZone
è false
, non effettua la distribuzione della zona DNS.
param deployZone bool
resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
name: 'myZone'
location: 'global'
}
L'esempio seguente distribuisce in modo condizionale un modulo:
param deployZone bool
module dnsZone 'dnszones.bicep' = if (deployZone) {
name: 'myZoneModule'
}
È possibile usare condizioni con dichiarazioni di dipendenza. Per le dipendenze esplicite, Azure Resource Manager li rimuove automaticamente dalle dipendenze necessarie quando la risorsa non viene distribuita. Per le dipendenze implicite, è consentito fare riferimento a una proprietà di una risorsa condizionale, ma potrebbe generare un errore di distribuzione.
Risorsa nuova o esistente
È possibile usare la distribuzione condizionale per creare una nuova risorsa o usarne una esistente. L'esempio seguente illustra come distribuire un nuovo account di archiviazione o usare un account di archiviazione esistente.
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)
Quando il parametro newOrExisting
è impostato su nuovo, la condizione restituisce true. L'account di archiviazione viene distribuito. In caso contrario, viene usato l'account di archiviazione esistente.
Avviso
Se si fa riferimento a una risorsa distribuita in modo condizionale ma la risorsa non viene distribuita, viene visualizzato un errore. Il messaggio di errore indica che la risorsa non è definita nel modello.
Funzioni di runtime
Se si usa una funzione di riferimento o elenco con una risorsa specificata per la distribuzione condizionale, la funzione viene valutata. Se la risorsa non viene distribuita, viene visualizzato un errore.
Usare l'espressione condizionale ?: operatore per assicurarsi che la funzione venga valutata solo per le condizioni quando la risorsa viene distribuita. Il modello di esempio seguente illustra come usare questa funzione con espressioni valide solo in modo condizionale.
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')
Passaggi successivi
- Per consigli sulla creazione di file Bicep, vedere Procedure consigliate per Bicep.
- Per creare più istanze di una risorsa, vedere Cicli iterativi in Bicep.