Dela via


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 locationfö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:

Skärmbilden av No hardcoded location linter rule warning with quickfix (Ingen hårdkodad platslinterregelvarning med quickfix).

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.