Поделиться через


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

В этой статье объясняется, как использовать REST API Azure 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.

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

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

В примерах в этой статье используются развертывания групп ресурсов.

Развертывание с помощью REST API

  1. Задайте общие параметры и заголовки, в том числе токены аутентификации.

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

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
    

    С помощью тела запроса вида:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Перед развертыванием шаблона можно предварительно просмотреть изменения, которые шаблон внесет в вашу среду. Используйте операцию what-if, чтобы убедиться, что шаблон вносит ожидаемые вами изменения. Операция what-if также служит для проверки шаблона на наличие ошибок.

  4. Чтобы развернуть шаблон, укажите идентификатор подписки, имя группы ресурсов и имя развертывания в универсальном коде ресурса ресурса (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 значение Завершено. Будьте осторожны при использовании полного режима, так как вы можете случайно удалить ресурсы, которых нет в шаблоне.

    {
     "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 для передачи значения безопасного параметра во время развертывания".

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

    {
       "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"
         }
       }
     }
    }
    
  6. Чтобы получить статус развертывания шаблона, используйте команду Развертывания - Получить.

    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.

Чтобы получить список подписок, выполните следующие действия.

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: средство командной строки для Azure API.

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

Развертыванию можно присвоить имя, например ExampleDeployment.

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

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

При выполнении параллельных развертываний в одной группе ресурсов с тем же именем развертывания завершается только последнее развертывание. Все развертывания с идентичным названием, которые не были завершены, будут заменены последним развертыванием. Например, если вы запускаете развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage1 и в то же время запускает другое развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage2, развертывается только одна учетная запись хранения. Созданная учетная запись хранения получает имя storage2.

Однако если вы запустите развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage1, и сразу после завершения работы запустите другое развертывание с именем newStorage, которое развертывает учетную запись хранения с именем storage2, то будут созданы две учетные записи хранения. Одна получит имя storage1, а другая — storage2. Но в журнал развертывания будет внесена только одна запись.

Если для каждого развертывания указано уникальное имя, их можно запускать параллельно без возникновения конфликтов. Например, если вы запустите развертывание с именем newStorage1, которое развертывает учетную запись хранения с именем storage1, и в то же время запустите другое развертывание с именем newStorage2, которое развертывает учетную запись хранения с именем storage2, будут созданы две учетные записи хранения и две записи в журнале развертывания.

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

Дальнейшие шаги