Развертывание файлов Bicep с помощью Azure PowerShell

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

Предварительные условия

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

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

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

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

Azure CLI версии 2.76.0 или более поздней и Azure PowerShell версии 13.4.0 или более поздней представляют параметр ValidationLevel, чтобы определить, насколько тщательно ARM проверяет шаблон Bicep в ходе этого процесса. Дополнительные сведения см. в разделе "Что если"

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

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

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

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

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

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

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Чтобы развернуть локальный Bicep-файл, используйте -TemplateFile параметр в команде развертывания:

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile <path-to-bicep>

Развертывание может занять несколько минут.

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

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

Параметры

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

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

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

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleString "inline string" `
  -exampleArray $arrayParam

Вы можете использовать параметр TemplateParameterObject для передачи хэш-таблицы, содержащей параметры для шаблона.

$params = @{
  exampleString = "inline string"
  exampleArray = "value1", "value2"
}

New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -TemplateParameterObject $params

Вы также можете получить содержимое файла и указать это содержимое как встроенный параметр:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

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

Если необходимо передать массив объектов, создайте хэш-таблицы в Azure PowerShell и добавьте их в массив. Передайте этот массив в качестве параметра во время развертывания:

$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-bicep> `
  -exampleArray $subnetArray

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

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

Файл параметров Bicep можно использовать с Azure PowerShell версии 10.4.0 или выше и Bicep CLI версии 0.22.X или выше для развертывания Bicep-файла. using Используя оператор в файле параметров Bicep, не требуется указывать переключатель -TemplateFile, когда вы указываете файл параметров Bicep для параметра -TemplateParameterFile.

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

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateParameterFile storage.bicepparam

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

Файл параметров JSON может быть локальным или внешним файлом с доступным универсальным кодом ресурса (URI).

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

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\BicepFiles\storage.bicep `
  -TemplateParameterFile c:\BicepFiles\storage.parameters.json

Чтобы передать файл внешних параметров, используйте параметр TemplateParameterUri.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\BicepFiles\storage.bicep `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json

Так как параметр TemplateParameterUri поддерживает только файлы параметров JSON, он не поддерживает .bicepparam файлы.

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

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

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

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

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

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

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

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

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

$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix

Или добавьте значение даты:

$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"

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

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

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

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

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

Сведения о том, как определить параметры в файле, см. в разделе "Общие сведения о структуре и синтаксисе файлов Bicep".