Partilhar via


Regra de Linter - sem locais codificados

Esta regra localiza usos de valores de local do Azure que não são parametrizados.

Código da regra de linha

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

no-hardcoded-location

Solução

Os usuários de modelo podem ter acesso limitado a regiões onde podem criar recursos. Um local de recurso codificado pode impedir que os usuários criem um recurso, impedindo-os de usar o modelo. Ao fornecer um parâmetro de local que assume como padrão o local do grupo de recursos, os usuários podem usar o valor padrão quando conveniente, mas também especificar um local diferente.

Em vez de usar uma string codificada ou um valor de variável, use um parâmetro, a string 'global' ou uma expressão (mas não resourceGroup().location ou , veja no-loc-expr-outside-paramsdeployment().location). As práticas recomendadas sugerem que, para definir os locais dos recursos, o modelo deve ter um parâmetro de cadeia de caracteres chamado location. Esse parâmetro pode usar como padrão o grupo de recursos ou o local de implantação (resourceGroup().location ou deployment().location).

O exemplo a seguir falha nesse teste porque a propriedade do location recurso usa um literal de cadeia de caracteres:

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

Você pode corrigi-lo criando um novo location parâmetro string (que opcionalmente pode ter um valor padrão - resourceGroup().location é frequentemente usado como padrão):

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

Use a Correção Rápida para criar um parâmetro de local e substituir a cadeia de caracteres literal pelo nome do parâmetro. Veja a captura de ecrã abaixo:

A captura de tela de Nenhum aviso de regra de linter de localização codificada com correção rápida.

O exemplo a seguir falha nesse teste porque a propriedade do location recurso usa uma variável com um literal de cadeia de caracteres.

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

Você pode corrigi-lo transformando a variável em um parâmetro:

  param location string = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

O exemplo a seguir falha nesse teste porque um literal de cadeia de caracteres está sendo passado para um parâmetro de módulo que, por sua vez, é usado para a propriedade de location um recurso:

module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: 'westus'
  }
}

onde module1.bicep é:

param location string

resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Você pode corrigir a falha criando um novo parâmetro para o valor:

param location string // optionally with a default value
module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: location
  }
}

Próximos passos

Para obter mais informações sobre o linter, consulte Usar binter linter.