Linter-Regel: Keine hartcodierten Speicherorte
Diese Regel ermittelt Azure-Standortwerte, die nicht parametrisiert sind.
Linter-Regelcode
Verwenden Sie den folgenden Wert in der Bicep-Konfigurationsdatei, um die Regeleinstellungen anzupassen:
no-hardcoded-location
Lösung
Vorlagenbenutzer haben möglicherweise eingeschränkten Zugriff auf Regionen, in denen sie Ressourcen erstellen können. Ein hartcodierter Ressourcenspeicherort kann Benutzer daran hindern, eine Ressource zu erstellen, sodass sie die Vorlage nicht verwenden können. Wenn Sie einen location-Parameter angeben, der als Standardwert den Standort der Ressourcengruppe aufweist, können die Benutzer den Standardwert verwenden oder einen anderen Standort angeben.
Verwenden Sie anstelle eines hartcodierten Zeichenfolgen- oder Variablenwerts einen Parameter, die Zeichenfolge „global“ oder einen Ausdruck (aber nicht resourceGroup().location
oder deployment().location
, siehe no-loc-expr-outside-params). Die bewährte Methode schlägt vor, dass Ihre Vorlage zum Festlegen des Speicherorts Ihrer Ressourcen einen Zeichenfolgenparameter namens location
enthalten sollte. Dieser Parameter ist möglicherweise standardmäßig auf die Ressourcengruppe oder den Bereitstellungsspeicherort (resourceGroup().location
oder deployment().location
) festgelegt.
Im folgenden Beispiel tritt bei diesem Test ein Fehler auf, da die Eigenschaft location
der Ressource ein Zeichenfolgenliteral verwendet:
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: 'westus'
}
Sie können dies beheben, indem Sie einen neuen location
-Zeichenfolgenparameter erstellen, der optional einen Standardwert aufweisen kann. Häufig wird „resourceGroup().location“ als Standardwert verwendet:
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Verwenden Sie Schnelle Problembehebung, um einen Standortparameter zu erstellen und das Zeichenfolgenliteral durch den Parameternamen zu ersetzen. Der folgende Screenshot zeigt dies:
Im folgenden Beispiel tritt bei diesem Test ein Fehler auf, da die Eigenschaft location
der Ressource eine Variable mit einem Zeichenfolgenliteral verwendet.
var location = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Sie können den Fehler beheben, indem Sie die Variable in einen Parameter umwandeln:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Im folgenden Beispiel tritt bei diesem Test ein Fehler auf, da ein Zeichenfolgenliteral an einen Modulparameter übergeben wird, der wiederum für die Eigenschaft location
einer Ressource verwendet wird:
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: 'westus'
}
}
Dabei wird für „module1.bicep“ Folgendes verwendet:
param location string
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Sie können den Fehler beheben, indem Sie einen neuen Parameter für den Wert erstellen:
param location string // optionally with a default value
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: location
}
}
Nächste Schritte
Weitere Informationen über den Linter finden Sie unter Verwendung des Bicep-Linters.