Reguła lintera — brak wyrażeń lokalizacji poza wartościami domyślnymi parametrów

Ta reguła znajduje resourceGroup().location lub deployment().location jest używana poza wartością domyślną parametru.

Kod reguły lintera

Użyj następującej wartości w pliku konfiguracji Bicep , aby dostosować ustawienia reguły:

no-loc-expr-outside-params

Rozwiązanie

resourceGroup().location i deployment().location powinny być używane tylko jako wartość domyślna parametru.

Użytkownicy szablonów mogą mieć ograniczony dostęp do regionów, w których mogą tworzyć zasoby. Wyrażenia resourceGroup().location lub deployment().location mogą blokować użytkowników, jeśli grupa zasobów lub wdrożenie zostało utworzone w regionie, do którego użytkownik nie może uzyskać dostępu, co uniemożliwia im korzystanie z szablonu.

Najlepsze rozwiązanie sugeruje, że aby ustawić lokalizacje zasobów, szablon powinien mieć parametr ciągu o nazwie location. Jeśli domyślnie parametr ma location wartość resourceGroup().location lub deployment().location zamiast używać tych funkcji w innym miejscu w szablonie, użytkownicy szablonu mogą używać wartości domyślnej, gdy jest to wygodne, ale także określić inną lokalizację w razie potrzeby.

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

Ten błąd można naprawić, tworząc właściwość domyślną location dla parametru resourceGroup().location i zamiast tego użyj tego nowego parametru:

param location string = resourceGroup().location

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

Poniższy przykład kończy się niepowodzeniem tego testu, ponieważ location jest używany resourceGroup().location , ale nie jest parametrem:

  var location = resourceGroup().location

Błąd można naprawić, zamieniając zmienną w parametr:

  param location string  = resourceGroup().location

Jeśli używasz Azure PowerShell do wdrożenia w subskrypcji, grupie zarządzania lub dzierżawie, użyj nazwy parametru innej niż location. Polecenia New-AzDeployment, New-AzManagementGroupDeployment i New-AzTenantDeployment mają parametr o nazwie location. Ten parametr polecenia powoduje konflikt z parametrem w pliku Bicep. Ten konflikt można uniknąć, używając nazwy takiej jak rgLocation.

Nazwę parametru można użyć location podczas wdrażania w grupie zasobów, ponieważ polecenie New-AzResourceGroupDeployment nie ma parametru o nazwie location.

Następne kroki

Aby uzyskać więcej informacji na temat linter, zobacz Use Bicep linter (Używanie lintera Bicep).