Sdílet prostřednictvím


Pravidlo Linteru – žádná pevně zakódovaná umístění

Toto pravidlo najde použití hodnot umístění Azure, které nejsou parametrizovány.

Kód pravidla Linteru

K přizpůsobení nastavení pravidel použijte v konfiguračním souboru Bicep následující hodnotu:

no-hardcoded-location

Řešení

Uživatelé šablon mohou mít omezený přístup k oblastem, kde mohou vytvářet prostředky. Pevně zakódované umístění prostředků může uživatelům blokovat vytváření prostředku, což jim brání v používání šablony. Poskytnutím parametru umístění, který je výchozím nastavením umístění skupiny prostředků, můžou uživatelé použít výchozí hodnotu, pokud je to vhodné, ale také zadat jiné umístění.

Místo použití pevně zakódovaného řetězce nebo hodnoty proměnné použijte parametr, řetězec "global" nebo výraz (ale ne resourceGroup().location nebo , viz no-loc-expr-outside-paramsdeployment().location). Osvědčený postup navrhuje nastavit umístění vašich prostředků, šablona by měla mít řetězcový parametr s názvem location. Tento parametr může ve výchozím nastavení použít skupinu prostředků nebo umístění nasazení (resourceGroup().location nebo deployment().location).

Následující příklad tento test selže, protože vlastnost prostředku location používá řetězcový literál:

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

Můžete ho opravit vytvořením nového location parametru řetězce (který může mít volitelně výchozí hodnotu – resourceGroup().location se často používá jako výchozí):

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

Pomocí rychlé opravy vytvořte parametr umístění a nahraďte řetězcový literál názvem parametru. Viz následující snímek obrazovky:

Snímek obrazovky s upozorněním na pravidlo linteru bez pevně zakódovaného umístění pomocí rychléhofixu

Následující příklad tento test selže, protože vlastnost prostředku location používá proměnnou s řetězcovým literálem.

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

Můžete ho opravit tak, že proměnnou převedete na parametr:

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

Následující příklad tento test selže, protože řetězcový literál se předává parametru modulu, který se zase používá pro vlastnost prostředku location :

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

kde module1.bicep je:

param location string

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

Chybu můžete opravit vytvořením nového parametru pro hodnotu:

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

Další kroky

Další informace o linteru naleznete v tématu Použití linter Bicep.