Regra de linter – Sem localizações embutidas em código
Essa regra localiza usos de valores de localização do Azure que não estão parametrizados.
Código de regra linter
Use o seguinte valor no arquivo de configuração Bicep para personalizar as configurações de regra:
no-hardcoded-location
Solução
Os usuários do modelo podem ter acesso limitado a regiões em que podem criar recursos. Uma localização de recurso embutida em código pode impedir que os usuários criem um recurso, portanto, impedindo que eles usem o modelo. Ao fornecer um parâmetro de local que usa como padrão o local do grupo de recursos, os usuários podem usar o valor padrão quando for conveniente, mas também especificar um local diferente.
Em vez de usar uma cadeia de caracteres ou um valor de variável embutido em código, use um parâmetro, a cadeia de caracteres 'global' ou uma expressão (mas não resourceGroup().location
nem deployment().location
. Confira no-loc-expr-outside-params). A prática recomendada é que, para definir a localização dos recursos, o modelo deve ter um parâmetro de cadeia de caracteres chamado location
. Esse parâmetro pode usar como padrão a localização do grupo de recursos ou da implantação (resourceGroup().location
ou deployment().location
).
O seguinte exemplo falha neste teste porque a propriedade location
do recurso usa um literal de cadeia de caracteres:
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: 'westus'
}
Corrija isso criando um parâmetro de cadeia de caracteres location
(que pode ter um valor padrão opcional. Geralmente, resourceGroup().location é 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 o literal de cadeia de caracteres pelo nome do parâmetro. Veja a seguinte captura de tela:
O exemplo a seguir falha neste teste porque a propriedade location
do 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
}
Corrija isso transformando a variável em um parâmetro:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
O seguinte exemplo falha neste teste porque um literal de cadeia de caracteres está sendo passado para um parâmetro de módulo que será usado para a propriedade location
de um recurso:
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: 'westus'
}
}
em que module1.bicep é:
param location string
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Corrija a falha criando um parâmetro para o valor:
param location string // optionally with a default value
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: location
}
}
Próximas etapas
Para saber mais sobre o linter, confira Usar o linter do Bicep.