使用範本函式,為您的 Azure Resource Manager 範本增加彈性
在此情節中,您會想要盡可能輕鬆地將 Azure Resource Manager (ARM) 範本部署到不同的環境。 其中一個競爭區域是 Azure 儲存體帳戶的唯一名稱。
為了解決此問題,您決定使用 ARM 範本函式 (機器翻譯) 建立運算式。
什麼是 ARM 範本函式?
ARM 範本函式藉由在部署期間動態取得值,為您的 ARM 範本增加彈性。
若要了解函式,您必須先了解運算式。 運算式是在部署範本時所評估的值。 運算式的開頭和結尾都是方括弧 []
,而且可以傳回字串、整數、布林值、陣列或物件。
在此學習路徑的上一個課程模組中,您已經使用過 Resource Manager 範本中的運算式。 例如,您使用了:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
運算式是 defaultValue:
屬性的值。 請注意,此運算式會保留 ARM 範本函式 resourceGroup()
。 此函式會傳回要部署此範本的資源群組資訊。 .location
會從該函式所傳回的物件中取出一個屬性。 函式可讓您以動態方式建構所需的值。
如何使用 ARM 範本函式?
當您使用函數時,有幾個要遵循的規則:
當您將字串值傳遞至函式時,請使用單引號。 範例如下:
concat('storage',uniqueString(resourceGroup().id))
。 此函式是concat
,而您要傳入函式的字串為'storage'
。若要在範本函式中使用常值,您需要「逸出字元」。 逸出字元會根據您要進行的逸出而有所不同。
若要將屬性設定為 null,您可以使用
null
或[json('null')]
。 當您提供 null 作為參數時,JSON 函式會傳回空的物件。"stringValue": null, "objectValue": "[json('null')]"
Resource Manager 為您提供了數個 ARM 範本函式 (機器翻譯)。 函式會根據其類型列在群組中:
- 陣列函式,用於處理陣列。 例如,
first
與last
。 - 比較函式,用於在範本中進行比較。 例如,
equals
與greater
。 - 日期函式,用於處理日期。 例如,
utcNow
與dateTimeAdd
。 - 部署值函式,用於從範本的區段取得值,以及與部署相關的值。 例如,
environment
與parameters
。 - 邏輯函式,用於處理邏輯條件。 例如,
if
與not
。 - 數值函式,用於處理整數。 例如,
max
與mod
。 - 物件函式,用於處理物件。 例如,
contains
與length
。 - 資源函式,用於取得資源值。 例如,
resourceGroup
與subscription
。 - 字串函式,用於處理字串。 例如,
length
與startsWith
。
如何在一個運算式中使用數個函式?
您可以搭配使用數個範本函式,建立自己的運算式。 在此情節中,您需要建立一個運算式,結合前置詞輸入與資源群組識別碼的雜湊,為每個資源群組建立唯一名稱。 此運算式會產生如 dev2hu6fktr577wh
與 staging5his8hgr67tt5
之類的儲存體帳戶名稱。 您可以使用四個函式來建立此字串值。 例如:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
讓我們逐步解說這個運算式。
從 concat 開始,此函式會接受任意數目的引數,而且可以接受字串或陣列作為參數。 在這裡,您會使用常值字串 "Storage"
,並將其與另一個函式 uniqueString 的結果串連。 uniqueString
函式會根據參數建立具決定性的雜湊字串。 在這裡,您要使用另一個函式 resourceGroup 建立目前資源群組識別碼的雜湊。
下列是我們到目前為止所討論之內容的輸出:
若要符合命名慣例,您需要此字串全部小寫。 在這裡,您會將 toLower 函式新增為外部函式。
產生的字串看起來像這樣: