Compartilhar via


Regra linter – sem expressões de localização fora dos valores padrão do parâmetro

Essa regra localiza o resourceGroup().location ou o deployment().location usado fora de um valor padrão do parâmetro.

Código de regra linter

Use o seguinte valor no arquivo de configuração Bicep para personalizar as configurações de regra:

no-loc-expr-outside-params

Solução

O resourceGroup().location e o deployment().location só devem ser usados como o valor padrão de um parâmetro.

Os usuários do modelo podem ter acesso limitado a regiões em que podem criar recursos. As expressões resourceGroup().location ou deployment().location podem bloquear os usuários, se a implantação ou o grupo de recursos foi criado em uma região que o usuário não pode acessar, impedindo que ele use o modelo.

A melhor prática sugere que, para definir a localização dos recursos, o modelo deve ter um parâmetro de cadeia de caracteres chamado location. Se o padrão do parâmetro location for resourceGroup().location ou deployment().location, em vez de usar essas funções em outro lugar no modelo, os usuários do modelo poderão usar o valor padrão quando oportuno, mas também especificar um local diferente quando necessário.

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

Você pode corrigir a falha criando uma propriedade location cujo padrão é resourceGroup().location e usar esse novo parâmetro:

param location string = resourceGroup().location

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

O exemplo a seguir falha nesse teste porque location está usando resourceGroup().location, mas não é um parâmetro:

  var location = resourceGroup().location

Você pode corrigir essa falha transformando a variável em um parâmetro:

  param location string  = resourceGroup().location

Se você estiver usando o Azure PowerShell para implantar em uma assinatura, grupo de gerenciamento ou locatário, use um nome de parâmetro diferente de location. Os comandos New-AzDeployment, New-AzManagementGroupDeployment e New-AzTenantDeployment têm um parâmetro chamado location. Esse parâmetro de comando entra em conflito com o parâmetro no arquivo Bicep. Você pode evitar esse conflito usando um nome como rgLocation.

Você pode usar location para um nome de parâmetro ao implantar em um grupo de recursos, porque New-AzResourceGroupDeployment não tem um parâmetro chamado location.

Próximas etapas

Para saber mais sobre o linter, confira Usar o linter do Bicep.