Развертывание ресурсов с помощью шаблонов ARM и REST API Resource Manager
В этой статье описано, как использовать REST API Resource Manager с шаблонами Azure Resource Manager (ARM) для развертывания ресурсов в Azure.
Вы можете включить шаблон в текст запроса или связать с файлом. Файл может быть локальным или внешним, доступным по универсальному коду ресурса (URI). Если шаблон находится в учетной записи хранения, то во время развертывания можно ограничить доступ к шаблону и предоставить маркер подписанного URL-адреса (SAS).
Необходимые разрешения
Для развертывания файла Bicep или шаблона ARM необходим доступ с правом записи для развертываемых ресурсов и доступ ко всем операциям с типом ресурсов Microsoft.Resources/deployments. Например, для развертывания виртуальной машины необходимы разрешения Microsoft.Compute/virtualMachines/write
и Microsoft.Resources/deployments/*
. Операция what-if имеет те же требования к разрешениям.
Список ролей и разрешений см. в статье Встроенные роли Azure.
Область развертывания
Вы можете направить развертывание на группу ресурсов, подписку, группу управления или клиента. В зависимости от области развертывания используются разные команды.
Чтобы выполнить развертывание в группе ресурсов, используйте инструкции из статьи Развертывания: создание. Назначение для такого запроса:
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
Чтобы выполнить развертывание в подписке, используйте инструкции из статьи Развертывания: создание в области подписки. Назначение для такого запроса:
PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
Дополнительные сведения о развертываниях на уровне подписки см. в статье Создание групп ресурсов и ресурсов на уровне подписки.
Чтобы выполнить развертывание в группе управления, используйте инструкции из статьи Развертывания: создание в области группы управления. Назначение для такого запроса:
PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{groupId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
Дополнительные сведения о развертываниях на уровне групп управления см. в статье Создание ресурсов на уровне группы управления.
Чтобы выполнить развертывание в клиенте, используйте инструкции из статьи Развертывания: создание или обновление в области клиента. Назначение для такого запроса:
PUT https://management.azure.com/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
Дополнительные сведения о развертываниях на уровне клиента см. в статье Создание ресурсов на уровне клиента.
В примерах, приведенных в этой статье, мы используем развертывание в группе ресурсов.
Развертывание с помощью REST API
Задайте общие параметры и заголовки, включая маркеры аутентификации.
Если развертывание выполняется в несуществующей группе ресурсов, создайте группу ресурсов. Укажите идентификатор подписки, имя новой группы ресурсов и расположение, необходимое для решения. Дополнительную информацию см. в разделе Создание группы ресурсов.
PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
С текстом запроса:
{ "location": "West US", "tags": { "tagname1": "tagvalue1" } }
Перед развертыванием шаблона можно просмотреть изменения, которые шаблон внесет в среду. Используйте операцию what-if, чтобы убедиться в том, что необходимые изменения будут внесены. Операция what-if также служит для проверки шаблона на наличие ошибок.
Чтобы развернуть шаблон, укажите идентификатор подписки, имя группы ресурсов, имя развертывания и URI запроса.
PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
В тексте запроса укажите ссылку на шаблон и файл параметров. Дополнительные сведения о файле параметров см. в статье Создание файла параметров Resource Manager.
Обратите внимание, что для параметра
mode
выбрано значение Incremental (Добавочный). Чтобы выполнить полное развертывание, установите для параметраmode
значение Complete (Завершено). Будьте внимательны при использовании полного режима, так как вы можете случайно удалить ресурсы, которые находятся не в шаблоне.{ "properties": { "templateLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json", "contentVersion": "1.0.0.0" }, "parametersLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json", "contentVersion": "1.0.0.0" }, "mode": "Incremental" } }
Если вы хотите регистрировать в журнале содержимое запроса или содержимое ответа (или и то и другое), добавьте в запрос параметр
debugSetting
.{ "properties": { "templateLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json", "contentVersion": "1.0.0.0" }, "parametersLink": { "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json", "contentVersion": "1.0.0.0" }, "mode": "Incremental", "debugSetting": { "detailLevel": "requestContent, responseContent" } } }
Можно настроить учетную запись хранения для использования маркера подписанного URL-адреса (SAS). Дополнительные сведения см. в статье Делегирование доступа с помощью подписанного URL-адреса.
Если требуется предоставить конфиденциальное значение для параметра (например, пароль), добавьте это значение в хранилище ключей. Получите хранилище ключей во время развертывания, как показано в предыдущем примере. Дополнительные сведения см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания.
Вместо создания ссылки на файлы для шаблона и параметров их можно включить в тексте запроса. В следующем примере приведен текст запроса, в котором напрямую указаны шаблон и параметр.
{ "properties": { "mode": "Incremental", "template": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "storageAccountType": { "type": "string", "defaultValue": "Standard_LRS", "allowedValues": [ "Standard_LRS", "Standard_GRS", "Standard_ZRS", "Premium_LRS" ], "metadata": { "description": "Storage Account type" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } }, "variables": { "storageAccountName": "[format('{0}standardsa', uniquestring(resourceGroup().id))]" }, "resources": [ { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2022-09-01", "name": "[variables('storageAccountName')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('storageAccountType')]" }, "kind": "StorageV2", "properties": {} } ], "outputs": { "storageAccountName": { "type": "string", "value": "[variables('storageAccountName')]" } } }, "parameters": { "location": { "value": "eastus2" } } } }
Чтобы получить состояние развертывания шаблона, используйте инструкции из статьи Развертывания: получение.
GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
Развертывание с помощью ARMClient
ARMClient — это простое средство командной строки для вызова API Azure Resource Manager. Чтобы установить это средство, воспользуйтесь документацией по ARMClient на ресурсе GitHub.
Получение списка подписок:
armclient GET /subscriptions?api-version=2021-04-01
Получение списка групп ресурсов:
armclient GET /subscriptions/<subscription-id>/resourceGroups?api-version=2021-04-01
Вместо <subscription-id> укажите реальный идентификатор подписки Azure.
Создание группы ресурсов в регионе Центральная часть США:
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 "{location: 'central us', properties: {}}"
Кроме того, вы можете поместить текст запроса в файл формата JSON с именем CreateRg.json:
{
"location": "Central US",
"properties": { }
}
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 '@CreateRg.json'
Дополнительные сведения см. в статье ARMClient: a command line tool for the Azure API (ARMClient: средство командной строки для API Azure).
Deployment name (Имя развертывания)
Можно присвоить развертыванию имя, например ExampleDeployment
.
Каждый раз при выполнении развертывания в журнал развертывания группы ресурсов добавляется запись с именем развертывания. Если запустить другое развертывание и присвоить ему такое же имя, то предыдущая запись будет заменена текущим развертыванием. Если требуется создать уникальные записи в журнале развертывания, присвойте каждому развертыванию уникальное имя.
Чтобы создать уникальное имя, можно добавить к нему случайное число. Также можно добавить дату.
При выполнении параллельных развертываний в одной группе ресурсов с тем же именем развертывания завершается только последнее развертывание. Все развертывания с тем же именем, которые не были завершены, заменяются последним развертыванием. Например, если вы запускаете развертывание с именем newStorage
, которое развертывает учетную запись хранения с именем storage1
и в то же время запускает другое развертывание с именем newStorage
, которое развертывает учетную запись хранения с именем storage2
, развертывается только одна учетная запись хранения. Созданная учетная запись хранения получает имя storage2
.
Однако если вы запустите развертывание с именем newStorage
, которое развертывает учетную запись хранения с именем storage1
, и сразу после завершения работы запустите другое развертывание с именем newStorage
, которое развертывает учетную запись хранения с именем storage2
, то будут созданы две учетные записи хранения. Одна получит имя storage1
, а другая — storage2
. Но в журнал развертывания будет внесена только одна запись.
Если для каждого развертывания указано уникальное имя, их можно запускать параллельно без возникновения конфликтов. Например, если вы запустите развертывание с именем newStorage1
, которое развертывает учетную запись хранения с именем storage1
, и в то же время запустите другое развертывание с именем newStorage2
, которое развертывает учетную запись хранения с именем storage2
, будут созданы две учетные записи хранения и две записи в журнале развертывания.
Чтобы избежать конфликтов между параллельными развертываниями и обеспечить уникальность записей в журнале развертывания, присваивайте каждому развертыванию уникальное имя.
Следующие шаги
- Если возникнет ошибка при развертывании, выполните откат по инструкциям из статьи Откат к работоспособному развертыванию в случае ошибки.
- Сведения о том, как указать способ обработки ресурсов, которые существуют в группе ресурсов, но не определены в шаблоне, см. в описании режимов развертывания с помощью Azure Resource Manager.
- Сведения об обработке асинхронных операций REST см. в статье Track asynchronous Azure operations (Отслеживание асинхронных операций Azure).
- Дополнительные сведения о шаблонах см. в статье Общие сведения о структуре и синтаксисе шаблонов ARM.