使用 Resource Manager 模板和 Resource Manager REST API 部署资源

本文介绍如何将 Resource Manager REST API 与 Resource Manager 模板配合使用向 Azure 部署资源。

Tip

有关在部署过程中调试错误的帮助,请参阅:

模板可以是本地文件或是可通过 URI 访问的外部文件。 如果模板驻留在存储帐户中,可以限制对该模板的访问,并在部署过程中提供共享访问签名 (SAS) 令牌。

增量部署和完整部署

部署资源时,可以指定部署为增量更新还是完整更新。 这两种模式的主要区别是 Resource Manager 如何处理资源组中不在模板中的现有资源:

  • 在完整模式中,Resource Manager 删除资源组中已存在但尚未在模板中指定的资源。
  • 在增量模式中,Resource Manager 保留资源组中已存在但尚未在模板中指定的资源。

对于这两种模式,Resource Manager 都会尝试预配在模板中指定的所有资源。 如果资源已存在于资源组中且其设置未更改,该操作不会导致任何更改。 如果更改某个资源的设置,则会使用这些新设置预配资源。 如果尝试更新现有资源的位置或类型,则部署会失败并出现错误。 请改用所需的位置或类型部署新资源。

Resource Manager 默认使用增量模式。

为了说明增量模式和完整模式的差异,请考虑以下方案。

现有资源组包含:

  • 资源 A
  • 资源 B
  • 资源 C

模板定义:

  • 资源 A
  • 资源 B
  • 资源 D

在“增量”模式下部署时,资源组包含:

  • 资源 A
  • 资源 B
  • 资源 C
  • 资源 D

在“完整”模式下部署时,会删除资源 C。 该资源组包含:

  • 资源 A
  • 资源 B
  • 资源 D

使用 REST API 进行部署

  1. 设置 常见参数和标头,包括身份验证令牌。
  2. 如果目前没有资源组,请创建资源组。 提供订阅 ID、新资源组的名称,以及解决方案所需的位置。 有关详细信息,请参阅 创建资源组

     PUT https://management.chinacloudapi.cn/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2015-01-01
         <common headers>
         {
             "location": "China North",
             "tags": {
                 "tagname1": "tagvalue1"
             }
         }
    
  3. 在执行部署之前,通过运行验证模板部署操作来验证部署。 测试部署时,请提供与执行部署时所提供的完全相同的参数(如下一步中所示)。
  4. 创建部署。 提供订阅 ID、资源组的名称、部署的名称以及模板的链接。 有关模板文件的信息,请参阅参数文件。 有关使用 REST API 创建资源组的详细信息,请参阅创建模板部署。 请注意,mode 设置为 Incremental。 要运行完整部署,请将 mode 设置为 Complete。 使用完整模式时要小心,因为可能会无意中删除不在模板中的资源。

     PUT https://management.chinacloudapi.cn/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2015-01-01
         <common headers>
         {
             "properties": {
                 "templateLink": {
                     "uri": "http://mystorageaccount.blob.core.chinacloudapi.cn/templates/template.json",
                     "contentVersion": "1.0.0.0"
                 },
                 "mode": "Incremental",
                 "parametersLink": {
                     "uri": "http://mystorageaccount.blob.core.chinacloudapi.cn/templates/parameters.json",
                     "contentVersion": "1.0.0.0"
                 }
             }
         }
    

    如果想要记录响应内容或/和请求内容,请在请求中包括 debugSetting

     "debugSetting": {
       "detailLevel": "requestContent, responseContent"
     }
    

    可以将存储帐户设置为使用共享访问签名 (SAS) 令牌。 有关详细信息,请参阅使用共享访问签名委托访问权限

  5. 获取模板部署的状态。 有关详细信息,请参阅 获取有关模板部署的信息

     GET https://management.chinacloudapi.cn/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2015-01-01
         <common headers>
    

参数文件

如果要在部署期间使用参数文件传递参数值,需要使用类似于以下示例的格式创建一个 JSON 文件:

{
    "$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": "China North"
        },
        "adminPassword": {
            "reference": {
               "keyVault": {
                  "id": "/subscriptions/{guid}/resourceGroups/{group-name}/providers/Microsoft.KeyVault/vaults/{vault-name}"
               }, 
               "secretName": "sqlAdminPassword" 
            }   
        }
   }
}

参数文件的大小不能超过 64 KB。

如果需要为参数(如密码)提供敏感值,请将该值添加到密钥保管库。 在部署过程中检索密钥保管库,如前面的示例所示。 有关详细信息,请参阅在部署期间传递安全值

后续步骤