Share via


教學課程:在 ARM 範本中使用條件

了解如何根據 Azure Resource Manager 範本 (ARM 範本) 中的條件來部署 Azure 資源。

設定資源部署順序教學課程中,您建立了虛擬機器、虛擬網路和其他相依資源,包括儲存體帳戶。 您可以不用每次都建立新的儲存體帳戶,而是讓使用者在建立新的儲存體帳戶與使用現有的儲存體帳戶之間做選擇。 為了達成此目標,您會定義額外的參數。 如果參數的值是 new,則會建立新的儲存體帳戶。 否則,會使用具有所提供名稱的現有儲存體帳戶。

Resource Manager template use condition diagram

本教學課程涵蓋下列工作:

  • 開啟快速入門範本
  • 修改範本
  • 部署範本
  • 清除資源

本教學課程只會涵蓋使用條件的基本案例。 如需詳細資訊,請參閱

如需涵蓋條件的 Learn 模組,請參閱使用進階 ARM 範本功能,管理複雜的雲端部署

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

必要條件

若要完成本文,您需要:

開啟快速入門範本

Azure 快速入門範本是 ARM 範本的存放庫。 您可以尋找範例範本並加以自訂,而不要從頭建立範本。 本教學課程中使用的範本名為部署簡單的 Windows VM

  1. 在 Visual Studio Code 中,選取 [檔案]>[開啟檔案]

  2. 在 [檔案名稱] 中,貼上下列 URL:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. 選取 [開啟] 以開啟檔案。

  4. 範本中定義了六項資源:

    在自訂範本之前,建議您先檢閱範本參考。

  5. 選取 [檔案]>[另存新檔],以名稱 azuredeploy.json 將檔案的複本儲存至您的本機電腦。

修改範本

對現有範本進行兩個變更:

  • 新增儲存體帳戶名稱參數。 使用者可以指定新的儲存體帳戶名稱或現有的儲存體帳戶名稱。
  • 新增名為 newOrExisting的新參數。 部署會使用這個參數來決定要建立新的儲存體帳戶或使用現有儲存體帳戶。

進行變更的程序如下:

  1. 在 Visual Studio Code 中,開啟 azuredeploy.json

  2. 在整個範本中將這三個 variables('storageAccountName') 取代為 parameters('storageAccountName')

  3. 移除下列變數定義:

    Screenshot that highlights the variable definitions that you need to remove.

  4. 將下列兩個參數新增至參數區段的開頭:

    "storageAccountName": {
      "type": "string"
    },
    "newOrExisting": {
      "type": "string",
      "allowedValues": [
        "new",
        "existing"
      ]
    },
    

    按 Alt+Shift+F 在 Visual Studio Code 中格式化範本。

    已更新的參數定義看起來如下:

    Resource Manager use condition

  5. 將下列行新增至儲存體帳戶定義的開頭。

    "condition": "[equals(parameters('newOrExisting'),'new')]",
    

    條件會檢查參數 newOrExisting 的值。 如果參數值是 new,則部署會建立儲存體帳戶。

    已更新的儲存體帳戶定義看起來如下:

    Screenshot that shows the updated storage account definition.

  6. 使用下列值更新虛擬機器資源定義的 storageUri 屬性:

    "storageUri": "[format('https://{0}.blob.core.windows.net', parameters('storageAccountName'))]"
    

    如果您要使用不同資源群組下的現有儲存體帳戶,就必須進行此變更。

  7. 儲存變更。

部署範本

  1. 登入 Cloud Shell

  2. 藉由選取左上角的 PowerShellBash (適用於 CLI) 來選擇您慣用的環境。 切換時必須重新啟動殼層。

    Azure portal Cloud Shell upload file

  3. 選取 [上傳/下載檔案],然後選取 [上傳]。 請參閱上一個螢幕擷取畫面。 選取您在前一節中儲存的檔案。 上傳檔案之後,您可以使用 ls 命令和 cat 命令來確認檔案是否已成功上傳。

  4. 然後執行下列 PowerShell 指令碼來部署範本。

    重要

    儲存體帳戶名稱必須是 Azure 中是獨一無二的。 名稱必須只有小寫字母或數字。 名稱長度不得超過 24 個字元。 儲存體帳戶名稱是附加 store 的專案名稱。 請確定專案名稱和所產生的儲存體帳戶名稱符合儲存體帳戶名稱需求。

    $projectName = Read-Host -Prompt "Enter a project name that is used to generate resource group name and resource names"
    $newOrExisting = Read-Host -Prompt "Create new or use existing (Enter new or existing)"
    $location = Read-Host -Prompt "Enter the Azure location (i.e. centralus)"
    $vmAdmin = Read-Host -Prompt "Enter the admin username"
    $vmPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString
    $dnsLabelPrefix = Read-Host -Prompt "Enter the DNS Label prefix"
    
    $resourceGroupName = "${projectName}rg"
    $storageAccountName = "${projectName}store"
    
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -adminUsername $vmAdmin `
        -adminPassword $vmPassword `
        -dnsLabelPrefix $dnsLabelPrefix `
        -storageAccountName $storageAccountName `
        -newOrExisting $newOrExisting `
        -TemplateFile "$HOME/azuredeploy.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    注意

    如果 newOrExistingnew,但是具有已指定儲存體帳戶名稱的儲存體帳戶已存在,則部署會失敗。

請嘗試將 newOrExisting 設為 existing 並且指定現有儲存體帳戶,來進行另一個部署。 若要事先建立儲存體帳戶,請參閱建立儲存體帳戶

清除資源

不再需要 Azure 資源時,可藉由刪除資源群組來清除您所部署的資源。 若要刪除資源群組,請選取 [試試看] 來開啟 Cloud Shell。 若要貼上 PowerShell 指令碼,請以滑鼠右鍵按一下 Shell 窗格,然後選取 [貼上]

$projectName = Read-Host -Prompt "Enter the same project name you used in the last procedure"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

下一步

在本教學課程中,您開發了範本,讓使用者在建立新儲存體帳戶與使用現有儲存體帳戶之間做選擇。 若要深入了解如何從 Azure Key Vault 擷取祕密,並且在範本部署中使用祕密作為密碼,請參閱: