Reguła lintera — używanie jawnych wartości dla parametrów lokalizacji modułu
Ta reguła znajduje parametry modułu, które są używane dla lokalizacji zasobów i mogą przypadkowo spowodować nieoczekiwaną wartość.
Kod reguły Linter
Użyj następującej wartości w pliku konfiguracji Bicep, aby dostosować ustawienia reguły:
explicit-values-for-loc-params
Rozwiązanie
W przypadku korzystania z modułu wszystkie parametry związane z lokalizacją, które mają wartość domyślną, powinny mieć przypisaną jawną wartość. Parametry związane z lokalizacją obejmują parametry, które mają wartość domyślną odwołującą resourceGroup().location
się do lub deployment().location
także dowolny parametr, do którego odwołuje się właściwość lokalizacji zasobu.
Parametr domyślny lokalizacji grupy zasobów lub wdrożenia jest wygodny, gdy plik bicep jest używany jako główny szablon wdrożenia. Jednak jeśli taka wartość domyślna jest używana w module, może to spowodować nieoczekiwane zachowanie, jeśli zasoby szablonu głównego nie znajdują się w tym samym regionie co grupa zasobów.
Przykłady
Poniższy przykład kończy się niepowodzeniem tego testu. Parametr modułu m1
nie ma przypisanej jawnej wartości, więc domyślnie jest resourceGroup().location
to parametr , jak określono w module1.bicep.location
Jednak użycie lokalizacji grupy zasobów może nie być zamierzonym zachowaniem, ponieważ inne zasoby w pliku main.bicep mogą być tworzone w innej lokalizacji niż lokalizacja grupy zasobów.
main.bicep:
param location string = 'eastus'
module m1 'module1.bicep' = {
name: 'm1'
}
resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
module1.bicep:
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2024-03-01' = {
name: 'stg'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Błąd można naprawić, jawnie przekazując wartość dla właściwości modułu location
:
main.bicep:
param location string = 'eastus'
module m1 'module1.bicep' = {
name: 'm1'
params: {
location: location // An explicit value will override the default value specified in module1.bicep
}
}
resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
Następne kroki
Aby uzyskać więcej informacji na temat lintera, zobacz Use Bicep linter (Używanie lintera Bicep).