Condividi tramite


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:

Screenshot di Nessun avviso di regola linter di posizione hardcoded con prefisso rapido.

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.