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:
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.