練習 - 使用 what-if 命令來預覽變更

已完成

注意

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

您玩具公司的設計小組,要求您更新設定虛擬網路的範本。 在此單元中,您使用了假設狀況確認部署更新範本的效果。

在此過程中,您將會:

  • 建立及部署初始範本。
  • 準備一個部署稍微不同的範本,並使用假設作業,檢查所預期的變更。
  • 使用完整部署部署一份空白範本,然後使用假設作業,檢查所預期的變更。

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

此練習使用適用於 Visual Studio Code 的 Bicep 延伸模組。 請務必在 Visual Studio Code 中安裝此延伸模組。

建立起始範本

您會從小組先前使用過的既有範本開始。 該範本會建立虛擬網路。

  1. 打開 Visual Studio Code。

  2. 建立稱為 azuredeploy.json 的新檔案。

  3. 儲存空白檔案,讓 Visual Studio Code 載入 ARM 範本工具。

    您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如,您可能需要建立指令碼資料夾來儲存檔案。

  4. 將下列程式碼複製到 azuredeploy.json 中。

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {},
      "variables": {},
      "resources": [
        {
          "apiVersion": "2024-01-01",
          "type": "Microsoft.Network/virtualNetworks",
          "name": "vnet-001",
          "location": "[resourceGroup().location]",
          "tags": {
            "CostCenter": "12345",
            "Owner": "Team A"
          },
          "properties": {
            "addressSpace": {
              "addressPrefixes": [
                "10.0.0.0/16"
              ]
            },
            "enableVmProtection": false,
            "enableDdosProtection": false,
            "subnets": [
              {
                "name": "subnet001",
                "properties": {
                  "addressPrefix": "10.0.0.0/24"
                }
              },
              {
                "name": "subnet002",
                "properties": {
                  "addressPrefix": "10.0.1.0/24"
                }
              }
            ]
          }
        }
      ]
    }
    
  5. 儲存範本。

  1. 打開 Visual Studio Code。

  2. 建立名為 main.bicep 的新檔案。

  3. 儲存空檔案,讓 Visual Studio Code 載入 Bicep 工具。

    您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如,您可能需要建立指令碼資料夾來儲存檔案。

  4. 將下列程式碼複製到 main.bicep

    resource vnet 'Microsoft.Network/virtualNetworks@2024-01-01' = {
      name: 'vnet-001'
      location: resourceGroup().location
      tags: {
        'CostCenter': '12345'
        'Owner': 'Team A'
      }
      properties: {
        addressSpace: {
          addressPrefixes: [
            '10.0.0.0/16'
          ]
        }
        enableVmProtection: false
        enableDdosProtection: false
        subnets: [
          {
            name: 'subnet001'
            properties: {
              addressPrefix: '10.0.0.0/24'
            }
          }
          {
            name: 'subnet002'
            properties: {
              addressPrefix: '10.0.1.0/24'
            }
          }
        ]
      }
    }
    
  5. 儲存範本。

將範本部署至 Azure

若要將此範本部署至 Azure,請從 Visual Studio Code 終端登入 Azure 帳戶。 請確定您已安裝 Azure PowerShell,並登入啟動沙箱的相同帳戶。

  1. 在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。

  2. 如果終端視窗右側顯示的殼層是 powershellpwsh,則已開啟正確的殼層,而您可以跳至下一節。

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中殼層下拉式清單中顯示 [pwsh] 選項。

  3. 如果出現 powershellpwsh 以外的殼層,則請選取殼層下拉式清單箭號,然後選取 [PowerShell]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中顯示終端機殼層下拉式清單且已選取 [PowerShell]。

  4. 在終端機殼層清單中,選取 [powershell] 或 [pwsh]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中已選取 PowerShell 終端機。

  5. 在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:

    Set-Location -Path templates
    

安裝 Bicep CLI

若要從 Azure PowerShell 使用 Bicep,請安裝 Bicep CLI

使用 Azure PowerShell 登入 Azure

  1. 在 Visual Studio Code 終端中,執行下列命令:

    Connect-AzAccount
    

    瀏覽器隨即開啟,讓您可以登入您的 Azure 帳戶。

  2. 登入 Azure 之後,您會在終端機中看到與此帳戶相關聯的訂用帳戶清單。

    如果您已啟動沙箱,則會顯示名為「指引訂用帳戶」的訂用帳戶。 請在接下來的練習中使用此訂用帳戶。

  3. 將您在此工作階段中執行的所有 Azure PowerShell 命令,設定為預設的訂用帳戶。

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    注意

    如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。

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

    Get-AzSubscription
    
  5. 將您使用中的訂用帳戶變更為「指引訂用帳戶」。 請務必將 {Your subscription ID} 取代為您複製的訂用帳戶。

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

