Развертывание ресурсов с помощью Bicep и Azure CLI

В этой статье объясняется, как использовать Azure CLI и файлы Bicep для развертывания ресурсов в Azure. Если вы не знакомы с концепциями развертывания решений Azure и управления ими, см. статью Общие сведения о Bicep.

Необходимые компоненты

Необходимо иметь файл Bicep для развертывания. Файл должен быть локальным.

Вам требуется интерфейс Azure CLI и подключение к Azure:

  • Установите команды Azure CLI на локальный компьютер. Для развертывания файлов Bicep требуется интерфейс командной строки Azure версии 2.20.0 или более поздней.
  • Подключитесь к Azure командой az login. Если у вас несколько подписок Azure, выполните также команду az account set.

Примеры для Azure CLI написаны для оболочки bash. Чтобы запустить этот пример в Windows PowerShell или командной строке, может потребоваться изменить элементы скрипта.

Если у вас не установлен интерфейс командной строки Azure, можно использовать Cloud Shell. Дополнительные сведения см. в статье Развертывание файлов Bicep из Azure Cloud Shell.

Необходимые разрешения

Для развертывания файла Bicep или шаблона ARM необходим доступ с правом записи для развертываемых ресурсов и доступ ко всем операциям с типом ресурсов Microsoft.Resources/deployments. Например, для развертывания виртуальной машины необходимы разрешения Microsoft.Compute/virtualMachines/write и Microsoft.Resources/deployments/*. Операция what-if имеет те же требования к разрешениям.

Список ролей и разрешений см. в статье Встроенные роли Azure.

Область развертывания

Вы можете нацелить развертывание на группу ресурсов, подписку, группу управления или клиента. В зависимости от области развертывания используются разные команды.

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

Развертывание локального файла Bicep

Развертывание файла Bicep можно выполнять с локального компьютера или из внешнего хранилища. В этом разделе описывается развертывание локального файла Bicep.

Если развертывание выполняется в несуществующей группе ресурсов, создайте группу ресурсов. Имя группы ресурсов может содержать только буквы, цифры, точки, знаки подчеркивания, дефисы и скобки. Оно может содержать до 90 знаков и Имя не может заканчиваться точкой.

az group create --name ExampleGroup --location "Central US"

Чтобы развернуть локальный файл Bicep, используйте --template-file параметр в команде развертывания. В рассмотренном ниже примере также демонстрируется настройка значений параметра.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file <path-to-bicep> \
  --parameters storageAccountType=Standard_GRS

Развертывание может занять несколько минут. По завершении появится сообщение, содержащее результат:

"provisioningState": "Succeeded",

Развертывание удаленного файла Bicep

В настоящее время Azure CLI не поддерживает развертывание файлов Bicep из удаленного расположения. Вы можете применить Bicep CLI для сборки файла Bicep в шаблон JSON, а затем отправить JSON-файл в удаленное расположение. Дополнительные сведения см. в разделе "Развертывание удаленных шаблонов JSON ARM".

Параметры

Для передачи значений параметров можно использовать встроенные параметры или файл параметров. Файл параметров может быть файлом параметров Bicep или файлом параметров JSON.

Встроенные параметры

Чтобы передать встроенные параметры, укажите значения в parameters. Например, строки и массив передаются в файл Bicep из оболочки Bash следующим образом.

az deployment group create \
  --resource-group testgroup \
  --template-file <path-to-bicep> \
  --parameters exampleString='inline string' exampleArray='["value1", "value2"]'

Если вы используете Azure CLI в командной строке Windows (CMD) или PowerShell, передайте массив в формате: exampleArray="['value1','value2']".

Можно также получить содержимое файла и предоставлять его в виде встроенного параметра. Добавьте к имени файла @.

az deployment group create \
  --resource-group testgroup \
  --template-file <path-to-bicep> \
  --parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json

Получение значения параметра из файла полезно в тех случаях, когда есть необходимость предоставить значения конфигурации. Например, вы можете предоставить значения cloud-init для виртуальной машины Linux.

Файл ArrayContent.json имеет следующий формат:

[
  "value1",
  "value2"
]

Чтобы передать объект, например, для установки тегов, используйте JSON. Например, файл Bicep может содержать параметр, подобный приведенному ниже:

"resourceTags": {
  "type": "object",
  "defaultValue": {
    "Cost Center": "IT Department"
  }
}

В этом случае можно передать строку JSON, чтобы задать параметр, как показано в следующем bash-скрипте:

tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
az deployment group create --name addstorage  --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"

Поместите строку JSON, которую необходимо передать в объект, в двойные кавычки.

Если вы используете Azure CLI в командной строке Windows (CMD) или PowerShell, передайте объект в следующем формате:

$tags="{'Owner':'Contoso','Cost Center':'2345-324'}"
az deployment group create --name addstorage  --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags=$tags

Для хранения значений параметров можно использовать переменную. В Bash задайте для переменной все значения параметров и добавьте ее в команду развертывания.

params="prefix=start suffix=end"

az deployment group create \
  --resource-group testgroup \
  --template-file <path-to-bicep> \
  --parameters $params

Однако если вы используете Azure CLI в командной строке Windows (CMD) или PowerShell, задайте для переменной строку JSON. Не используйте двойные кавычки: $params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'.

Оценка параметров следует последовательному порядку, что означает, что если значение назначено несколько раз, используется только последнее назначенное значение. Чтобы обеспечить правильное назначение параметров, рекомендуется сначала предоставить файл параметров и выборочно переопределить определенные параметры с помощью синтаксиса KEY=VALUE . Важно упоминание, что если вы предоставляете bicepparam файл параметров, этот аргумент можно использовать только один раз.

Файлы параметров Bicep

Вместо передачи параметров в качестве встроенных значений в скрипте может быть проще использовать файл параметров, файл параметров Bicep или файл параметров JSON, содержащий значения параметров. Файл параметров должен быть локальным файлом. Файлы внешних параметров не поддерживаются в Azure CLI. Дополнительные сведения о файле параметров см. в разделе "Создание файла параметров Resource Manager".

С помощью Azure CLI версии 2.53.0 или более поздней версии и Bicep CLI версии 0.22.X или более поздней можно развернуть файл Bicep, используя файл параметров Bicep. using При использовании инструкции в файле параметров Bicep не требуется предоставлять --template-file параметр при указании файла параметров Bicep для коммутатора--parameters. --template-file Включение параметра приведет к ошибке "Допускается только шаблон Bicep с ошибкой Bicepparam".

В следующем примере показан файл параметров с именем storage.bicepparam. Этот файл находится в том же каталоге, где выполняется команда.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --parameters storage.bicepparam

Файлы параметров JSON

В следующем примере показан файл параметров с именем storage.parameters.json. Этот файл находится в том же каталоге, где выполняется команда.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.bicep \
  --parameters '@storage.parameters.json'

Дополнительные сведения о файле параметров см. в разделе "Создание файла параметров Resource Manager".

Встроенные параметры и файл параметров расположения можно использовать в той же операции развертывания. Дополнительные сведения см. в разделе "Приоритет параметров".

Просмотр изменений

Перед развертыванием файла Bicep можно просмотреть изменения, которые он внесет в окружение. Используйте операцию "что если", чтобы убедиться в том, что необходимые изменения будут внесены. С помощью операции "что если" можно также проверить файл Bicep на наличие ошибок.

Развертывание спецификации шаблона

В настоящее время Azure CLI не поддерживает создание спецификаций шаблонов с использованием файлов Bicep. Однако можно создать файл Bicep с помощью ресурса Microsoft.Resources/templateSpecs для развертывания спецификации шаблона. Чтобы узнать, как создать спецификацию шаблона в файле Bicep, см. пример создания спецификации шаблона. Вы также можете выполнить сборку файла Bicep в формат JSON с помощью интерфейса командной строки Bicep, а затем создать спецификацию шаблона на основе шаблона JSON.

Deployment name (Имя развертывания)

При развертывании файла Bicep ему можно присвоить имя. Это имя можно использовать, чтобы получить нужное развертывание из журнала развертываний. Если имя не указано, по умолчанию используется имя файла Bicep. Например, если вы развертываете файл Bicep main.bicep и не указываете имя развертывания, развертывание будет называться main.

Каждый раз при выполнении развертывания в журнал развертывания группы ресурсов добавляется запись с именем развертывания. Если запустить другое развертывание и присвоить ему такое же имя, то предыдущая запись будет заменена текущим развертыванием. Если требуется создать уникальные записи в журнале развертывания, присвойте каждому развертыванию уникальное имя.

Чтобы создать уникальное имя, можно добавить к нему случайное число.

deploymentName='ExampleDeployment'$RANDOM

Также можно добавить дату.

deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")

При выполнении параллельных развертываний в одной группе ресурсов с тем же именем развертывания завершается только последнее развертывание. Все развертывания с тем же именем, которые не были завершены, заменяются последним развертыванием. Например, если вы запускаете развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage1 и в то же время запускает другое развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage2, развертывается только одна учетная запись хранения. Созданная учетная запись хранения получает имя storage2.

Однако если вы запустите развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage1, и сразу после завершения работы запустите другое развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage2, то будут созданы две учетные записи хранения. Одна получит имя storage1, а другая — storage2. Но в журнал развертывания будет внесена только одна запись.

Если для каждого развертывания указано уникальное имя, их можно запускать параллельно без возникновения конфликтов. Например, если вы запустите развертывание с именем newStorage1, которое развертывает учетную запись хранения с именем storage1, и в то же время запустите другое развертывание с именем newStorage2, которое развертывает учетную запись хранения с именем storage2, будут созданы две учетные записи хранения и две записи в журнале развертывания.

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

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