Regra de Linter - use valores explícitos para parâmetros de localização do módulo

Esta regra localiza parâmetros de módulo que são usados para locais de recursos e podem inadvertidamente usar como padrão um valor inesperado.

Código da regra de linha

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

explicit-values-for-loc-params

Solução

Quando você consome um módulo, quaisquer parâmetros relacionados ao local que tenham um valor padrão devem receber um valor explícito. Os parâmetros relacionados ao local incluem parâmetros que têm uma referência de resourceGroup().location valor padrão ou deployment().location também qualquer parâmetro que é referenciado a partir da propriedade location de um recurso.

Um parâmetro que assume como padrão o local de um grupo de recursos ou 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 se os recursos do modelo principal não estiverem localizados na mesma região que o grupo de recursos.

Exemplos

O exemplo a seguir falha neste teste. O parâmetro do módulo m1não recebe um valor explícito, portanto, o padrão é resourceGroup().location, conforme especificado em module1.bicep.location Mas usar o local do grupo de recursos pode não ser o comportamento pretendido, uma vez que outros recursos em main.bicep podem ser criados em um local diferente do local do grupo de recursos.

main.bicep:

param location string = 'eastus'

module m1 'module1.bicep' = {
 name: 'm1'
}

resource storageaccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

módulo1.bíceps:

param location string = resourceGroup().location

resource stg 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'stg'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Você pode corrigir a falha passando explicitamente um valor para a propriedade do location 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@2022-09-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Próximos passos

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