Partager via


Règle de linter – utiliser des valeurs explicites pour les paramètres d’emplacement de module

Cette règle recherche les paramètres de module utilisés pour les emplacements de ressources et peut par inadvertance avoir une valeur par défaut inattendue.

Code de règle de linter

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

explicit-values-for-loc-params

Solution

Quand vous consommez un module, une valeur explicite doit être affectée à tous les paramètres liés à l’emplacement qui ont une valeur par défaut. Les paramètres liés à l’emplacement incluent les paramètres qui ont une valeur par défaut référençant resourceGroup().location ou deployment().location, ainsi que tout paramètre référencé à partir de la propriété d’emplacement d’une ressource.

Un paramètre qui a comme valeur par défaut l’emplacement d’un groupe de ressources ou d’un déploiement convient lorsqu’un fichier bicep est utilisé comme modèle de déploiement principal. Toutefois, quand une telle valeur par défaut est utilisée dans un module, elle peut provoquer un comportement inattendu si les ressources du modèle principal ne se trouvent pas dans la même région que le groupe de ressources.

Exemples

L’exemple suivant échoue à ce test. Aucune valeur explicite n’est affectée au paramètre location du module m1. Par conséquent, il est défini par défaut sur resourceGroup().location, tel que spécifié dans module1.bicep. Toutefois, l’utilisation de l’emplacement du groupe de ressources peut ne pas être le comportement prévu, car d’autres ressources dans main.bicep peuvent être créées dans un emplacement différent de l’emplacement du groupe de ressources.

main.bicep :

param location string = 'eastus'

module m1 'module1.bicep' = {
 name: 'm1'
}

resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

module1.bicep :

param location string = resourceGroup().location

resource stg 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'stg'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Vous pouvez résoudre le problème en passant explicitement une valeur pour la propriété location du module :

main.bicep :

param location string = 'eastus'

module m1 'module1.bicep' = {
  name: 'm1'
  params: {
   location: location // An explicit value will override the default value specified in module1.bicep
  }
}

resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Étapes suivantes

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