設定預設資源群組

您可以設定預設資源群組,並省略本練習中其餘的 Azure PowerShell 命令參數。 將此預設值設定為在沙箱環境中為您建立的資源群組。

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

若要將此範本部署至 Azure,您必須從 Visual Studio Code 終端機登入您的 Azure 帳戶。 請確定您已安裝 Azure CLI,並記得使用您用來啟動沙箱的相同帳戶登入。

  1. 在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。

  2. 如果終端視窗右側顯示的殼層為 [bash],則正確的殼層隨即開啟,而您可以跳至下一節。

    Visual Studio Code 終端視窗的螢幕擷取畫面,其中顯示 bash 選項。

  3. 如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Azure Cloud Shell (Bash)]

    Visual Studio Code 終端視窗的螢幕擷取畫面,其中顯示終端殼層下拉式清單並已選取 [Git Bash (預設)]。

  4. 在終端機殼層清單中,選取 [bash]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中已選取 Bash 終端機。

  5. 在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:

    cd templates
    

安裝 Bicep

執行以下命令,確保您有最新版本 Bicep:

az bicep install && az bicep upgrade

登入 Azure

  1. 在 Visual Studio Code 終端中,執行下列命令以登入 Azure:

    az login
    
  2. 在開啟的瀏覽器中,登入您的 Azure 帳戶。

    Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。

  3. 將您在此工作階段中執行的所有 Azure CLI 命令,設定為預設的訂用帳戶。

    az account set --subscription "Concierge Subscription"
    

    注意

    如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。

  4. 取得指引訂用帳戶識別碼。

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. 使用訂用帳戶識別碼設定預設訂用帳戶。 將 {your subscription ID} 取代為最新的指引訂用帳戶識別碼。

    az account set --subscription {your subscription ID}
    

設定預設資源群組

使用 Azure CLI 時,您可以設定預設的資源群組,並省略本練習中其餘的 Azure CLI 命令參數。 將預設值設定為在沙箱環境中為您建立的資源群組。

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

若要將此範本部署至 Azure,請從 Visual Studio Code 終端登入 Azure 帳戶。 請確定您已安裝 Azure PowerShell,並登入啟動沙箱的相同帳戶。

  1. 在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。

  2. 如果終端視窗右側顯示的殼層是 powershellpwsh,則已開啟正確的殼層,而您可以跳至下一節。

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中殼層下拉式清單中顯示 [pwsh] 選項。

  3. 如果出現 powershellpwsh 以外的殼層,則請選取殼層下拉式清單箭號,然後選取 [PowerShell]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中顯示終端機殼層下拉式清單且已選取 [PowerShell]。

  4. 在終端機殼層清單中,選取 [powershell] 或 [pwsh]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中已選取 PowerShell 終端機。

  5. 在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:

    Set-Location -Path templates
    

使用 Azure PowerShell 登入 Azure

  1. 在 Visual Studio Code 終端中,執行下列命令:

    Connect-AzAccount
    

    瀏覽器隨即開啟,讓您可以登入您的 Azure 帳戶。

  2. 登入 Azure 之後,您會在終端機中看到與此帳戶相關聯的訂用帳戶清單。

    如果您已啟動沙箱,則會顯示名為「指引訂用帳戶」的訂用帳戶。 請在接下來的練習中使用此訂用帳戶。

  3. 將您在此工作階段中執行的所有 Azure PowerShell 命令,設定為預設的訂用帳戶。

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    注意

    如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。

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

    Get-AzSubscription
    
  5. 將您使用中的訂用帳戶變更為「指引訂用帳戶」。 請務必將 {Your subscription ID} 取代為您複製的訂用帳戶。

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

設定預設資源群組

您可以設定預設資源群組,並省略本練習中其餘的 Azure PowerShell 命令參數。 將此預設值設定為在沙箱環境中為您建立的資源群組。

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

若要將此範本部署至 Azure,您必須從 Visual Studio Code 終端機登入您的 Azure 帳戶。 請確定您已安裝 Azure CLI,並記得使用您用來啟動沙箱的相同帳戶登入。

  1. 在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。

  2. 如果終端視窗右側顯示的殼層為 [bash],則正確的殼層隨即開啟,而您可以跳至下一節。

    Visual Studio Code 終端視窗的螢幕擷取畫面,其中顯示 bash 選項。

  3. 如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Azure Cloud Shell (Bash)]

    Visual Studio Code 終端視窗的螢幕擷取畫面,其中顯示終端殼層下拉式清單並已選取 [Git Bash (預設)]。

  4. 在終端機殼層清單中,選取 [bash]

    Visual Studio Code 終端機視窗的螢幕擷取畫面,其中已選取 Bash 終端機。

  5. 在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:

    cd templates
    

