Partager via


Règle de linter – aucun emplacement codé en dur

Cette règle recherche les utilisations des valeurs d’emplacement Azure qui ne sont pas paramétrables.

Code de règle de linter

Utilisez la valeur suivante dans le fichier config Bicep pour personnaliser les paramètres de règle :

no-hardcoded-location

Solution

Les utilisateurs de modèle peuvent avoir un accès limité aux régions où ils peuvent créer des ressources. Un emplacement de ressource codé en dur peut empêcher les utilisateurs de créer une ressource, ce qui les empêche également d’utiliser le modèle. En fournissant un paramètre d'emplacement qui correspond par défaut à l'emplacement du groupe de ressources, les utilisateurs peuvent utiliser la valeur par défaut quand cela leur convient, mais aussi spécifier un autre emplacement.

Au lieu d’utiliser une valeur de chaîne ou de variable codée en dur, utilisez un paramètre, la chaîne « global » ou une expression (l’expression ne doit pas être resourceGroup().location ou deployment().location, consultez no-loc-expr-outside-params). Une bonne pratique suggère que, pour définir les emplacements de vos ressources, votre modèle doit avoir un paramètre de chaîne nommé location. Ce paramètre peut avoir comme valeur par défaut le groupe de ressources ou l’emplacement de déploiement (resourceGroup().location ou deployment().location).

L’exemple suivant échoue à ce test, car la propriété location de la ressource utilise un littéral de chaîne :

  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: 'westus'
  }

Vous pouvez résoudre ce problème en créant un paramètre de chaîne location (qui peut éventuellement avoir une valeur par défaut – resourceGroup().location est fréquemment utilisé comme valeur par défaut) :

  param location string = resourceGroup().location
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

Utilisez le correctif rapide pour créer un paramètre d’emplacement et remplacer le littéral de chaîne par le nom du paramètre. Voir la capture d’écran suivante :

La capture d'écran du correctif rapide de la règle de linter de l'absence d'emplacement codé en dur.

L’exemple suivant échoue à ce test, car la propriété location de la ressource utilise une variable avec un littéral de chaîne.

  var location = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

Vous pouvez résoudre ce problème en transformant la variable en un paramètre :

  param location string = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

L’exemple suivant échoue à ce test, car un littéral de chaîne est transmis à un paramètre de module qui est utilisé à son tour pour la propriété location d’une ressource :

module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: 'westus'
  }
}

où module1.bicep est :

param location string

resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Vous pouvez résoudre le problème en créant un nouveau paramètre pour la valeur :

param location string // optionally with a default value
module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: location
  }
}

Étapes suivantes

Pour plus d’informations sur le linter, consultez Utiliser le linter Bicep.