Regra de linter – Usar valores explícitos para parâmetros de localização de módulo
Essa regra localiza parâmetros de módulo que são usados para localização de recursos e podem usar como padrão um valor inesperado.
Código de regra linter
Use o seguinte valor no arquivo de configuração Bicep para personalizar as configurações de regra:
explicit-values-for-loc-params
Solução
Quando você consome um módulo, todos os parâmetros relacionados à localização que têm um valor padrão devem receber um valor explícito. Os parâmetros relacionados à localização incluem aqueles que têm um valor padrão referenciando resourceGroup().location
ou deployment().location
e também qualquer parâmetro referenciado de uma propriedade de localização de um recurso.
Um parâmetro que assume como padrão a localização de um grupo de recursos ou da implantação é conveniente quando um arquivo bicep é usado como um modelo de implantação principal. No entanto, quando esse valor padrão é usado em um módulo, ele pode causar um comportamento inesperado quando os recursos do modelo principal não estão localizados na mesma região que o grupo de recursos.
Exemplos
O exemplo a seguir reprova neste teste. O parâmetro m1
do módulo location
não recebe um valor explícito, portanto, o padrão é resourceGroup().location
, conforme especificado em module1.bicep. Mas o uso da localização do grupo de recursos pode não ser o comportamento pretendido, pois outros recursos em main.bicep podem ser criados em uma localização que não seja a do grupo de recursos.
main.bicep:
param location string = 'eastus'
module m1 'module1.bicep' = {
name: 'm1'
}
resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
module1.bicep:
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2024-03-01' = {
name: 'stg'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Você pode corrigir a falha passando explicitamente um valor para a propriedade location
do módulo:
main.bicep:
param location string = 'eastus'
module m1 'module1.bicep' = {
name: 'm1'
params: {
location: location // An explicit value will override the default value specified in module1.bicep
}
}
resource storageaccount 'Microsoft.Storage/storageAccounts@2024-03-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
Próximas etapas
Para saber mais sobre o linter, confira Usar o linter do Bicep.