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:
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.