Freigeben über


Linterregel: Verwenden expliziter Werte für Modulspeicherortparameter

Mit dieser Regel werden Modulparameter gefunden, die für Ressourcenspeicherorte verwendet werden und unbeabsichtigt auf einen unerwarteten Wert festgelegt werden können.

Linter-Regelcode

Verwenden Sie den folgenden Wert in der Bicep-Konfigurationsdatei, um die Regeleinstellungen anzupassen:

explicit-values-for-loc-params

Lösung

Wenn Sie ein Modul nutzen, sollten allen speicherortbezogenen Parametern mit einem Standardwert ein expliziter Wert zugeordnet werden. Zu den speicherortbezogenen Parametern gehören Parameter, deren Standartwert auf resourceGroup().location oder deployment().location verweist, und auch Parameter, auf die von der Speicherorteigenschaft einer Ressource verwiesen wird.

Ein Parameter, der automatisch den Speicherort einer Ressourcengruppe oder einer Bereitstellung festlegt, ist nützlich, wenn eine Bicep-Datei als Hauptbereitstellungsvorlage verwendet wird. Wenn jedoch ein solcher Standardwert in einem Modul verwendet wird, kann es zu unerwartetem Verhalten kommen, wenn sich die Ressourcen der Hauptvorlage nicht in derselben Region befinden wie die Ressourcengruppe.

Beispiele

Im folgenden Beispiel ist der Test nicht erfolgreich. Dem Parameter location des Moduls m1 wird kein expliziter Wert zugewiesen, weshalb er automatisch wie in module1.bicep angegeben auf resourceGroup().location festgelegt wird. Die Verwendung des Speicherorts der Ressourcengruppe ist jedoch möglicherweise nicht das beabsichtigte Verhalten, da andere Ressourcen in main.bicep möglicherweise an einem anderen Speicherort als dem Speicherort der Ressourcengruppe erstellt werden.

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'
  }
}

Sie können den Fehler beheben, indem Sie einen Wert für die location-Eigenschaft des Moduls explizit übergeben:

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'
  }
}

Nächste Schritte

Weitere Informationen über den Linter finden Sie unter Verwendung des Bicep-Linters.