Compartilhar via


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.