Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как использовать Azure CLI с шаблонами Azure Resource Manager (шаблонами ARM) для развертывания ресурсов в Azure. Если вы не знакомы с процессами развертывания решений Azure и управления ими, ознакомьтесь с обзором развертывания шаблонов.
Команды развертывания изменились в Azure CLI версии 2.2.0. Примеры в этой статье требуют Azure CLI версии 2.20.0 или более поздней.
Чтобы запустить этот пример, установите последнюю версию Azure CLI. Чтобы создать соединение с Azure, выполните az login.
Примеры для Azure CLI написаны для оболочки bash. Чтобы запустить этот пример в Windows PowerShell или командной строке, может потребоваться изменить элементы скрипта.
Если у вас нет Azure CLI, можно использовать Azure Cloud Shell. Дополнительные сведения см. в разделе Deploy ARM templates from Azure Cloud Shell.
Совет
Рекомендуется Bicep так как он предлагает те же возможности, что и шаблоны ARM, а синтаксис проще использовать. Дополнительные сведения см. в статье Как развернуть ресурсы с помощью Bicep и Azure CLI.
Предпосылки
Необходимые разрешения
Чтобы развернуть файл 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.
Область развертывания
Шаблон развертывания Azure можно использовать для группы ресурсов, подписки, группы управления или клиента. В зависимости от области развертывания используются разные команды.
Для развертывания в группе ресурсов используйте команду az deployment group create.
az deployment group create --resource-group <resource-group-name> --template-file <path-to-template>Для развертывания в подписке используйте команду az deployment sub create.
az deployment sub create --location <location> --template-file <path-to-template>Дополнительные сведения о развертываниях на уровне подписки см. в статье Создание групп ресурсов и ресурсов на уровне подписки.
Для развертывания в группу управления, используйте команду az deployment mg create.
az deployment mg create --location <location> --template-file <path-to-template>Дополнительные сведения о развертываниях на уровне групп управления см. в статье Создание ресурсов на уровне группы управления.
Для развертывания в клиенте используйте команду az deployment tenant create.
az deployment tenant create --location <location> --template-file <path-to-template>Дополнительные сведения о развертываниях на уровне клиента см. в статье Создание ресурсов на уровне клиента.
Для каждой области пользователь, выполняющий развертывание шаблона, должен иметь необходимые разрешения для создания ресурсов.
Развертывание локального шаблона
Развертывание шаблона ARM можно выполнять с локального компьютера или из внешнего хранилища. В этом разделе описывается развертывание локального шаблона.
Если развертывание выполняется в несуществующей группе ресурсов, создайте группу ресурсов. Имя группы ресурсов может содержать только буквы, цифры, точки, знаки подчеркивания, дефисы и скобки. Оно может содержать до 90 знаков. Имя не может заканчиваться точкой.
az group create --name ExampleGroup --location "Central US"
Чтобы развернуть локальный шаблон, используйте параметр --template-file в команде развертывания. В рассмотренном ниже примере также демонстрируется настройка значений параметра.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file <path-to-template> \
--parameters storageAccountType=Standard_GRS
Значение параметра --template-file должно быть файлом Bicep или файлом .json или .jsonc. Расширение файла .jsonc указывает на то, что этот файл может содержать комментарии в стиле //. Система ARM принимает комментарии // в файлах .json. Для нее расширение файла не имеет значения. Дополнительные сведения о комментариях и метаданных см. в статье Общие сведения о структуре и синтаксисе шаблонов ARM.
Процесс применения шаблона развертывания Azure может потребовать несколько минут. По завершении появится сообщение, содержащее результат:
"provisioningState": "Succeeded",
Развертывание удаленного шаблона
Вместо хранения шаблонов ARM на локальном компьютере вы можете сохранить их во внешнем хранилище. Шаблоны можно хранить в репозитории системы управления версиями (например, GitHub). Кроме того, вы можете хранить их в учетной записи хранения Azure для общего доступа в организации.
Примечание.
Сведения о развертывании шаблона или ссылке на связанный шаблон, хранящийся в частном репозитории GitHub, см. в пользовательском решении, описанном в Создание пользовательского и безопасного предложения портал Azure. Вы можете создать функцию Azure, которая извлекает маркер GitHub из Azure Key Vault.
Если развертывание выполняется в несуществующей группе ресурсов, создайте группу ресурсов. Имя группы ресурсов может содержать только буквы, цифры, точки, знаки подчеркивания, дефисы и скобки. Оно может содержать до 90 знаков. Имя не может заканчиваться точкой.
az group create --name ExampleGroup --location "Central US"
Для развертывания внешнего шаблона используйте параметр template-uri.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
В предыдущем примере для шаблона требуется общедоступный код URI, который подходит для большинства сценариев, так как шаблон не должен содержать конфиденциальные данные. Если необходимо указать конфиденциальные данные (например, пароль администратора), то передайте это значение с помощью безопасного параметра. Однако если вы хотите управлять доступом к шаблону, рекомендуем использовать спецификации шаблонов.
Для развертывания удаленно связанных шаблонов с относительным путем, которые хранятся в аккаунте хранилища, используйте query-string для указания токена SAS.
az deployment group create \
--name linkedTemplateWithRelativePath \
--resource-group myResourceGroup \
--template-uri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" \
--query-string $sasToken
Дополнительные сведения см. в разделе Использование относительного пути для связанных шаблонов.
имя шаблона развертывания Azure
При развертывании шаблона ARM можно указать имя шаблона развертывания Azure. Это имя может помочь вам восстановить развертывание из истории развертываний. Если вы не укажете имя для развертывания, по умолчанию используется имя файла шаблона. Например, если вы развертываете шаблон azuredeploy.json и не указываете имя развертывания, развертывание будет называться azuredeploy.
Каждый раз при выполнении развертывания в журнал развертываний группы ресурсов добавляется запись с именем развертывания. Если запустить другое развертывание и присвоить ему такое же имя, то предыдущая запись будет заменена текущим развертыванием. Если требуется создать уникальные записи в журнале развертывания, присвойте каждому развертыванию уникальное имя.
Чтобы создать уникальное имя, можно добавить к нему случайное число.
deploymentName='ExampleDeployment'$RANDOM
Также можно добавить дату.
deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")
При выполнении параллельных развертываний в одной группе ресурсов с тем же именем развертывания завершается только последнее развертывание. Все развертывания с идентичным названием, которые не были завершены, будут заменены последним развертыванием. Например, если вы запускаете развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage1 и в то же время запускает другое развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage2, развертывается только одна учетная запись хранения. Созданная учетная запись хранения получает имя storage2.
Однако если вы запустите развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage1, и сразу после завершения работы запустите другое развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage2, то будут созданы две учетные записи хранения. Одна получит имя storage1, а другая — storage2. Но в журнал развертывания будет внесена только одна запись.
Если для каждого развертывания указано уникальное имя, их можно запускать параллельно без возникновения конфликтов. Например, если вы запустите развертывание с именем newStorage1, которое развертывает учетную запись хранения с именем storage1, и в то же время запустите другое развертывание с именем newStorage2, которое развертывает учетную запись хранения с именем storage2, будут созданы две учетные записи хранения и две записи в журнале развертывания.
Чтобы избежать конфликтов между параллельными развертываниями и обеспечить уникальность записей в журнале развертывания, присваивайте каждому развертыванию уникальное имя.
Развертывание спецификации шаблона
Вместо развертывания локального или удаленного шаблона можно создать спецификацию template. Спецификация шаблона — это ресурс в подписке Azure, содержащей шаблон ARM. Такой способ позволяет с легкостью обеспечить безопасный общий доступ к шаблону для пользователей вашей организации. Для предоставления доступа к спецификации шаблона используется Azure управление доступом на основе ролей (Azure RBAC). Эта функция сейчас доступна в предварительной версии.
В следующих примерах показано, как создать и развернуть спецификацию шаблона.
Сначала создайте спецификацию шаблона, выбрав шаблон ARM.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "./mainTemplate.json"
Затем получите идентификатор спецификации шаблона и выполните его развертывание.
id = $(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
az deployment group create \
--resource-group demoRG \
--template-spec $id
Дополнительные сведения см. в спецификациях шаблонов Azure Resource Manager.
Просмотр изменений
Перед развертыванием шаблона ARM вы можете предварительно просмотреть изменения, которые шаблон внесет в вашу среду. Используйте операцию what-if, чтобы убедиться, что шаблон вносит ожидаемые вами изменения. Операция what-if также служит для проверки шаблона на наличие ошибок.
Параметры
Для передачи значений параметров можно использовать встроенные параметры или файл параметров. Файл параметров может быть файлом параметров Bicep или файлом параметров JSON.
Встроенные параметры
Чтобы передать встроенные параметры, укажите значения в parameters. Например, строки и массив передаются в шаблон из оболочки Bash следующим образом.
az deployment group create \
--resource-group testgroup \
--template-file <path-to-template> \
--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-template> \
--parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json
Получение значения параметра из файла полезно в тех случаях, когда есть необходимость предоставить значения конфигурации. Например, вы можете задать значения cloud-init для виртуальной машины Linux.
Файл ArrayContent.json имеет следующий формат:
[
"value1",
"value2"
]
Чтобы передать объект, например, для установки тегов, используйте JSON. Например, шаблон может содержать параметр, подобный приведенному ниже:
"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 $templateFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"
Поместите строку JSON, которую необходимо передать в объект, в двойные кавычки.
Для хранения значений параметров можно использовать переменную. В Bash задайте для переменной все значения параметров и добавьте ее в команду развертывания.
params="prefix=start suffix=end"
az deployment group create \
--resource-group testgroup \
--template-file <path-to-template> \
--parameters $params
Однако если вы используете Azure CLI с командной строкой Windows (CMD) или PowerShell, задайте для переменной строку JSON. Не используйте двойные кавычки: $params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'.
Файлы параметров JSON
Вместо передачи параметров в качестве встроенных значений в скрипте может быть проще использовать файл параметров, .bicepparam файл или файл параметров JSON, содержащий значения параметров. Файл параметров должен быть локальным файлом. Файлы внешних параметров не поддерживаются Azure CLI.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.json \
--parameters 'storage.parameters.json'
Дополнительные сведения о файле параметров см. в файле параметров Create Resource Manager .
файлы параметров Bicep
С помощью Azure CLI версии 2.53.0 или более поздней и Bicep CLI версии 0.22.6 или более поздней, вы можете развернуть файл Bicep с использованием файла параметров Bicep. С инструкцией using в файле параметров Bicep нет необходимости указывать параметр --template-file при задании файла параметров Bicep для параметра --parameters. Включение переключателя --template-file приводит к ошибке: "Допускается только файл .bicep с файлом .bicepparam".
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--parameters storage.bicepparam
Файл параметров должен быть локальным файлом. Файлы внешних параметров не поддерживаются Azure CLI. Дополнительные сведения о файле параметров см. в файле параметров Create Resource Manager.
Комментарии и расширенный формат JSON
Вы можете включить комментарии стиля // в свой файл параметров, но вам необходимо задать имя для файла с расширением .jsonc.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.json \
--parameters '@storage.parameters.jsonc'
Дополнительные сведения о комментариях и метаданных см. в разделе "Общие сведения о структуре и синтаксисе шаблонов ARM".
Если вы используете Azure CLI с версией 2.3.0 или более старой версией, можно развернуть шаблон с несколькими строками или комментариями с помощью параметра --handle-extended-json-format. Например:
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2025-04-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[
parameters('location')
]", //defaults to resource group location
/*
storage account and network interface
must be deployed first
*/
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
Следующие шаги
- Чтобы вернуться к успешно выполненному развертыванию при возникновении ошибки, см. Откат к успешному развертыванию в случае ошибки.
- Сведения о том, как обрабатывать ресурсы, которые существуют в группе ресурсов, но не определены в шаблоне, см. в разделе Azure Resource Manager режимы развертывания.
- Сведения об определении параметров в шаблоне см. в статье Описание структуры и синтаксиса шаблонов ARM.
- Советы по устранению распространенных ошибок развертывания см. в разделе Устранение распространенных ошибок развертывания Azure с помощью диспетчера ресурсов Azure.