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


Правило Linter — не жестко закодированные расположения

Это правило находит использование значений расположения Azure, которые не параметризованы.

Замечание

Это правило отключено по умолчанию. Измените уровень в bicepconfig.json , чтобы включить его.

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

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

no-hardcoded-location

Решение

Пользователи шаблонов могут иметь ограниченный доступ к регионам, в которых они могут создавать ресурсы. Расположение жестко закодированного ресурса может заблокировать создание ресурса пользователями, что не позволит им использовать шаблон. Указав параметр расположения, используемый по умолчанию для расположения группы ресурсов, пользователи могут использовать значение по умолчанию, если удобно, но также указать другое расположение.

Вместо того, чтобы использовать жестко закодированную строку или значение переменной, используйте параметр, строку "global" или выражение (но не resourceGroup().location или deployment().locationне см. no-loc-expr-outside-params). Рекомендуется задать расположения ресурсов, шаблон должен иметь строковый параметр с именем location. Этот параметр может по умолчанию использовать группу ресурсов или расположение развертывания (resourceGroup().location или deployment().location).

Следующий пример завершается сбоем этого теста, так как свойство ресурса location использует строковый литерал:

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

Его можно исправить, создав новый location строковый параметр (который может иметь значение по умолчанию — resourceGroup().location часто используется в качестве значения по умолчанию):

param location string = resourceGroup().location

resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'stg${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

Используйте быстрое исправление , чтобы создать параметр расположения и заменить строковый литерал именем параметра. См. следующий снимок экрана:

Снимок экрана: предупреждение о некодированном расположении с кратким описанием правила linter.

В следующем примере завершается сбой этого теста, так как свойство ресурса 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.