Condividi tramite


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.