部署模板规格

已完成

创建并发布模板规格后,就可以部署它。 本单元将介绍部署模板规格的方法。

使用模板规格创建部署

若要将模板规格部署到资源组,可使用你熟悉的同一 New-AzResourceGroupDeployment cmdlet。 无需指定模板文件,而是指定模板规格的资源 ID,如以下示例所示:

New-AzResourceGroupDeployment `
  -TemplateSpecId '/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS'

尽管必须在资源组中创建模板规格,但可以使用以下 cmdlet 将模板规格部署至订阅、管理组甚至租户:

若要在此范围部署,请执行以下操作: 使用此 PowerShell cmdlet:
资源组 New-AzResourceGroupDeployment
订阅 New-AzSubscriptionDeployment
管理组 New-AzManagementGroupDeployment
租户 New-AzTenantDeployment

其中每个 cmdlet 都接受 -TemplateSpecId 参数,以在这些范围之一启动模板规格部署。

若要将模板规格部署到资源组,可使用你熟悉的同一 az deployment group create 命令。 无需指定模板文件,而是指定模板规格的资源 ID,如以下示例所示:

az deployment group create \
  --template-spec "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/SharedTemplates/providers/Microsoft.Resources/templateSpecs/StorageWithoutSAS"

尽管必须在资源组中创建模板规格,但可以使用以下命令将模板规格部署至订阅、管理组甚至租户:

若要在此范围部署,请执行以下操作: 运行此 Azure CLI 命令:
资源组 az deployment group create
订阅 az deployment sub create
管理组 az deployment mg create
租户 az deployment tenant create

其中每个命令都接受 --template-spec 参数,以在这些范围之一启动模板规格部署。

将模板规格用作链接部署

若要在另一个 Azure 资源管理器模板(ARM 模板)中使用模板规格,需创建一个使用该模板规格的部署。这种类型的部署称为“链接部署”,因为要链接到在外部指定的部署模板。

在 Azure 中,部署是资源类型为 Microsoft.Resources/deployments 的资源。 部署 ARM 模板时,会创建部署资源。 同样的概念也适用于部署模板规格的情况,如下所示:

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2020-10-01",
  "name": "createStorage",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "id": "[resourceId('Microsoft.Resources/templateSpecs/versions', variables('templateSpecName'), variables('templateSpecVersion'))]"
    }
  }
}

如果要向模板规格部署提供参数,请使用 parameters 属性:

{
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2020-10-01",
  "name": "createStorage",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "id": "[resourceId('Microsoft.Resources/templateSpecs/versions', variables('templateSpecName'), variables('templateSpecVersion'))]"
    },
    "parameters": {
      "storageAccountName": {
        "value": "[parameters('storageAccountName')]"
      }
    }
  }
}

将模板规格用作 Bicep 模块

可以将模板规格用作 Bicep 文件中的模块:

module storageAccountTemplateSpec 'ts:f0750bbe-ea75-4ae5-b24d-a92ca601da2c/sharedTemplates/StorageWithoutSAS:1.0' = {
  name: 'storageAccountTemplateSpec'
}

请注意,模块路径使用特殊格式:

Diagram showing the components of the template spec path.

模块路径包含三个组件,由冒号 (:) 字符分隔:

  • 方案:Bicep 支持多种类型的模块,称为方案。 将模板规格用作模块时,使用 ts 作为方案。
  • 订阅 ID、资源组名称,以及模板规格名称:这些值应指定你之前发布的模板规格资源的位置。 使用正斜杠 (/) 分隔订阅 ID、资源组名称和模板规格名称。 模块路径的此部分不是模板规格的完整资源 ID - 它只是资源 ID 的几个组件。
  • 版本:需要包括模板规格版本。

备注

指定模块的路径时,不能使用变量、参数或字符串内插。 需要将完整的模板规格路径保存到 Bicep 文件中。

如果要向模板规格提供参数,请使用 params 属性:

module storageAccountTemplateSpec 'ts:f0750bbe-ea75-4ae5-b24d-a92ca601da2c/sharedTemplates/StorageWithoutSAS:1.0' = {
  name: 'storageAccountTemplateSpec'
  params: {
    storageAccountName: storageAccountName
  }
}

生成 Bicep 文件时,会将模板规格文件下载并复制(转译)到 JSON ARM 模板中。 通常,此操作在部署 Bicep 文件时进行,但你也可以使用 Bicep 工具通过运行 bicep build 命令来显式进行转换。