登入 Azure

  1. 在 Visual Studio Code 終端中,執行下列命令以登入 Azure:

    az login
    
  2. 在開啟的瀏覽器中,登入您的 Azure 帳戶。

    Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。

  3. 將您在此工作階段中執行的所有 Azure CLI 命令,設定為預設的訂用帳戶。

    az account set --subscription "Concierge Subscription"
    

    注意

    如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。

  4. 取得指引訂用帳戶識別碼。

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. 使用訂用帳戶識別碼設定預設訂用帳戶。 將 {your subscription ID} 取代為最新的指引訂用帳戶識別碼。

    az account set --subscription {your subscription ID}
    

設定預設資源群組

使用 Azure CLI 時,您可以設定預設的資源群組,並省略本練習中其餘的 Azure CLI 命令參數。 將預設值設定為在沙箱環境中為您建立的資源群組。

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

使用 Azure PowerShell 部署範本

執行 New-AzResourceGroupDeployment 可部署範本。

New-AzResourceGroupDeployment -TemplateFile main.bicep

[正在執行] 的文字會出現在終端機中。 部署可能需要一或兩分鐘才能完成。

使用 Azure PowerShell 部署範本

執行 New-AzResourceGroupDeployment 可部署範本。

New-AzResourceGroupDeployment -TemplateFile azuredeploy.json

[正在執行] 的文字會出現在終端機中。 部署可能需要一或兩分鐘才能完成。

使用 Azure CLI 部署範本

執行 az deployment group create 可部署範本。

az deployment group create --template-file main.bicep

部署可能需要一或兩分鐘才能完成。

使用 Azure CLI 部署範本

執行 az deployment group create 可部署範本。

az deployment group create --template-file azuredeploy.json

部署可能需要一或兩分鐘才能完成。

檢查部署

若要驗證部署是否已建立並傳送至 Azure,請移至 Azure 入口網站,並確定您位於沙箱訂閱中:

  1. 在頁面上方角落選取頭像。

  2. 選取 [切換目錄]。 在清單中,選取 [Microsoft Learn 沙箱] 目錄。

  3. 選取 [資源群組]。

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

  5. 在 [概觀] 中,您會看到一個部署成功。

  6. 選取 [1 成功] 以查看部署的詳細資料。

    部署之 Azure 入口網站介面的螢幕擷取畫面,其中列出一個部署和成功狀態。

  7. 選取 main 部署,以查看已部署的資源。 在此案例中,已部署一個具有兩個子網路的虛擬網路 (位址空間 10.0.0.0/16)。

    螢幕擷取畫面:特定部署的 Azure 入口網站介面,其中未列出任何資源。

    螢幕擷取畫面:特定部署的 Azure 入口網站介面,其中列出一個虛擬網路資源。

    讓頁面在瀏覽器中保持開啟狀態,以便稍後再次檢查部署。

