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().location
zie 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:
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.