你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用嵌套模板来部署开发测试实验室环境

嵌套部署在主模板内运行次要 Azure 资源管理器 (ARM) 模板。 本文介绍了嵌套模板以部署 Azure 开发测试实验室环境的示例。 开发测试实验室环境包含多个安装了平台即服务 (PaaS) 资源的基础架构即服务 (IaaS) 虚拟机 (VM)。 可以使用 ARM 模板来预配 PaaS 资源和 VM。

将部署分解为一组有针对性的、特定用途的模板提供了测试、重用和可读性方面的优势。 有关嵌套模板的常规信息(包括代码示例),请参阅部署 Azure 资源时使用链接模版和嵌套模版

通过 Visual Studio 部署嵌套模板

使用 Visual Studio 中的 Azure 资源组项目模板,可以轻松地开发和调试 ARM 模板。 将嵌套模板添加到主 azuredeploy.json 模板文件时,Visual Studio 会添加以下项,使模板更灵活:

  • 包含次要模板和参数文件的子文件夹
  • 主模板文件中的变量名称
  • 两个关键参数 _artifactsLocation_artifactsLocationSasToken

在开发测试实验室中,将 ARM 模板存储在链接到实验室的 Git 存储库中。 当你使用其中一个链接存储库模板来创建新环境时,部署会将模板文件复制到实验室的 Azure 存储容器中。 将嵌套模板资源添加到存储库和主模板文件时,Visual Studio 会标识 _artifactsLocation_artifactsLocationSasToken 值,将子文件夹复制到存储容器,并将位置和共享访问签名 (SaS) 令牌插入参数文件。

嵌套模板文件夹结构

在下面的模板示例中,Git 存储库文件夹包含子文件夹 nestedtemplates,其中包含嵌套的模板文件 NestOne.json 和 NestOne.parameters.json。 azuredeploy.json 主模板文件使用项目位置、嵌套模板文件夹和嵌套模板文件名生成次要模板的 URI。 参数文件的 URI 是项目位置、嵌套模板文件夹和嵌套模板参数文件。 可向主文件夹添加更多嵌套模板子文件夹,但只能在一个嵌套级别上添加。

以下屏幕截图显示了 Visual Studio 中的项目结构:

Screenshot that shows the nested template project structure in Visual Studio.

嵌套部署示例

下面的示例显示了嵌套部署的主 azuredeploy.json ARM 模板文件:


"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "_artifactsLocation": {
        "type": "string"
    },
    "_artifactsLocationSasToken": {
        "type": "securestring"
    }},
"variables": {
    "NestOneTemplateFolder": "nestedtemplates",
    "NestOneTemplateFileName": "NestOne.json",
    "NestOneTemplateParametersFileName": "NestOne.parameters.json"},
    "resources": [
    {
        "name": "NestOne",
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2016-09-01",
        "dependsOn": [ ],
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            },
            "parametersLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateParametersFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            }
        }    
    }],
"outputs": {}

后续步骤