練習 - 使用 what-if 命令來預覽變更
注意
當您第一次啟動沙箱並接受條款時,您的 Microsoft 帳戶會與名為「Microsoft Learn 沙箱」的新 Azure 目錄建立關聯。 系統也會將您新增至名為「指引訂用帳戶」的特殊訂用帳戶。
您玩具公司的設計小組,要求您更新設定虛擬網路的範本。 在此單元中,您使用了假設狀況確認部署更新範本的效果。
在此過程中,您將會:
- 建立及部署初始範本。
- 準備一個部署稍微不同的範本,並使用假設作業,檢查所預期的變更。
- 使用完整部署部署一份空白範本,然後使用假設作業,檢查所預期的變更。
此練習使用適用於 Visual Studio Code 的 Azure Resource Manager 工具。 請務必在 Visual Studio Code 中安裝此延伸模組。
此練習使用適用於 Visual Studio Code 的 Bicep 延伸模組。 請務必在 Visual Studio Code 中安裝此延伸模組。
建立起始範本
您會從小組先前使用過的既有範本開始。 該範本會建立虛擬網路。
打開 Visual Studio Code。
建立稱為 azuredeploy.json 的新檔案。
儲存空白檔案,讓 Visual Studio Code 載入 ARM 範本工具。
您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如,您可能需要建立指令碼資料夾來儲存檔案。
將下列程式碼複製到 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" } } ] } } ] }
儲存範本。
打開 Visual Studio Code。
建立名為 main.bicep 的新檔案。
儲存空檔案,讓 Visual Studio Code 載入 Bicep 工具。
您可以選取 [檔案]>[另存新檔],或在 Windows 中選取Ctrl+S (macOS 為 ⌘+S)。 請務必記住您儲存檔案的位置。 例如,您可能需要建立指令碼資料夾來儲存檔案。
將下列程式碼複製到 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' } } ] } }
儲存範本。
將範本部署至 Azure
若要將此範本部署至 Azure,請從 Visual Studio Code 終端登入 Azure 帳戶。 請確定您已安裝 Azure PowerShell,並登入啟動沙箱的相同帳戶。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗右側顯示的殼層是 powershell 或 pwsh,則已開啟正確的殼層,而您可以跳至下一節。
如果出現 powershell 或 pwsh 以外的殼層,則請選取殼層下拉式清單箭號,然後選取 [PowerShell]。
在終端機殼層清單中,選取 [powershell] 或 [pwsh]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:
Set-Location -Path templates
安裝 Bicep CLI
若要從 Azure PowerShell 使用 Bicep,請安裝 Bicep CLI。
使用 Azure PowerShell 登入 Azure
在 Visual Studio Code 終端中,執行下列命令:
Connect-AzAccount
瀏覽器隨即開啟,讓您可以登入您的 Azure 帳戶。
登入 Azure 之後,您會在終端機中看到與此帳戶相關聯的訂用帳戶清單。
如果您已啟動沙箱,則會顯示名為「指引訂用帳戶」的訂用帳戶。 請在接下來的練習中使用此訂用帳戶。
將您在此工作階段中執行的所有 Azure PowerShell 命令,設定為預設的訂用帳戶。
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
注意
如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。
取得訂用帳戶識別碼。 執行下列命令會列出您的訂用帳戶與其識別碼。 尋找
Concierge Subscription
,然後複製第二個資料行的識別碼。 其看起來像cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0
。Get-AzSubscription
將您使用中的訂用帳戶變更為「指引訂用帳戶」。 請務必將 {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,並記得使用您用來啟動沙箱的相同帳戶登入。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗右側顯示的殼層為 [bash],則正確的殼層隨即開啟,而您可以跳至下一節。
如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Azure Cloud Shell (Bash)]。
在終端機殼層清單中,選取 [bash]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:
cd templates
安裝 Bicep
執行以下命令,確保您有最新版本 Bicep:
az bicep install && az bicep upgrade
登入 Azure
在 Visual Studio Code 終端中,執行下列命令以登入 Azure:
az login
在開啟的瀏覽器中,登入您的 Azure 帳戶。
Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。
將您在此工作階段中執行的所有 Azure CLI 命令,設定為預設的訂用帳戶。
az account set --subscription "Concierge Subscription"
注意
如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。
取得指引訂用帳戶識別碼。
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
使用訂用帳戶識別碼設定預設訂用帳戶。 將 {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,並登入啟動沙箱的相同帳戶。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗右側顯示的殼層是 powershell 或 pwsh,則已開啟正確的殼層,而您可以跳至下一節。
如果出現 powershell 或 pwsh 以外的殼層,則請選取殼層下拉式清單箭號,然後選取 [PowerShell]。
在終端機殼層清單中,選取 [powershell] 或 [pwsh]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存在 templates 資料夾,則可使用此命令:
Set-Location -Path templates
使用 Azure PowerShell 登入 Azure
在 Visual Studio Code 終端中,執行下列命令:
Connect-AzAccount
瀏覽器隨即開啟,讓您可以登入您的 Azure 帳戶。
登入 Azure 之後,您會在終端機中看到與此帳戶相關聯的訂用帳戶清單。
如果您已啟動沙箱,則會顯示名為「指引訂用帳戶」的訂用帳戶。 請在接下來的練習中使用此訂用帳戶。
將您在此工作階段中執行的所有 Azure PowerShell 命令,設定為預設的訂用帳戶。
$context = Get-AzSubscription -SubscriptionName 'Concierge Subscription' Set-AzContext $context
注意
如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。
取得訂用帳戶識別碼。 執行下列命令會列出您的訂用帳戶與其識別碼。 尋找
Concierge Subscription
,然後複製第二個資料行的識別碼。 其看起來像cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0
。Get-AzSubscription
將您使用中的訂用帳戶變更為「指引訂用帳戶」。 請務必將 {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,並記得使用您用來啟動沙箱的相同帳戶登入。
在 [終端機] 功能表上,選取 [新增終端機]。 終端機視窗通常隨即在畫面的下半部開啟。
如果終端視窗右側顯示的殼層為 [bash],則正確的殼層隨即開啟,而您可以跳至下一節。
如果出現 bash 以外的殼層,請選取殼層下拉式清單箭號,然後選取 [Azure Cloud Shell (Bash)]。
在終端機殼層清單中,選取 [bash]。
在終端機中,前往您儲存範本的目錄。 例如,若將範本儲存於 templates 資料夾,則可使用此命令:
cd templates
登入 Azure
在 Visual Studio Code 終端中,執行下列命令以登入 Azure:
az login
在開啟的瀏覽器中,登入您的 Azure 帳戶。
Visual Studio Code 終端機會顯示與此帳戶相關聯的訂用帳戶清單。
將您在此工作階段中執行的所有 Azure CLI 命令,設定為預設的訂用帳戶。
az account set --subscription "Concierge Subscription"
注意
如果您最近使用多個沙箱,則終端機可能會顯示多個「指引訂用帳戶」執行個體。 在此情況下,請使用接下來的兩個步驟來將其設定為預設訂用帳戶。 如果上述命令成功,且只列出一個「指引訂用帳戶」,則請略過接下來的兩個步驟。
取得指引訂用帳戶識別碼。
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
使用訂用帳戶識別碼設定預設訂用帳戶。 將 {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 入口網站,並確定您位於沙箱訂閱中:
在頁面上方角落選取頭像。
選取 [切換目錄]。 在清單中,選取 [Microsoft Learn 沙箱] 目錄。
選取 [資源群組]。
選取 [沙箱資源群組名稱]。
在 [概觀] 中,您會看到一個部署成功。
選取 [1 成功] 以查看部署的詳細資料。
選取 main 部署,以查看已部署的資源。 在此案例中,已部署一個具有兩個子網路的虛擬網路 (位址空間 10.0.0.0/16)。
讓頁面在瀏覽器中保持開啟狀態,以便稍後再次檢查部署。
修改範本
在 Visual Studio Code 的 azuredeploy.json 檔案中,刪除名稱為
Owner
的標籤與其值。 完成後,虛擬網路的tags
屬性看起來應該像這樣:"tags": { "CostCenter": "12345" },
更新
addressPrefixes
以將/16
變更為/15
。 完成後,虛擬網路的addressSpace
屬性看起來應該像這樣:"addressSpace": { "addressPrefixes": [ "10.0.0.0/15" ] },
刪除名為
subnet001
的子網路。 請務必刪除整個子網路物件。 完成後,虛擬網路的subnets
屬性看起來應該像這樣:"subnets": [ { "name": "subnet002", "properties": { "addressPrefix": "10.0.1.0/24" } } ]
儲存範本。
在 Visual Studio Code 的 main.bicep 檔案中,刪除名稱為
Owner
的標籤與其值。 完成後,虛擬網路的tags
屬性看起來應該像這樣:tags: { 'CostCenter': '12345' }
更新
addressPrefixes
以將/16
變更為/15
。 完成後,虛擬網路的addressSpace
屬性看起來應該像這樣:addressSpace: { addressPrefixes: [ '10.0.0.0/15' ] }
刪除名為
subnet001
的子網路。 請務必刪除整個子網路物件。 完成後,虛擬網路的subnets
屬性看起來應該像這樣:subnets: [ { name: 'subnet002' properties: { addressPrefix: '10.0.1.0/24' } } ]
儲存範本。
使用修改後的範本執行假設狀況命令
請搭配 -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
假設狀況輸出大致如下:
請注意,結果除了具有前置詞之外,還會以色彩標示:
- 紫色與 ~ 代表任何修改
- 綠色與 + 代表要建立的新資源
- 橘色與 - 代表刪除
移除範本中的資源
更新 Visual Studio Code 中的 azuredeploy.json 檔案,然後移除
resources
陣列的所有內容。 完成時,範本看似如下:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ ] }
儲存範本。
在 Visual Studio Code 的 main.bicep 檔案內,刪除檔案的所有內容,但不刪除檔案本身。
儲存範本。
使用完整模式與確認選項進行部署
在接下來的步驟中,您將會在現有的環境中部署空白範本。
警告
在現實中進行這項操作,「將會移除」您在雲端中的所有內容。 下列程式碼是需要動點腦筋的有趣實驗,但使用此模式時務必多加留意。 如果您不喜歡建議的變更,請至少使用 -Confirm
旗標來停止此作業。
警告
在現實中進行這項操作,「將會移除」您在雲端中的所有內容。 下列程式碼是需要動點腦筋的有趣實驗,但使用此模式時務必多加留意。 如果您不喜歡建議的變更,請至少使用 --confirm-with-what-if
旗標來停止此作業。
搭配
-Mode Complete
旗標執行New-AzResourceGroupDeployment
,以完整模式執行部署:New-AzResourceGroupDeployment ` -Mode Complete ` -Confirm ` -TemplateFile main.bicep
您的輸出看起來如下:
請注意輸出的最後一行是確認。 其要求您選取 y 或 n 以繼續。
請針對 [[A] 全部皆是] 輸入 A,以執行部署並清理您的環境。
搭配
-Mode Complete
旗標執行New-AzResourceGroupDeployment
,以完整模式執行部署:New-AzResourceGroupDeployment ` -Mode Complete ` -Confirm ` -TemplateFile azuredeploy.json
您的輸出看起來如下:
請注意輸出的最後一行是確認。 其要求您選取 y 或 n 以繼續。
請針對 [[A] 全部皆是] 輸入 A,以執行部署並清理您的環境。
使用旗標
--mode Complete
執行az deployment group create
,以完整模式建立部署:az deployment group create \ --mode Complete \ --confirm-with-what-if \ --template-file main.bicep
您的輸出看起來如下:
請注意輸出的最後一行是確認。 其要求您選取 y 或 n 以繼續。
請輸入 y (是) 以執行部署並清理您的環境。
使用旗標
--mode Complete
執行az deployment group create
,以完整模式建立部署:az deployment group create \ --mode Complete \ --confirm-with-what-if \ --template-file azuredeploy.json
您的輸出看起來如下:
請注意輸出的最後一行是確認。 其要求您選取 y 或 n 以繼續。
請輸入 y (是) 以執行部署並清理您的環境。
檢查部署
返回您稍早使用並已開啟的瀏覽器。 驗證虛擬網路已不再存在,如下列螢幕擷取畫面所示: