Reguła lintera — brak zakodowanych na stałe lokalizacji
Ta reguła znajduje użycie wartości lokalizacji platformy Azure, które nie są sparametryzowane.
Kod reguły Linter
Użyj następującej wartości w pliku konfiguracji Bicep, aby dostosować ustawienia reguły:
no-hardcoded-location
Rozwiązanie
Użytkownicy szablonów mogą mieć ograniczony dostęp do regionów, w których mogą tworzyć zasoby. Zakodowana na stałe lokalizacja zasobu może uniemożliwić użytkownikom tworzenie zasobu, co uniemożliwia im korzystanie z szablonu. Dostarczając parametr lokalizacji domyślnej lokalizacji do lokalizacji grupy zasobów, użytkownicy mogą używać wartości domyślnej, gdy jest to wygodne, ale także określa inną lokalizację.
Zamiast używać zakodowanego na stałe ciągu lub wartości zmiennej, użyj parametru, ciągu "global" lub wyrażenia (ale nie resourceGroup().location
lub , zobacz no-loc-expr-outside-paramsdeployment().location
). Najlepsze rozwiązanie sugeruje, że aby ustawić lokalizacje zasobów, szablon powinien mieć parametr ciągu o nazwie location
. Ten parametr może być domyślnie ustawiony na grupę zasobów lub lokalizację wdrożenia (resourceGroup().location
lub deployment().location
).
Poniższy przykład kończy się niepowodzeniem tego testu, ponieważ właściwość zasobu location
używa literału ciągu:
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: 'westus'
}
Można go naprawić, tworząc nowy location
parametr ciągu (który opcjonalnie może mieć wartość domyślną — resourceGroup().location jest często używany jako domyślny):
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Użyj szybkiej poprawki , aby utworzyć parametr lokalizacji i zastąpić literał ciągu nazwą parametru. Zobacz poniższy zrzut ekranu:
Poniższy przykład kończy się niepowodzeniem tego testu, ponieważ właściwość zasobu location
używa zmiennej z literałem ciągu.
var location = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Możesz rozwiązać ten problem, zamieniając zmienną w parametr:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Poniższy przykład kończy się niepowodzeniem tego testu, ponieważ literał ciągu jest przekazywany do parametru modułu, który jest z kolei używany dla właściwości zasobu location
:
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: 'westus'
}
}
gdzie module1.bicep to:
param location string
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Błąd można naprawić, tworząc nowy parametr dla wartości:
param location string // optionally with a default value
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: location
}
}
Następne kroki
Aby uzyskać więcej informacji na temat lintera, zobacz Use Bicep linter (Używanie lintera Bicep).