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

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

Совет

Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Подробнее см. статью Развертывание ресурсов с помощью Bicep и Azure PowerShell.

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

Вам нужен шаблон для развертывания. Если у вас его еще нет, скачайте и сохраните Пример шаблона из репозитория шаблонов быстрого запуска Azure. В этой статье используется локальный файл с именем c:\MyTemplates\azuredeploy.json.

Необходимо установить Azure PowerShell и подключиться к Azure.

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

Если у вас не установлен PowerShell, можно использовать Azure Cloud Shell. Дополнительные сведения см. в статье Развертывание шаблонов ARM из Azure Cloud Shell.

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

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

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

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

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

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

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

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

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

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

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

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

Развертывание локального шаблона

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

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

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

Чтобы развернуть локальный шаблон, используйте параметр -TemplateFile в команде развертывания. В следующем примере также показано, как задать значение параметра, поступающих из шаблона.

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

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

Развертывание шаблона из удаленного расположения

Шаблоны ARM можно хранить не на локальном компьютере, а во внешнем расположении. Вы можете хранить шаблоны в репозитории системы управления версиями (например, GitHub). А также их можно хранить в учетной записи хранения Azure для общего доступа в организации.

Примечание.

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

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

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

Для развертывания внешнего шаблона используйте параметр -TemplateUri.

New-AzResourceGroupDeployment `
  -Name remoteTemplateDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json

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

Для развертывания связанных шаблонов из удаленных источников с относительным путем, которые хранятся в учетной записи хранилища, используйте параметр QueryString для указания маркера SAS:

New-AzResourceGroupDeployment `
  -Name linkedTemplateWithRelativePath `
  -ResourceGroupName "myResourceGroup" `
  -TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
  -QueryString "$sasToken"

Дополнительные сведения см. в разделе Использование относительного пути для связанных шаблонов.

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

Вместо развертывания локального или удаленного шаблона можно создать спецификацию шаблона. Спецификация шаблона — это ресурс в подписке Azure, который содержит шаблон ARM. Такой способ позволяет с легкостью обеспечить безопасный общий доступ к шаблону для пользователей вашей организации. Используйте управление доступом на основе ролей Azure (Azure RBAC), чтобы предоставлять доступ к спецификации шаблона. Сейчас эта функция доступна в предварительной версии.

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

Сначала создайте спецификацию шаблона, выбрав шаблон ARM.

New-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0 `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateJsonFile ./mainTemplate.json

Затем получите идентификатор для спецификации шаблона и разверните ее.

$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Versions.Id

New-AzResourceGroupDeployment `
  -ResourceGroupName demoRG `
  -TemplateSpecId $id

Дополнительные сведения см. в разделе Спецификации шаблона Azure Resource Manager.

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

Перед развертыванием шаблона можно просмотреть изменения, которые шаблон внесет в среду. Используйте операцию what-if, чтобы убедиться в том, что необходимые изменения будут внесены. Операция what-if также служит для проверки шаблона на наличие ошибок.

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

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

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

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

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

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

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -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-template> `
  -exampleArray $subnetArray

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

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

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

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

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile <path-to-template> `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

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

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

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

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

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

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

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

Дополнительные сведения о файле параметров Bicep см . в файле параметров Bicep.

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