Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как использовать Azure PowerShell с шаблонами Azure Resource Manager (шаблонами ARM) для развертывания ресурсов в Azure. Если вы не знакомы с процессами развертывания решений Azure и управления ими, ознакомьтесь с обзором развертывания шаблонов.
Подсказка
Рекомендуется Bicep так как он предлагает те же возможности, что и шаблоны ARM, а синтаксис проще использовать. Дополнительные сведения см. в статье Deploy resources with Bicep and Azure PowerShell.
Предварительные требования
Вам нужен шаблон для развертывания. Если у вас еще нет одного шаблона, скачайте и сохраните шаблон из репозитория шаблонов быстрого запуска Azure. В этой статье используется локальный файл с именем c:\MyTemplates\azuredeploy.json.
Необходимо установить Azure PowerShell и подключиться к Azure:
- Установите командлеты Azure PowerShell на вашем локальном компьютере. Для получения дополнительной информации см. Начало работы с Azure PowerShell.
- Подключитесь к Azure с помощью команды Connect-AZAccount. Если у вас несколько подписок Azure, может потребоваться также запустить Set-AzContext. Дополнительные сведения см. в разделе Использование нескольких подписок Azure.
Если у вас нет PowerShell, можно использовать Azure Cloud Shell. Дополнительные сведения см. в разделе Deploy ARM templates from Azure Cloud Shell.
Необходимые разрешения
Чтобы развернуть файл Bicep или шаблон Azure Resource Manager (ARM), необходим доступ на запись к ресурсам, которые вы развертываете, и доступ ко всем операциям с типом ресурсов Майкрософт.Resources/deployments. Например, для развертывания виртуальной машины требуется Майкрософт.Compute/virtualMachines/write и разрешения Майкрософт.Resources/deployments/*. Операция what-if имеет те же требования к разрешениям.
Azure CLI версии 2.76.0 или более поздней и Azure PowerShell версии 13.4.0 или более поздней введите параметр ValidationLevel, чтобы определить, как тщательно ARM проверяет шаблон Bicep во время этого процесса. Дополнительные сведения см. в разделе "Что если"
Чтобы увидеть список ролей и разрешений, см. раздел встроенные роли Azure.
Область развертывания
Вы можете нацелить развертывание на группу ресурсов, подписку, группу управления или клиента. В зависимости от области развертывания используются разные команды.
Для развертывания в группе ресурсов используйте команду New-AzResourceGroupDeployment.
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>Чтобы выполнить развертывание в подписке, используйте New-AzSubscriptionDeployment, который является псевдонимом командлета
New-AzDeployment:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>Дополнительные сведения о развертываниях на уровне подписки см. в статье Создание групп ресурсов и ресурсов на уровне подписки.
Для развертывания в группе управления используйте команду New-AzManagementGroupDeployment.
New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>Дополнительные сведения о развертываниях на уровне групп управления см. в статье Создание ресурсов на уровне группы управления.
Для развертывания в клиенте используйте команду New-AzTenantDeployment.
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>Дополнительные сведения о развертываниях на уровне клиента см. в статье Создание ресурсов на уровне клиента.
Для каждой области пользователь, выполняющий развертывание шаблона, должен иметь необходимые разрешения для создания ресурсов.
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"
Дополнительные сведения см. в разделе Использование относительного пути для связанных шаблонов.
Развертывание шаблона спецификации
Вместо развертывания локального или удаленного шаблона можно создать спецификацию template. Спецификация шаблона — это ресурс в подписке 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
Вы можете использовать параметр 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-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.
Дополнительные сведения о файле параметров см. в файле параметров Create 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
Дополнительные сведения о файле параметров см. в файле параметров Create 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.
Следующие шаги
- Чтобы вернуться к успешному развертыванию при возникновении ошибки, см. Откат на успешное развертывание при ошибке.
- Сведения о том, как обрабатывать ресурсы, которые существуют в группе ресурсов, но не определены в шаблоне, см. в разделе Azure Resource Manager режимы развертывания.
- Сведения об определении параметров в шаблоне см. в статье Описание структуры и синтаксиса шаблонов ARM.
- Сведения о развертывании шаблона, которому нужен маркер SAS, см. в статье Развертывание частного шаблона ARM с помощью маркера SAS.