使用巢狀範本部署 DevTest Labs 環境

巢狀部署會從主要範本執行次要 Azure Resource Manager (ARM) 範本。 本文示範巢狀範本並部署 Azure DevTest Labs 環境的範例。 DevTest Labs 環境包含安裝平台即服務 (PaaS) 資源的多個基礎結構即服務 (IaaS) 虛擬機器 (VM)。 您可以使用 ARM 範本佈建 PaaS 資源和 VM。

將部署分解為一組目標、用途特定的範本,提供測試、重複使用和易讀的優點。 如需巢狀範本的一般資訊,包括程式碼範例,請參閱在部署 Azure 資源時使用連結和巢狀範本

使用 Visual Studio 部署巢狀範本

Visual Studio 中的 Azure 資源群組專案範本讓您輕鬆開發和偵錯 ARM 範本。 新增巢狀範本至主要的 azuredeploy.json 範本檔案後,Visual Studio 會新增下列項目,讓範本更具彈性:

  • 包含次要範本和參數檔案的子資料夾
  • 主要範本檔案中的變數名稱
  • 兩個主要參數:_artifactsLocation_artifactsLocationSasToken

在 DevTest Labs 中,您要在連結此實驗室的 Git 存放庫中儲存 ARM 範本。 當您使用其中一個連結存放庫範本,建立新的環境後,部署會複製範本檔案至實驗室中的 Azure 儲存體容器。 當您新增巢狀範本資源至存放庫和主要範本檔案後,Visual Studio 會識別 _artifactsLocation_artifactsLocationSasToken 值、複製子資料夾至儲存體容器,並將位置和共用存取簽章 (SaS) 權杖插入參數檔案。

巢狀範本資料夾結構

在下列範本範例中,Git 存放庫資料夾包含子資料夾、巢狀範本,及 NestOne.jsonNestOne.parameters.json 的巢狀範本檔案。 azuredeploy.json 主要範本檔案會使用成品位置、巢狀範本資料夾和巢狀範本檔名,組建次要範本的 URI。 參數檔案的 URI 是成品位置、巢狀範本資料夾和巢狀範本參數檔案。 您可以新增更多巢狀範本子資料夾至主要資料夾,但只有一個巢狀層級。

下列螢幕擷取畫面顯示 Visual Studio 的專案結構:

顯示 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": {}

下一步