Udostępnij za pośrednictwem


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 Linter

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, uniemożliwiając 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 to locationresourceGroup().location lub deployment().location zamiast używać tych funkcji w innym miejscu szablonu, 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
}

Możesz naprawić błąd, tworząc właściwość domyślną locationresourceGroup().location i używając 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 programu 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.

Nazwy 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 lintera, zobacz Use Bicep linter (Używanie lintera Bicep).