Развертывание ресурсов с использованием шаблонов и REST API Resource ManagerDeploy resources with Resource Manager templates and Resource Manager REST API

В этом разделе объясняется, как использовать шаблоны и REST API Resource Manager для развертывания ресурсов в Azure.This article explains how to use the Resource Manager REST API with Resource Manager templates to deploy your resources to Azure.

Вы можете включить шаблон в текст запроса или связать с файлом.You can either include your template in the request body or link to a file. Файл может быть локальным или внешним, доступным по универсальному коду ресурса (URI).When using a file, it can be a local file or an external file that is available through a URI. Если шаблон находится в учетной записи хранения, то во время развертывания можно ограничить доступ к шаблону и предоставить маркер подписанного URL-адреса (SAS).When your template is in a storage account, you can restrict access to the template and provide a shared access signature (SAS) token during deployment.

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

Можно создавать решения развертывания для группы управления, подписки Azure или группу ресурсов.You can target your deployment to a management group, an Azure subscription, or a resource group. В большинстве случаев его ориентации развертываний в группе ресурсов.In most cases, you'll target deployments to a resource group. Используйте группу или подписку при развертывании службы управления для применения политик и назначения ролей в указанной области.Use management group or subscription deployments to apply policies and role assignments across the specified scope. Развертывания подписки также использовать для создания группы ресурсов и развернуть в ней ресурсы.You also use subscription deployments to create a resource group and deploy resources to it. В зависимости от области развертывания использовать другие команды.Depending on the scope of the deployment, you use different commands.

Для развертывания на группы ресурсов, использовать создания развертываний -.To deploy to a resource group, use Deployments - Create. Запрос отправляется к:The request is sent to:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

Для развертывания на подписки, использовать развертываний — создать в пределах подписки.To deploy to a subscription, use Deployments - Create At Subscription Scope. Запрос отправляется к:The request is sent to:

PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

