使用參數和輸出,為您的 Azure Resource Manager 範本增加彈性
在上一個單元中,您已建立 Azure Resource Manager (ARM) 範本,並將 Azure 儲存體帳戶新增至其中。 您可能注意到範本發生問題。 儲存體帳戶名稱是硬式編碼的。 您每次只能使用此範本部署相同的儲存體帳戶。 若要以不同名稱部署儲存體帳戶,必須建立新的範本,這不是將部署自動化的實用方式。 儲存體帳戶 SKU 也是硬式編碼的,也就是說,您無法針對不同的環境,改變儲存體帳戶的類型。 回想一下,在我們的案例中,每個部署都可能會有不同類型的儲存體帳戶。 您可以為儲存體帳戶 SKU 新增參數,讓您的範本增加重複使用性。
在此單元中,您將了解範本的 parameters 和 outputs 區段。
ARM 範本參數
ARM 範本參數讓您能提供針對特定環境的值來自訂部署。 例如,您可以根據是否要部署至用於開發、測試、實際執行等等的環境,傳入不同的值。 例如,先前的範本會使用 Standard_LRS 儲存體帳戶 SKU。 您可以將儲存體帳戶 SKU 的名稱設為參數,以針對可建立儲存體帳戶的其他部署,重複使用此範本。 接著,您要在部署範本時,傳入您想要用於此特定部署的 SKU 名稱。 您可以在命令列或使用參數檔案來執行此步驟。
在範本的 parameters
區段中,您要指定可以在部署資源時輸入的值。 一個範本的限制為 256 個參數。 參數定義可以使用大部分的範本函式。
參數的可用屬性包括:
"parameters": {
"<parameter-name>": {
"type": "<type-of-parameter-value>",
"defaultValue": "<default-value-of-parameter>",
"allowedValues": [
"<array-of-allowed-values>"
],
"minValue": <minimum-value-for-int>,
"maxValue": <maximum-value-for-int>,
"minLength": <minimum-length-for-string-or-array>,
"maxLength": <maximum-length-for-string-or-array-parameters>,
"metadata": {
"description": "<description-of-the-parameter>"
}
}
}
允許的參數類型為:
- string
- secureString
- integers
- boolean
- object
- secureObject
- 陣列
使用參數的建議
針對根據環境 (例如 SKU、大小或容量) 而有所不同的設定,請使用參數。 對於您想要自行指定以方便識別或要符合內部命名慣例的資源名稱,也請使用參數。 提供每個參數的描述,並盡可能使用預設值。
基於安全性理由,請務必不要為範本中的使用者名稱和/或密碼進行硬式編碼或提供預設值。 請一律為使用者名稱和密碼 (或祕密) 使用參數。 針對所有密碼和祕密使用 secureString。 如果您在 JSON 物件中傳遞敏感性資料,請使用 secureObject 類型。 資源部署之後,無法讀取或搜集具有 secureString 或 secureObject 類型的範本參數。
在 ARM 範本中使用參數
在 ARM 範本的 parameters 區段中,請指定您可在部署資源時輸入的參數。 一個範本的限制為 256 個參數。
以下是範本檔案的範例,其中儲存體帳戶 SKU 的參數定義於範本的 parameters
區段中。 如果在執行時未指定任何值,您可以為要使用的參數提供預設值。
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
}
}
接著,在資源定義中使用參數。 語法是 [parameters('name of the parameter')]
。 然後,當您部署時,請使用 parameters
函式。 在下一個課程模組中,您會深入了解函式。
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-05-01",
"name": "learntemplatestorage123",
"location": "[resourceGroup().location]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
當您部署範本時,可以提供參數的值。 請注意下列命令中的最後一行:
templateFile="azuredeploy.json"
az deployment group create \
--name testdeployment1 \
--template-file $templateFile \
--parameters storageAccountType=Standard_LRS
ARM 範本輸出
在 ARM 範本的輸出區段中,您可以指定將在成功部署後傳回的值。 以下是組成 outputs 區段的元素。
"outputs": {
"<output-name>": {
"condition": "<boolean-value-whether-to-output-value>",
"type": "<type-of-output-value>",
"value": "<output-value-expression>",
"copy": {
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
}
}
元素 | 描述 |
---|---|
output-name | 必須是有效的 JavaScript 識別碼。 |
condition | (選擇性) 布林值,指出是否傳回此輸出值。 如果是 True,此值會包含在部署的輸出中。 如果是 False,則會跳過此部署的輸出值。 若未指定,預設值為 True。 |
type | 輸出值的類型。 |
value | (選用) 將經過評估並傳回為輸出值的範本語言運算式。 |
copy | (選擇性) Copy 用於傳回多個輸出值。 |
在 ARM 範本中使用輸出
以下是輸出儲存體帳戶端點的範例:
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference('learntemplatestorage123').primaryEndpoints]"
}
}
請注意運算式的 reference
部分。 此函式會取得儲存體帳戶的執行階段狀態。
重新部署 ARM 範本
回想一下,ARM 範本具「等冪性」,也就是說,您可以再次將範本部署至相同的環境,且如果範本中沒有任何變更,環境中將不會有任何變更。 如果對範本進行了變更 (例如,您變更了參數值),則只會部署該變更。 您的範本可以包含 Azure 解決方案所需的所有資源,而且您可以安全地再次執行範本。 只有在資源還未存在時才會建立資源,而且只有在變更時才會更新。