修改範本

  1. 在 Visual Studio Code 的 azuredeploy.json 檔案中,刪除名稱為 Owner 的標籤與其值。 完成後,虛擬網路的 tags 屬性看起來應該像這樣:

    "tags": {
      "CostCenter": "12345"
    },
    
  2. 更新 addressPrefixes 以將 /16 變更為 /15。 完成後,虛擬網路的 addressSpace 屬性看起來應該像這樣:

    "addressSpace": {
      "addressPrefixes": [
        "10.0.0.0/15"
      ]
    },
    
  3. 刪除名為 subnet001 的子網路。 請務必刪除整個子網路物件。 完成後,虛擬網路的 subnets 屬性看起來應該像這樣:

    "subnets": [
      {
        "name": "subnet002",
        "properties": {
          "addressPrefix": "10.0.1.0/24"
        }
      }
    ]
    
  4. 儲存範本。

  1. 在 Visual Studio Code 的 main.bicep 檔案中,刪除名稱為 Owner 的標籤與其值。 完成後,虛擬網路的 tags 屬性看起來應該像這樣:

    tags: {
      'CostCenter': '12345'
    }
    
  2. 更新 addressPrefixes 以將 /16 變更為 /15。 完成後,虛擬網路的 addressSpace 屬性看起來應該像這樣:

    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/15'
      ]
    }
    
  3. 刪除名為 subnet001 的子網路。 請務必刪除整個子網路物件。 完成後,虛擬網路的 subnets 屬性看起來應該像這樣:

    subnets: [
      {
        name: 'subnet002'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
    
  4. 儲存範本。

使用修改後的範本執行假設狀況命令

請搭配 -WhatIf 旗標執行 New-AzResourceGroupDeployment,以執行 what-if 作業。

New-AzResourceGroupDeployment `
  -WhatIf `
  -TemplateFile main.bicep

請搭配 -WhatIf 旗標執行 New-AzResourceGroupDeployment,以執行 what-if 作業。

New-AzResourceGroupDeployment `
  -WhatIf `
  -TemplateFile azuredeploy.json

執行 az deployment group what-if 以執行假設狀況作業:

az deployment group what-if \
  --template-file main.bicep

執行 az deployment group what-if 以執行假設狀況作業:

az deployment group what-if \
  --template-file azuredeploy.json

假設狀況輸出大致如下:

Azure CLI 的螢幕擷取畫面,其中顯示假設狀況作業的輸出。

Azure PowerShell 的螢幕擷取畫面,其中顯示假設狀況作業的輸出。

請注意,結果除了具有前置詞之外,還會以色彩標示:

  • 紫色與 ~ 代表任何修改
  • 綠色與 + 代表要建立的新資源
  • 橘色與 - 代表刪除

移除範本中的資源

  1. 更新 Visual Studio Code 中的 azuredeploy.json 檔案,然後移除 resources 陣列的所有內容。 完成時,範本看似如下:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "resources": [
      ]
    }
    
  2. 儲存範本。

  1. 在 Visual Studio Code 的 main.bicep 檔案內,刪除檔案的所有內容,但不刪除檔案本身。

  2. 儲存範本。

使用完整模式與確認選項進行部署

在接下來的步驟中,您將會在現有的環境中部署空白範本。

警告

在現實中進行這項操作,「將會移除」您在雲端中的所有內容。 下列程式碼是需要動點腦筋的有趣實驗,但使用此模式時務必多加留意。 如果您不喜歡建議的變更,請至少使用 -Confirm 旗標來停止此作業。

警告

在現實中進行這項操作,「將會移除」您在雲端中的所有內容。 下列程式碼是需要動點腦筋的有趣實驗,但使用此模式時務必多加留意。 如果您不喜歡建議的變更,請至少使用 --confirm-with-what-if 旗標來停止此作業。

  1. 搭配 -Mode Complete 旗標執行 New-AzResourceGroupDeployment,以完整模式執行部署:

    New-AzResourceGroupDeployment `
    -Mode Complete `
    -Confirm `
    -TemplateFile main.bicep
    

    您的輸出看起來如下:

    Azure PowerShell 的螢幕擷取畫面,其中顯示部署確認作業的輸出。

    請注意輸出的最後一行是確認。 其要求您選取 yn 以繼續。

  2. 請針對 [[A] 全部皆是] 輸入 A,以執行部署並清理您的環境。

  1. 搭配 -Mode Complete 旗標執行 New-AzResourceGroupDeployment,以完整模式執行部署:

    New-AzResourceGroupDeployment `
    -Mode Complete `
    -Confirm `
    -TemplateFile azuredeploy.json
    

    您的輸出看起來如下:

    Azure PowerShell 的螢幕擷取畫面,其中顯示部署確認作業的輸出。

    請注意輸出的最後一行是確認。 其要求您選取 yn 以繼續。

  2. 請針對 [[A] 全部皆是] 輸入 A,以執行部署並清理您的環境。

  1. 使用旗標 --mode Complete 執行 az deployment group create,以完整模式建立部署:

    az deployment group create \
      --mode Complete \
      --confirm-with-what-if \
      --template-file main.bicep
    

    您的輸出看起來如下:

    Azure CLI 的螢幕擷取畫面,其中顯示部署確認作業的輸出。

    請注意輸出的最後一行是確認。 其要求您選取 yn 以繼續。

  2. 請輸入 y (是) 以執行部署並清理您的環境。

  1. 使用旗標 --mode Complete 執行 az deployment group create,以完整模式建立部署:

    az deployment group create \
      --mode Complete \
      --confirm-with-what-if \
      --template-file azuredeploy.json
    

    您的輸出看起來如下:

    Azure CLI 的螢幕擷取畫面,其中顯示部署確認作業的輸出。

    請注意輸出的最後一行是確認。 其要求您選取 yn 以繼續。

  2. 請輸入 y (是) 以執行部署並清理您的環境。

檢查部署

返回您稍早使用並已開啟的瀏覽器。 驗證虛擬網路已不再存在,如下列螢幕擷取畫面所示:

此螢幕擷取畫面顯示完整部署的 Azure 入口網站介面,其中不再列出虛擬網路資源。