Для развертывания на группы управления, использовать развертываний — создать в в области группы управления.To deploy to a management group, use Deployments - Create At Management Group Scope. Запрос отправляется к:The request is sent to:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{groupId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

В примерах в этой статье используется развертываний групп ресурсов.The examples in this article use resource group deployments. Дополнительные сведения о развертываниях подписки см. в разделе создания группы ресурсов и ресурсов на уровне подписки.For more information about subscription deployments, see Create resource groups and resources at the subscription level.

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

  1. Задайте общие параметры и заголовки, включая маркеры аутентификации.Set common parameters and headers, including authentication tokens.

  2. Создайте группу ресурсов, если у вас нет существующей группы ресурсов.If you don't have an existing resource group, create a resource group. Укажите идентификатор подписки, имя новой группы ресурсов и расположение, необходимое для решения.Provide your subscription ID, the name of the new resource group, and location that you need for your solution. Дополнительную информацию см. в разделе Создание группы ресурсов.For more information, see Create a resource group.

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

    С текстом запроса:With a request body like:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Проверьте развернутую службу перед ее выполнением. Для этого выполните операцию проверки развертывания шаблонов.Validate your deployment before executing it by running the Validate a template deployment operation. При тестировании развернутой службы укажите точно такие же параметры, как и при ее выполнении (как показано на следующем шаге).When testing the deployment, provide parameters exactly as you would when executing the deployment (shown in the next step).

  4. Чтобы развернуть шаблон, укажите идентификатор подписки, имя группы ресурсов, имя развертывания в URI запроса.To deploy a template, provide your subscription ID, the name of the resource group, the name of the deployment in the request URI.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2019-05-01
    

    В тексте запроса укажите ссылку на файл шаблона и параметров.In the request body, provide a link to your template and parameter file. Обратите внимание, что для параметра mode выбрано значение Incremental.Notice the mode is set to Incremental. Чтобы выполнить полное развертывание, установите для параметра mode значение Complete.To run a complete deployment, set mode to Complete. Будьте внимательны при использовании полного режима, так как вы можете случайно удалить ресурсы, которые находятся не в шаблоне.Be careful when using the complete mode as you can inadvertently delete resources that aren't in your template.

    {
     "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 .If you want to log response content, request content, or both, include debugSetting in the request.

    {
     "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).You can set up your storage account to use a shared access signature (SAS) token. Дополнительные сведения см. в статье Делегирование доступа с помощью подписанного URL-адреса.For more information, see Delegating Access with a Shared Access Signature.

  5. Вместо создания ссылки на файлы для шаблона и параметров их можно включить в тексте запроса.Instead of linking to files for the template and parameters, you can include them in the request body. В следующем примере показано, тело запроса со встроенным шаблонов и параметров:The following example shows the request body with the template and parameter inline:

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2015-01-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": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "name": "[variables('storageAccountName')]",
             "apiVersion": "2018-02-01",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. Чтобы получить состояние развертывания шаблона, используйте получить развертываний -.To get the status of the template deployment, use Deployments - Get.

    GET https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2018-05-01
    

Повторное развертывание при сбое развертыванияRedeploy when deployment fails

Эта функция также называется отката в случае ошибки.This feature is also known as Rollback on error. Если развертывание завершается ошибкой, вы можете автоматически повторно развернуть ресурс, успешно развернутый ранее, из журнала развертывания.When a deployment fails, you can automatically redeploy an earlier, successful deployment from your deployment history. Чтобы задать повторное развертывание, укажите свойство onErrorDeployment в тексте запроса.To specify redeployment, use the onErrorDeployment property in the request body. Эта функция удобна, если у нас есть известного рабочего состояния для развертывания инфраструктуры и хотите вернуться к этому состоянию.This functionality is useful if you've got a known good state for your infrastructure deployment and want to revert to this state. Существует несколько предостережений, а также ограничения:There are a number of caveats and restrictions:

  • Повторное развертывание выполняется так же, как она была запущена ранее, с теми же параметрами.The redeployment is run exactly as it was run previously with the same parameters. Невозможно изменить параметры.You cannot change the parameters.
  • Предыдущее развертывание выполняется с использованием полный режим.The previous deployment is run using the complete mode. Будут удалены все ресурсы, не включены в предыдущем развертывании, а все конфигурации ресурсов задаются к предыдущим значениям.Any resources not included in the previous deployment are deleted, and any resource configurations are set to their previous state. Убедитесь, что вы полностью понимаете режимов развертывания.Make sure you fully understand the deployment modes.
  • Повторное развертывание влияет только на ресурсы, не затрагиваются все изменения данных.The redeployment only affects the resources, any data changes aren't affected.
  • Эта функция поддерживается только на развертывания группы ресурсов, подписки уровня развертывания.This feature is only supported on Resource Group deployments, not subscription level deployments. Дополнительные сведения о развертывании уровня подписки, см. в разделе создания группы ресурсов и ресурсов на уровне подписки.For more information about subscription level deployment, see Create resource groups and resources at the subscription level.

Для этого развертывания должны иметь уникальные имена, чтобы их можно было идентифицировать в журнале.To use this option, your deployments must have unique names so they can be identified in the history. Если у вас нет уникальных имен, текущее неудачное развертывание может перезаписать более раннее успешное развертывание, зафиксированное в журнале.If you don't have unique names, the current failed deployment might overwrite the previously successful deployment in the history. Этот параметр можно использовать только с развертываниями корневого уровня.You can only use this option with root level deployments. Повторное развертывание из вложенных шаблонов не поддерживается.Deployments from a nested template aren't available for redeployment.

Чтобы повторно выполнить последнее успешное развертывание, если текущее развертывание завершается сбоем, используйте следующий код:To redeploy the last successful deployment if the current deployment fails, use:

{
  "properties": {
    "templateLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
      "contentVersion": "1.0.0.0"
    },
    "mode": "Incremental",
    "parametersLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
      "contentVersion": "1.0.0.0"
    },
    "onErrorDeployment": {
      "type": "LastSuccessful",
    }
  }
}

Чтобы повторно выполнить определенное развертывание, если текущее развертывание завершается сбоем, используйте следующий код:To redeploy a specific deployment if the current deployment fails, use:

{
  "properties": {
    "templateLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
      "contentVersion": "1.0.0.0"
    },
    "mode": "Incremental",
    "parametersLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
      "contentVersion": "1.0.0.0"
    },
    "onErrorDeployment": {
      "type": "SpecificDeployment",
      "deploymentName": "<deploymentname>"
    }
  }
}

Указанное развертывание должно быть успешным.The specified deployment must have succeeded.

Файл параметровParameter file

Если вы используете файл параметров для передачи значений параметров во время развертывания, то необходимо создать JSON-файл с форматом, как в примере ниже.If you use a parameter file to pass parameter values during deployment, you need to create a JSON file with a format similar to the following example:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "webSiteName": {
            "value": "ExampleSite"
        },
        "webSiteHostingPlanName": {
            "value": "DefaultPlan"
        },
        "webSiteLocation": {
            "value": "West US"
        },
        "adminPassword": {
            "reference": {
               "keyVault": {
                  "id": "/subscriptions/{guid}/resourceGroups/{group-name}/providers/Microsoft.KeyVault/vaults/{vault-name}"
               },
               "secretName": "sqlAdminPassword"
            }
        }
   }
}

Размер файла параметров не может быть более 64 КБ.The size of the parameter file can't be more than 64 KB.

Если требуется предоставить конфиденциальное значение для параметра (например, пароль), добавьте это значение в хранилище ключей.If you need to provide a sensitive value for a parameter (such as a password), add that value to a key vault. Получите хранилище ключей во время развертывания, как показано в предыдущем примере.Retrieve the key vault during deployment as shown in the previous example. Дополнительные сведения см. в статье Передача безопасных значений в процессе развертывания.For more information, see Pass secure values during deployment.

Дальнейшие действияNext steps