教學課程:將參數新增至 ARM 範本

上一個教學課程中,您已了解如何將 Azure 儲存體帳戶新增至範本並加以部署。 在本教學課程中,您將了解如何藉由新增參數來改善 Azure Resource Manager 範本 (ARM 範本)。 完成此指示需要 14 分鐘的時間。

必要條件

我們建議您完成有關資源的教學課程,但並非必要。

您必須安裝 Visual Studio Code 並且與 Azure Resource Manager 工具延伸模組以及 Azure PowerShell 或 Azure 命令列介面 (CLI) 搭配使用。 如需詳細資訊,請參閱範本工具

檢閱範本

在上一個教學課程結束時,您的範本會具有下列 JSON 檔案:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "{provide-unique-name}",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

您可能已注意到此範本有問題。 儲存體帳戶名稱是硬式編碼的。 您每次只能使用此範本部署相同的儲存體帳戶。 若要部署不同名稱的儲存體帳戶,您必須建立新的範本,這顯然不是將部署自動化的實用方式。

讓範本可重複使用

為了讓範本可重複使用,我們會新增可用來傳入儲存體帳戶名稱的參數。 下列範例中醒目提示的 JSON 檔案會顯示範本中已變更的內容。 storageName 參數會識別為字串。 儲存體帳戶名稱全部都是小寫字母或數字,且限制為 24 個字元。

複製整個檔案,並以其內容取代您的範本。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

部署範本

讓我們來部署範本。 下列範例會使用 Azure CLI 或 PowerShell 來部署範本。 請注意,您會提供儲存體帳戶名稱作為部署命令中的其中一個值。 針對儲存體帳戶名稱,提供您在上一個教學課程中使用的相同名稱。

如果您尚未建立資源群組,請參閱建立資源群組。 此範例會假設您將 templateFile 變數設為範本檔案的路徑,如第一個教學課程中所示。

New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

了解資源更新

部署具有您先前所使用相同名稱的儲存體帳戶之後,您可能會想知道重新部署如何影響資源。

如果資源已經存在,而且屬性中沒有任何變更,就不需要採取進一步的動作。 如果資源存在且屬性變更,則會更新。 如果資源不存在,則會建立資源。

這種處理更新的方式,表示您的範本可以包含 Azure 解決方案所需的所有資源。 您可以安全地重新部署範本,並了解資源只有在需要時才會變更或建立。 例如,若您已將檔案新增至儲存體帳戶,您可以重新部署儲存體帳戶,而不會遺失那些檔案。

依環境自訂

參數讓您能提供針對特定環境的值來自訂部署。 例如,您可以根據是否要部署到開發、測試或實際執行環境,來傳遞不同的值。

先前的範本一律會部署標準本地備援儲存體 (LRS) Standard_LRS 帳戶。 您可能想要彈性地根據環境來部署不同的庫存單位 (SKU)。 下列範例顯示為 SKU 新增參數所做的變更。 複製整個檔案,並貼到您的範本上。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

storageSKU 參數有預設值。 當部署未指定值時,請使用此值。 它也有一份允許的值清單。 這些值符合建立儲存體帳戶所需的值。 您希望您的範本使用者傳遞可運作的 SKU。

重新部署範本

您已準備好再次進行部署。 因為預設 SKU 設定為 Standard_LRS,所以您已經提供參數值。

New-AzResourceGroupDeployment `
  -Name addskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

注意

如果部署失敗,請使用 verbose 參數來取得所建立資源的相關資訊。 使用 debug 參數來取得更多資訊以進行偵錯。

若要查看範本的彈性,讓我們再次進行部署。 這次將 SKU 參數設定為標準異地備援儲存體 (GRS) Standard_GRS。 您可以傳入新名稱來建立不同的儲存體帳戶,或使用相同名稱來更新現有的儲存體帳戶。 這兩個選項都可運作。

New-AzResourceGroupDeployment `
  -Name usenondefaultsku `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU Standard_GRS

最後,讓我們再執行一次測試,並查看當您傳入的 SKU 不是其中一個允許值時,會發生什麼事。 在此情況下,我們會測試範本使用者認為 basic 是其中一個 SKU 的案例。

New-AzResourceGroupDeployment `
  -Name testskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU basic

命令失敗並出現錯誤訊息,提供允許的值。 ARM 處理器會在部署開始之前找到錯誤。

清除資源

如果您要繼續進行下一個教學課程,則不需要刪除資源群組。

如果您現在要停止,則可能想要刪除資源群組來清除您部署的資源。

  1. 在 Azure 入口網站中,選取左側功能表中的 [資源群組]
  2. 在 [篩選任何欄位...] 文字欄位中輸入資源群組名稱。
  3. 核取 myResourceGroup 旁的方塊,然後選取 [myResourceGroup] 或資源群組名稱。
  4. 從頂端功能表中選取 [刪除資源群組]

下一步

您已藉由新增參數來改善在第一個教學課程中建立的範本。 在下一個教學課程中,您將會了解範本函式。