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@2023-04-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@2023-04-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:
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@2023-04-01' = {
location: location
}
Můžete ho opravit tak, že proměnnou převedete na parametr:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-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@2023-04-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.