Предоставление значений с помощью файлов параметров

Завершено

В предыдущих уроках вы предоставляли значения параметров в командной строке при создании развертывания. Этот метод отлично подходит для создания и тестирования файлов Bicep, но он не подойдет для большого количества параметров или автоматизации развертывания. Из этого урока вы узнаете о различных способах установки значений параметров.

Примечание.

Команды в этом уроке демонстрируют основные понятия. На этом этапе не выполняйте команды. Вскоре вы поупражняетесь с полученными знаниями.

Создание файлов параметров

Файлы параметров позволяют легко указать значения параметров в виде набора. В файле параметров укажите значения для параметров в Bicep-файле. Такие файлы создаются на языке JSON (нотация объектов JavaScript). Вы можете предоставить файл параметров при развертывании шаблона Bicep. Вот как выглядит файл параметров:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    },
    "cosmosDBAccountLocations": {
      "value": [
        {
          "locationName": "australiaeast"
        },
        {
          "locationName": "southcentralus"
        },
        {
          "locationName": "westeurope"
        }
      ]
    }
  }
}

Рассмотрим каждую часть этого файла более подробно:

  • $schema указывает Azure Resource Manager на то, что этот файл является файлом параметров.
  • contentVersion — это свойство, которое можно использовать для отслеживания значительных изменений в файле параметров. Обычно для него задано значение по умолчанию — 1.0.0.0.
  • В разделе parameters приведены все параметры и значения, которые необходимо использовать. Значение параметра должно быть указано в виде объекта. Объект имеет свойство value, которое определяет фактическое значение параметра для использования.

Как правило, файл параметров создается для каждой среды. Рекомендуется включить имя среды в имя файла параметров. Например, у вас может быть файл параметров с именем main.parameters.dev.json для среды разработки и файл параметров main.parameters.production.json для рабочей среды.

Примечание.

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

Использование файлов параметров при развертывании

При создании развертывания с помощью команды az deployment group create вы можете указать имя файла параметров, который нужно использовать, с помощью аргумента --parameters:

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json

При создании развертывания с помощью командлета New-AzResourceGroupDeployment вы можете указать имя файла параметров, который нужно использовать, с помощью аргумента -TemplateParameterFile:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json

Переопределение значений параметров

Вы узнали о трех способах указания значений параметров: использование значений по умолчанию, командной строки и файлов параметров. Обычно для указания разных значений для одного и того же параметра используются разные способы. Вы уже ознакомились с этим подходом при работе со значениями по умолчанию. Если вы создали для параметра значение по умолчанию, а потом указали другое значение с помощью командной строки, приоритет имеет значение, заданное с помощью командной строки. Рассмотрим, где файлы параметров находятся в этом порядке приоритета.

Diagram that shows the order of precedence for parameter values. Parameter files override default values, and command-line parameter values override parameter files.

На схеме видно, что значения в файлах параметров переопределяют значения по умолчанию, а значения параметров, заданные с помощью командной строки, переопределяют значения в файлах параметров.

Давайте посмотрим, как работает этот подход. Ниже приведен пример файла Bicep, в котором определены три параметра со значениями по умолчанию:

param location string = resourceGroup().location
param appServicePlanInstanceCount int = 1
param appServicePlanSku object = {
  name: 'F1'
  tier: 'Free'
}

Рассмотрим файл параметров, в котором переопределены значения двух параметров, но не указано значение для параметра location:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    }
  }
}

При создании развертывания также переопределяется значение для appServicePlanInstanceCount. Как и в случае с файлами параметров, используется аргумент --parameters, но значение, которое необходимо переопределить, добавляется отдельно:

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json \
               appServicePlanInstanceCount=5

При создании развертывания переопределяется одно из значений параметров. Имя параметра нужно указать в виде аргумента командлета:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json `
  -appServicePlanInstanceCount 5

Рассмотрим, какие значения будут использоваться.

Параметр Значение Объяснение
location Расположение группы ресурсов. В файле Bicep для этого параметра задано значение по умолчанию, и оно не переопределено.
appServicePlanSku Объект со свойством name, для которого задано значение P1v3, и tier со значением PremiumV3. Значение по умолчанию в файле Bicep переопределяется значением, указанным в файле параметров.
appServicePlanInstanceCount 5 Значение, указанное во время развертывания, переопределяет значение по умолчанию и значение в файле параметров.

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