Regola Linter: nessuna espressione di posizione al di fuori dei valori predefiniti dei parametri
Questa regola trova resourceGroup().location
o deployment().location
usato all'esterno di un valore predefinito di un parametro.
Codice regola Linter
Usa il valore seguente nel file di configurazione Bicep per personalizzare le impostazioni delle regole:
no-loc-expr-outside-params
Soluzione
resourceGroup().location
e deployment().location
deve essere usato solo come valore predefinito di un parametro.
Gli utenti del modello possono avere accesso limitato alle aree in cui possono creare risorse. Le espressioni resourceGroup().location
o deployment().location
potrebbero bloccare gli utenti se si ha creato il gruppo di risorse o la distribuzione macchina virtuale in un'area a cui l'utente non può accedere, impedendo così l'uso del modello.
La procedura consigliata suggerisce che per impostare le posizioni delle risorse, il modello deve avere un parametro stringa denominato location
. Se si imposta come predefinito il parametro location
su resourceGroup().location
o deployment().location
invece di usare queste funzioni altrove nel modello, gli utenti del modello possono usare il valore predefinito quando è utile, ma anche specificare una posizione diversa quando necessario.
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: resourceGroup().location
}
È possibile correggere l'errore creando una proprietà location
impostata come predefinito su resourceGroup().location
e usare questo nuovo parametro:
param location string = resourceGroup().location
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
L'esempio seguente non riesce in questo test perché location
usa resourceGroup().location
ma non è un parametro:
var location = resourceGroup().location
È possibile correggere l'errore trasformando la variabile in un parametro:
param location string = resourceGroup().location
Se si usa Azure PowerShell per eseguire la distribuzione in una sottoscrizione, in un gruppo di gestione o in un tenant, è necessario usare un nome di parametro diverso da location
. I comandi New-AzDeployment, New-AzManagementGroupDeployment e New-AzTenantDeployment hanno un parametro denominato location
. Questo parametro di comando è in conflitto con il parametro nel file Bicep. È possibile evitare questo conflitto usando un nome come rgLocation
.
È possibile usare location
per un nome di parametro durante la distribuzione in un gruppo di risorse, perché New-AzResourceGroupDeployment non ha un parametro denominato location
.
Passaggi successivi
Per altre informazioni su linter, vedi Usare linter di Bicep.