Поделиться через


Правило анализатора кода — не использовать выражения расположения, отличающиеся от значений параметров по умолчанию

Это правило обнаруживает, что resourceGroup().location или deployment().location отличаются от значения параметра по умолчанию.

Код правила анализатора кода

Для настройки параметров правил укажите в файле конфигурации Bicep следующее значение:

no-loc-expr-outside-params

Решение

resourceGroup().location и deployment().location должны использоваться только в качестве значения параметра по умолчанию.

Пользователи шаблонов могут иметь ограниченный доступ к регионам, в которых они могут создавать ресурсы. Выражения resourceGroup().location или deployment().location могут блокировать пользователей, если группа ресурсов или развертывание было созданы в регионе, к которому пользователь не может получить доступ, что не позволяет ему использовать шаблон.

Существует следующая рекомендация: чтобы задать расположения ресурсов, шаблон должен иметь строковый параметр с именем location. Если параметр location по умолчанию имеет значение resourceGroup().location или deployment().location, а не использует этих функции в другом месте шаблона, пользователи шаблона могут применять такое значение по умолчанию, если это удобно. Но при необходимости можно указать другое расположение.

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

Для исправления ошибки можно создать свойство location, которое по умолчанию имеет значение resourceGroup().location, и использовать этот новый параметр.

param location string = resourceGroup().location

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

Следующий пример не проходит этот тест, так как locationиспользует resourceGroup().location, но не является параметром.

  var location = resourceGroup().location

Для исправления этой ошибки превратите переменную в параметр:

  param location string  = resourceGroup().location

Если вы выполняете развертывание в подписке, группе управления или клиенте с помощью Azure PowerShell, имя параметра должно отличаться от location. Параметр с именем location используется в командах New-AzDeployment, New-AzManagementGroupDeployment и New-AzTenantDeployment, поэтому он конфликтует с параметром в вашем файле Bicep. Чтобы избежать конфликта, используйте другое имя, например rgLocation.

Вы можете использовать имя location при развертывании в группе ресурсов, так как у New-AzResourceGroupDeployment нет параметра с именем location.

Следующие шаги

Дополнительные сведения об анализаторе кода Bicep см. в разделе Использование анализатора кода Bicep.