Regla de Linter: sin ubicaciones codificadas de forma rígida

Esta regla busca los usos de los valores de ubicación de Azure que no están parametrizados.

Código de regla de linter

Use el valor siguiente del archivo de configuración de Bicep para personalizar los valores de regla:

no-hardcoded-location

Soluciones

Los usuarios de plantilla pueden tener acceso limitado a las regiones donde pueden crear recursos. Una ubicación de recursos codificada de forma rígida puede impedir que los usuarios creen un recurso, lo que les impide usar la plantilla. Al proporcionar un parámetro location cuyo valor predeterminado es la ubicación del grupo de recursos, los usuarios pueden usar el valor predeterminado cuando sea conveniente, pero también especificar otra ubicación.

En lugar de usar un valor de cadena o variable codificado de forma rígida, use un parámetro, la cadena "global" o una expresión (que no sea resourceGroup().location o deployment().location; vea no-loc-expr-outside-params). El procedimiento recomendado sugiere que, para establecer las ubicaciones de los recursos, la plantilla debe tener un parámetro de cadena denominado location. Este parámetro puede tener como valor predeterminado el grupo de recursos o la ubicación de implementación (resourceGroup().location o deployment().location).

En el ejemplo siguiente, no se supera la prueba porque la propiedad location del recurso usa un literal de cadena:

  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: 'westus'
  }

Puede corregirlo mediante la creación de un nuevo parámetro de cadena location. Opcionalmente, puede tener un valor predeterminado: resourceGroup().location se usa con frecuencia como valor predeterminado:

  param location string = resourceGroup().location
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

Use Corrección rápida para crear un parámetro de ubicación y reemplazar el literal de cadena por el nombre del parámetro. Vea la siguiente captura de pantalla:

Captura de pantalla de la advertencia de regla de linter de ubicación no codificada con corrección rápida.

En el ejemplo siguiente, no se supera la prueba porque la propiedad location del recurso usa una variable con un literal de cadena.

  var location = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

Para corregirlo, puede convertir la variable en un parámetro:

  param location string = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
      location: location
  }

En el ejemplo siguiente, no se supera la prueba porque se pasa un literal de cadena a un parámetro de módulo que a su vez se usa para la propiedad location de un recurso:

module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: 'westus'
  }
}

donde module1.bicep es:

param location string

resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Para corregir el error, cree un nuevo parámetro para el valor:

param location string // optionally with a default value
module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: location
  }
}

Pasos siguientes

Para obtener más información acerca de linter, consulte Uso de linter de Bicep.