使用參數和輸出,為您的 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>"
    }
  }
}

允許的參數類型為:

  • 字串
  • secureString
  • 整數
  • boolean
  • 物件
  • 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": "2025-01-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 識別碼。
條件 (選擇性) 布林值,指出是否傳回此輸出值。 如果是 True,此值會包含在部署的輸出中。 如果是 False,則會跳過此部署的輸出值。 若未指定,預設值為 True。
類型 輸出值的類型。
value (選用) 將經過評估並傳回為輸出值的範本語言運算式。
複製 (選擇性) Copy 用於傳回多個輸出值。

在 ARM 範本中使用輸出

以下是輸出儲存體帳戶端點的範例:

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

請注意運算式的 reference 部分。 此函式會取得儲存體帳戶的執行階段狀態。

重新部署 ARM 範本

回想一下,ARM 範本具「等冪性」,也就是說,您可以再次將範本部署至相同的環境,且如果範本中沒有任何變更,環境中將不會有任何變更。 如果對範本進行了變更 (例如,您變更了參數值),則只會部署該變更。 您的範本可以包含 Azure 解決方案所需的所有資源,而且您可以安全地再次執行範本。 只有在資源還未存在時才會建立資源,而且只有在變更時才會更新。