練習 - 部署連結與巢狀的 ARM 範本

已完成

注意

當您第一次啟動沙箱並接受條款時,您的 Microsoft 帳戶會與名為「Microsoft Learn 沙箱」的新 Azure 目錄建立關聯。 系統會將您新增至名為 Concierge Subscription 的特殊訂用帳戶。

在這裡,您會在提供的沙箱環境中,部署包含兩個連結範本的範本。

此練習會使用適用於 Visual Studio Code 的 Azure Resource Manager 工具。 請務必在 Visual Studio Code 中安裝此延伸模組。

使用提供的 Azure 沙箱訂用帳戶來設定測試環境

您必須從 Visual Studio Code 終端機登入 Azure 帳戶,才能執行本單元中的每個部署。

確定您登入的是已啟用沙箱的相同帳戶。

登入 Azure

  1. 從 Visual Studio Code 中的終端機,執行下列命令以登入 Azure。 執行此命令會開啟瀏覽器,讓您能夠登入帳戶。

    Connect-AzAccount
    
  2. 登入之後,即會在終端機中看到與此帳戶建立關聯的訂用帳戶清單。 如已啟用沙箱,則此清單中應會顯示指引訂用帳戶。

  3. 取得訂用帳戶識別碼。 下列命令會使用易於讀取的資料表格式列出訂用帳戶及其識別碼。 訂用帳戶識別碼是第二個資料行。 尋找 Concierge Subscription,並複製第二個資料行。 其看起來像 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e

    Get-AzSubscription
    
  4. 將作用中訂用帳戶變更為指引訂用帳戶。 請務必將 {Your subscription ID} 替換為在上一個命令中取得的指引訂用帳戶識別碼。

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

設定預設資源群組

您現在必須將在沙箱中建立的資源群組設定為預設資源群組。 您必須先使用下列命令取得資源群組名稱,才能執行此作業:

Get-AzResourceGroup

在此命令中,使用從上一個命令中獲得的資源名稱。 其看起來像 learn-a73131a1-b618-48b8-af70-21af7ca420c4。 此命令可讓您在本練習的其餘 Azure PowerShell 命令中省略該參數。

注意

一般而言,當使用 PowerShell 或 Azure CLI 命令來部署範本時,即需要指定目標資源群組名稱。 在本課程模組的練習中,我們會藉由設定部署內容以略過這項需求。 我們會在下一個步驟中,藉由 Set-AzDefault PowerShell 命令以指定沙箱資源群組名稱。

Set-AzDefault -ResourceGroupName {Resource Group Name}

部署連結的範本

在本練習中,我們會檢閱並部署包含兩個連結範本的範本。

  1. 若要將連結範本新增至 ARM 範本,請新增 Microsoft.Resources/deployments 資源以及使用範本位置設定的 templateLink 屬性。

  2. 在下列範例範本中,請注意有兩個變數會定義位於 GitHub 存放庫的遠端或外部範本。

    檢閱範本並記下 "type": "Microsoft.Resources/deployments" 區段,其中會定義連結範本的部署位置及方式。

    第一個連結範本會部署儲存體帳戶。 該範本會取用父參數並部署儲存體範本。

    第二個連結範本會設定為相依於存放裝置部署,並部署虛擬網路範本。

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-2')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {}
    }
    
  3. 請複製上個範本的內容,並貼到本機目錄中的檔案。 例如,使用 C:\JSON\linkedtemplate.json

  4. 將該檔案儲存到本機之後,請在上個單元中提到的資源群組層級使用下列 PowerShell 命令進行部署。 亦即,使用 New-AzResourceGroupDeployment

        $templateFile="C:\JSON\linkedtemplate.json"
        $today=Get-Date -Format "MM-dd-yyyy"
        $DeploymentName="DeployLinkedTemplate-"+"$today"
    
        New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile
    

    完成之後,結果應該如下列範例所示。

    部署連結範本的結果。

  5. 驗證結果。

    1. 移至 Azure 入口網站,並確定您位於沙箱訂用帳戶中。 若要這麼做,請在頁面右上角選取您的虛擬人偶。 選取 [切換目錄]。 在清單中,選擇 [Microsoft Learn 沙箱] 目錄。

    2. 在左窗格中選取 [資源群組]

    3. 選取 [沙箱資源群組名稱]。

    4. 在 [概觀] 區域中,您會看到部署成功。 選取 [3 項成功],以查看部署的詳細資料。 (部署是否更加完整,取決於是否執行了上一個單元的練習。)

    部署的 Azure 入口網站介面,已列出一個部署且狀態為 [成功]。

    請注意,您只部署了一個範本,但入口網站的 [部署] 窗格中列出了三個。 這 3 個部署分別為主要範本及 2 個連結範本。

    特定部署的 Azure 入口網站介面,其中未列出任何資源。

