Правило Linter — не жестко закодированные расположения
Это правило находит использование значений расположения Azure, которые не параметризованы.
Код правила анализатора кода
Для настройки параметров правил укажите в файле конфигурации Bicep следующее значение:
no-hardcoded-location
Решение
Пользователи шаблонов могут иметь ограниченный доступ к регионам, в которых они могут создавать ресурсы. Расположение жестко закодированного ресурса может заблокировать создание ресурса пользователями, что не позволит им использовать шаблон. Если указать параметр location, в котором по умолчанию задано расположение группы ресурсов, пользователи смогут использовать значение по умолчанию, если это удобно, но также указать другое расположение.
Вместо того, чтобы использовать жестко закодированную строку или значение переменной, используйте параметр, строку "global" или выражение (но не resourceGroup().location
или не см. no-loc-expr-outside-paramsdeployment().location
). Существует следующая рекомендация: чтобы задать расположения ресурсов, шаблон должен иметь строковый параметр с именем location
. По умолчанию этому параметру может быть назначена группа ресурсов или расположение развертывания (resourceGroup().location
или deployment().location
).
В следующем примере происходит сбой этого теста, так как свойство location
ресурса использует строковый литерал:
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: 'westus'
}
Эту ошибку можно исправить, создав новый строковый параметр location
(он может иметь значение по умолчанию — в качестве такого значения часто используется resourceGroup().location):
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Используйте быстрое исправление , чтобы создать параметр расположения и заменить строковый литерал именем параметра. Экран должен выглядеть так:
В следующем примере происходит сбой этого теста, так как свойство location
ресурса использует переменную со строковым литералом.
var location = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
Для исправления этой ошибки превратите переменную в параметр:
param location string = 'westus'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
location: location
}
В следующем примере происходит сбой этого теста, так как строковый литерал передается в параметр модуля, который, в свою очередь, используется для свойства location
ресурса:
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: 'westus'
}
}
где module1.bicep представляет собой:
param location string
resource storageaccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storageaccount'
location: location
kind: 'StorageV2'
sku: {
name: 'Premium_LRS'
}
}
Чтобы исправить эту ошибку, можно создать новый параметр для значения:
param location string // optionally with a default value
module m1 'module1.bicep' = {
name: 'module1'
params: {
location: location
}
}
Следующие шаги
Дополнительные сведения об анализаторе кода Bicep см. в разделе Использование анализатора кода Bicep.