教學課程:將參數新增至 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 處理器會在部署開始之前找到錯誤。
清除資源
如果您要繼續進行下一個教學課程,則不需要刪除資源群組。
如果您現在要停止,則可能想要刪除資源群組來清除您部署的資源。
- 在 Azure 入口網站中,選取左側功能表中的 [資源群組]。
- 在 [篩選任何欄位...] 文字欄位中輸入資源群組名稱。
- 核取 myResourceGroup 旁的方塊,然後選取 [myResourceGroup] 或資源群組名稱。
- 從頂端功能表中選取 [刪除資源群組]。
下一步
您已藉由新增參數來改善在第一個教學課程中建立的範本。 在下一個教學課程中,您將會了解範本函式。