Regola Linter : nessuna posizione hardcoded
Questa regola trova gli usi dei valori della posizione di Azure che non sono parametrizzati.
Codice regola Linter
Usa il valore seguente nel file di configurazione Bicep per personalizzare le impostazioni delle regole:
no-hardcoded-location
Soluzione
Gli utenti del modello possono avere accesso limitato alle aree in cui possono creare risorse. Una posizione di risorsa hardcoded potrebbe impedire agli utenti di creare una risorsa, impedendo così l'uso del modello. Specificando un parametro location che per impostazione predefinita corrisponde alla posizione del gruppo di risorse, gli utenti possono usare il valore predefinito quando è utile, ma specificare anche una posizione diversa.
Anziché usare una stringa hardcoded o un valore di variabile, usare un parametro, la stringa 'global' o un'espressione (ma non resourceGroup().location
o , vedere no-loc-expr-outside-paramsdeployment().location
). La procedura consigliata suggerisce che per impostare le posizioni delle risorse, il modello deve avere un parametro stringa denominato location
. Questo parametro può essere impostato per impostazione predefinita sul gruppo di risorse o sul percorso di distribuzione (resourceGroup().location
o deployment().location
).
L'esempio seguente non supera questo test perché la proprietà della location
risorsa usa un valore letterale stringa:
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: 'westus'
}
È possibile correggerlo creando un nuovo location
parametro stringa (che facoltativamente può avere un valore predefinito - resourceGroup().location viene spesso usato come predefinito:
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Usare Correzione rapida per creare un parametro location e sostituire il valore letterale stringa con il nome del parametro. Vedere lo screenshot seguente:
L'esempio seguente ha esito negativo per questo test perché la proprietà della location
risorsa usa una variabile con un valore letterale stringa.
var location = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
È possibile correggerlo trasformando la variabile in un parametro:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
L'esempio seguente ha esito negativo per questo test perché viene passato un valore letterale stringa a un parametro del modulo che a sua volta viene usato per la proprietà di location
una risorsa:
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: 'westus'
}
}
dove module1.bicep è:
param location string
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
È possibile correggere l'errore creando un nuovo parametro per il valore :
param location string // optionally with a default value
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: location
}
}
Passaggi successivi
Per altre informazioni su linter, vedi Usare linter di Bicep.