Freigeben über


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:

Screenshot: Linterregelwarnung aufgrund von hartcodiertem Standort mit Option für schnelle Problembehebung

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.