Udostępnij za pośrednictwem


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 m1nie ma przypisanej jawnej wartości, więc domyślnie jest resourceGroup().locationto 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).