登入 Azure

  1. 從 Visual Studio Code 中的終端機,執行下列命令以登入 Azure。 執行此命令會開啟瀏覽器,讓您能夠登入帳戶。

    az login
    
  2. 登入之後,即會在終端機中看到與此帳戶建立關聯的 JSON 訂用帳戶清單。 如已啟用沙箱,則此清單中應會顯示指引訂用帳戶。

  3. 取得訂用帳戶識別碼。 下列命令會列出您的訂用帳戶與其識別碼。 訂用帳戶識別碼在第三個資料行。 尋找 Concierge Subscription,並複製第三個資料行。 其看起來像 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e

    az account list -o table
    
  4. 將作用中訂用帳戶變更為指引訂用帳戶。 請務必將 {Your subscription ID} 替換為在上一個命令中取得的指引訂用帳戶識別碼。

    az account set -s {Your subscription ID}
    

設定預設資源群組

您現在必須將在沙箱中建立的資源群組設定為預設資源群組。 您必須先使用下列命令取得資源群組名稱,才能執行此作業:

az group list -o table

在此命令中,使用從上一個命令中取得的資源群組名稱。 (其看起來像這樣:learn-a73131a1-b618-48b8-af70-21af7ca420c4。)設定此預設讓您可在本練習的其餘 Azure CLI 命令中省略該參數。

注意

一般而言,當您使用 Azure CLI 命令來部署範本時,需要指定目標資源群組名稱。 在本課程模組的練習中,我們會藉由設定部署內容以略過這項需求。 我們會在下一個步驟中,藉由 az configure Azure CLI 命令以指定沙箱資源群組名稱。

az configure --defaults group={Resource Group Name}

部署連結的範本

在本練習中,我們會檢閱並部署包含兩個連結範本的範本。

  1. 若要將連結範本新增至 ARM 範本,請新增 Microsoft.Resources/deployments 資源以及使用範本位置設定的 templateLink 屬性。

  2. 在下列範例範本中,請注意有兩個變數會定義位於 GitHub 存放庫的遠端或外部範本。

    檢閱範本並記下 "type": "Microsoft.Resources/deployments" 區段,其中會定義連結範本的部署位置及方式。

    第一個連結範本會部署儲存體帳戶。 該範本會取用父參數並部署儲存體範本。

    第二個連結範本會設定為相依於存放裝置部署,並部署虛擬網路範本。

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
      {
          "name": "storage",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template')]",
                  "contentVersion": "1.0.0.0"
              },
              "parameters": {
                  "location": { "value": "[resourceGroup().location]" }
              }
          }
      },
      {
          "name": "identity",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "dependsOn": [
              "[resourceId('Microsoft.Resources/deployments','storage')]"
          ],
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template-2')]",
                  "contentVersion": "1.0.0.0"
              }
          }
      }
    ],
    "outputs": {}
    }
    
  3. 請複製上個範本的內容,並貼到本機目錄中的檔案。 例如,使用 C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json

  4. 將該檔案儲存到本機之後,請在資源群組層級使用下列 Azure CLI 命令進行部署。 亦即,使用 az deployment group create

    templateFile=/mnt/c/Users/<UserName>/json/linkedtemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile
    

    完成之後,應該會有如下列範例一樣的結果。 檢查 "provisioningState" 值以確認部署成功。

    {- Finished ..
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-3-2020-08-19",
      "properties": {
        "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Resources/deployments/storage",
                "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
                "resourceName": "storage",
                "resourceType": "Microsoft.Resources/deployments"
              }
            ],
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Resources/deployments/identity",
            "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
            "resourceName": "identity",
            "resourceType": "Microsoft.Resources/deployments"
          }
        ],
        "duration": "PT16.4639167S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Network/virtualNetworks/vnet-001",
            "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
          },
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
          }
        ],
        "outputs": {},
        "parameters": {
          "name": {
            "type": "String",
            "value": "linkeddemo001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Resources",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  null
                ],
                "properties": null,
                "resourceType": "deployments"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12700491000282730217",
        "templateLink": null,
        "timestamp": "2020-08-19T21:07:18.729310+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    
  5. 驗證結果。

    1. 移至 Azure 入口網站,並確定您位於沙箱訂用帳戶中。 若要這麼做,請在頁面右上角選取您的虛擬人偶。 選取 [切換目錄]。 在清單中,選擇 [Microsoft Learn 沙箱] 目錄。

    2. 在左窗格中選取 [資源群組]

    3. 選取 [沙箱資源群組名稱]。

    4. 在 [概觀] 區域中,您會看到部署已成功。 選取 [3 項成功],以查看部署的詳細資料。 (部署是否更加完整,取決於是否執行了上一個單元的練習。)

    部署的 Azure 入口網站介面,已列出一個部署且狀態為 [成功]。

    請注意,您只部署了一個範本,但入口網站的 [部署] 窗格中列出了三個。 這 3 個部署分別為主要範本及 2 個連結範本。

    特定部署的 Azure 入口網站介面,其中未列出任何資源。