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

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

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

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

Требуется Azure PowerShell подключение к Azure:

  • Установите командлеты Azure PowerShell на локальном компьютере. Для развертывания файлов Bicep требуется Azure PowerShell версии 5.6.0 или более поздней. Дополнительные сведения см. в статье Начало работы с Azure PowerShell.
  • Установите Bicep CLI. Azure PowerShell не устанавливает Bicep CLI автоматически. Вместо этого необходимо вручную установить Bicep CLI.
  • Подключитесь к Azure с помощью командлета Connect-AzAccount. Если у вас несколько подписок Azure, выполните также командлет Set-AzContext. См. дополнительные сведения в статье Use multiple Azure subscriptions (Использование нескольких подписок Azure).

Если у вас не установлен 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.

Если развертывание выполняется в несуществующей группе ресурсов, создайте группу ресурсов. Имя группы ресурсов может содержать только буквы, цифры, точки, знаки подчеркивания, дефисы и скобки. Оно может содержать до 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

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

$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.

Если необходимо передать массив объектов, создайте хэш-таблицы в 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

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

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

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

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

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

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

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

Чтобы передать файл локальных параметров, используйте 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 не поддерживает .bicepparam файлы, он поддерживает только файлы параметров JSON.

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

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

Перед развертыванием файла 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, будут созданы две учетные записи хранения и две записи в журнале развертывания.

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

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