Linter-regel - geen vastgelegde locaties

Met deze regel vindt u het gebruik van Azure-locatiewaarden die niet zijn 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 voorkomen dat gebruikers een resource kunnen maken, waardoor ze de sjabloon niet kunnen gebruiken. Door een locatieparameter op te geven die standaard wordt ingesteld op de locatie van de resourcegroep, kunnen gebruikers de standaardwaarde gebruiken wanneer dit handig is, 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().location, zie no-loc-expr-outside-params). Aanbevolen procedure is dat als u de locaties van uw resources wilt instellen, uw sjabloon een tekenreeksparameter met de naam locationmoet hebben. Deze parameter kan standaard worden ingesteld op de resourcegroep of implementatielocatie (resourceGroup().location of deployment().location).

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

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

U kunt dit oplossen door een nieuwe location tekenreeksparameter te maken (die optioneel een standaardwaarde kan hebben- resourceGroup().location wordt vaak als standaard gebruikt):

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

Gebruik Snelle oplossing om een locatieparameter te maken en vervang de letterlijke tekenreeks door de parameternaam. Zie de volgende schermafbeelding:

De schermafbeelding van de waarschuwing geen harde locatie-linterregel met quickfix.

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

  var location = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-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@2021-02-01' = {
      location: location
  }

In het volgende voorbeeld is deze test mislukt 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 is:

param location string

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

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

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.