使用範本函式,為您的 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 範本函式 (機器翻譯)。 函式會根據其類型列在群組中:

  • 陣列函式,用於處理陣列。 例如,firstlast
  • 比較函式,用於在範本中進行比較。 例如,equalsgreater
  • 日期函式,用於處理日期。 例如,utcNowdateTimeAdd
  • 部署值函式,用於從範本的區段取得值,以及與部署相關的值。 例如,environmentparameters
  • 邏輯函式,用於處理邏輯條件。 例如,ifnot
  • 數值函式,用於處理整數。 例如,maxmod
  • 物件函式,用於處理物件。 例如,containslength
  • 資源函式,用於取得資源值。 例如,resourceGroupsubscription
  • 字串函式,用於處理字串。 例如,lengthstartsWith

如何在一個運算式中使用數個函式?

您可以搭配使用數個範本函式,建立自己的運算式。 在此情節中,您需要建立一個運算式,結合前置詞輸入與資源群組識別碼的雜湊,為每個資源群組建立唯一名稱。 此運算式會產生如 dev2hu6fktr577whstaging5his8hgr67tt5 之類的儲存體帳戶名稱。 您可以使用四個函式來建立此字串值。 例如:

"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"

讓我們逐步解說這個運算式。

concat 開始,此函式會接受任意數目的引數,而且可以接受字串或陣列作為參數。 在這裡,您會使用常值字串 "Storage",並將其與另一個函式 uniqueString 的結果串連。 uniqueString 函式會根據參數建立具決定性的雜湊字串。 在這裡,您要使用另一個函式 resourceGroup 建立目前資源群組識別碼的雜湊。

下列是我們到目前為止所討論之內容的輸出:

圖片為藉由將 word 儲存區與包含大小寫字母的 13 個字元雜湊串連,所建立的字串。

若要符合命名慣例,您需要此字串全部小寫。 在這裡,您會將 toLower 函式新增為外部函式。

產生的字串看起來像這樣:

圖片為藉由將 word 儲存區與 13 個字元雜湊串連,然後將所有字母轉換成小寫所建立的字串。