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.