Delen via


Linter-regel - geen vastgelegde locaties

Deze regel vindt gebruik van Azure-locatiewaarden die niet worden geparameteriseerd.

Linter-regelcode

Gebruik de volgende waarde in het Bicep-configuratiebestand om regelinstellingen aan te passen:

no-hardcoded-location

Oplossing

Sjabloongebruikers hebben mogelijk beperkte toegang tot regio's waar ze resources kunnen maken. Een vastgelegde resourcelocatie kan verhinderen dat gebruikers een resource maken, waardoor ze de sjabloon niet kunnen gebruiken. Door een locatieparameter op te geven die standaard is ingesteld op de locatie van de resourcegroep, kunnen gebruikers de standaardwaarde gebruiken wanneer ze handig zijn, maar ook een andere locatie opgeven.

In plaats van een vastgelegde tekenreeks of variabele waarde te gebruiken, gebruikt u een parameter, de tekenreeks 'global' of een expressie (maar niet resourceGroup().location of deployment().locationzie no-loc-expr-outside-params). Best practice stelt voor dat om de locaties van uw resources in te stellen, uw sjabloon een tekenreeksparameter moet hebben met de naam location. Deze parameter kan standaard de resourcegroep of implementatielocatie (resourceGroup().location of deployment().location).

In het volgende voorbeeld mislukt deze test omdat de eigenschap van location de resource een letterlijke tekenreeks gebruikt:

  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: 'westus'
  }

U kunt dit probleem oplossen door een nieuwe location tekenreeksparameter te maken (die eventueel een standaardwaarde heeft: resourceGroup().location wordt vaak gebruikt als standaardinstelling):

  param location string = resourceGroup().location
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

Gebruik Quick Fix om een locatieparameter te maken en de letterlijke tekenreeks te vervangen door de parameternaam. Zie de volgende schermafbeelding:

De schermopname van de waarschuwing voor de linterregel voor geen vastgelegde locatie met snelfix.

In het volgende voorbeeld mislukt deze test omdat de eigenschap van location de resource gebruikmaakt van een variabele met een letterlijke tekenreeks.

  var location = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

U kunt dit oplossen door de variabele om te zetten in een parameter:

  param location string = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

In het volgende voorbeeld mislukt deze test omdat een letterlijke tekenreeks wordt doorgegeven aan een moduleparameter die op zijn beurt wordt gebruikt voor de eigenschap van location een resource:

module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: 'westus'
  }
}

waarbij module1.bicep:

param location string

resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

U kunt de fout oplossen door een nieuwe parameter voor de waarde te maken:

param location string // optionally with a default value
module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: location
  }
}

Volgende stappen

Zie Bicep linter gebruiken voor meer informatie over de linter.