Linterregel – inga hårdkodade platser
Den här regeln hittar användning av Azure-platsvärden som inte är parametriserade.
Linterregelkod
Använd följande värde i Bicep-konfigurationsfilen för att anpassa regelinställningar:
no-hardcoded-location
Lösning
Mallanvändare kan ha begränsad åtkomst till regioner där de kan skapa resurser. En hårdkodad resursplats kan blockera användare från att skapa en resurs, vilket hindrar dem från att använda mallen. Genom att ange en platsparameter som är standard för resursgruppens plats kan användarna använda standardvärdet när det är praktiskt men även ange en annan plats.
I stället för att använda en hårdkodad sträng eller ett variabelvärde använder du en parameter, strängen "global" eller ett uttryck (men inte resourceGroup().location
eller , se no-loc-expr-outside-paramsdeployment().location
). Bästa praxis tyder på att mallen bör ha en strängparameter med namnet location
för att ange resursernas platser. Den här parametern kan som standard vara resursgruppen eller distributionsplatsen (resourceGroup().location
eller deployment().location
).
Följande exempel misslyckas med det här testet eftersom resursens location
egenskap använder en strängliteral:
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: 'westus'
}
Du kan åtgärda det genom att skapa en ny location
strängparameter (som kan ha ett standardvärde – resourceGroup().location används ofta som standard):
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Använd Snabbkorrigering för att skapa en platsparameter och ersätta strängliteralen med parameternamnet. Se följande skärmbild:
Följande exempel misslyckas med det här testet eftersom resursens location
egenskap använder en variabel med en strängliteral.
var location = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Du kan åtgärda det genom att omvandla variabeln till en parameter:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Följande exempel misslyckas med det här testet eftersom en strängliteral skickas till en modulparameter som i sin tur används för en resurss location
egenskap:
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: 'westus'
}
}
där module1.bicep är:
param location string
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Du kan åtgärda felet genom att skapa en ny parameter för värdet:
param location string // optionally with a default value
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: location
}
}
Nästa steg
Mer information om linter finns i Använda Bicep-linter.