將條件式邏輯新增到 ARM 範本

已完成

在某些情況下,您可能需要選擇性地部署資源。 常見案例是在 VM 上新增負載平衡器。 假設您擁有一個電子商務網站,而您想要確保該網站能夠承受大筆交易所帶來的流量增加。 負載平衡器是一種資源類型,可讓您與 VM 產生關聯。 透過有條件地新增規則,您可以「啟用」或「停用」要套用到有問題之 VM 的負載平衡器。

想像一下下列情況:

  • 預先存在的資源。 當您在範本中指定資源並加以部署時,會發生下列兩種情況之一。 可能會部署資源,或者,如果資源已存在,則不會加以部署。 檢查資源是否存在,是 Azure Resource Manager 會為您做的事;其是隱含的。 問題在於,當您想要對「如何」檢查某個項目是否存在進行推理時,可以使用此機制來發揮您的優勢。
  • 分支邏輯。 根據您傳遞給範本的參數而定,在部署期間,建議您部署一組不同的資源。 您所表達的內容是稱為「分支邏輯」的項目。 如果參數具有特定類型的值,就請選取第一個分支。 否則,請選取第二個或第三個分支來部署。 分支邏輯會以這種方式繼續運作。

上述兩種狀況都代表要套用條件式邏輯的案例。 此邏輯可能位於 Resource Manager 系統本身,或您需要明確表達的項目。

條件式部署

condition 建構可讓您表達是否想要部署某個項目。 它是一個屬性,其值為 truefalse,且可附加至資源元素。 您通常可在範本中找到 condition 建構,該建構看起來像是下列 JSON:

"resources" : [
  {
    "condition": "[parameters('shouldDeploy')]"
  }
]

在上述 JSON 中,會對資源新增 condition 屬性。 屬性的值將評估為參數 shouldDeploy 的值。

評估

有兩種方式可以評估 condition 建構。 了解這兩種方式,可能會影響您選擇表達「條件式」邏輯的方式。 這兩種不同的方式如下:

  • 值為 True/False。 例如,考慮下列建構:

    "condition": "[parameters('deployAccount')]"
    

    deployAccount 值是可在部署期間傳遞值的參數,或可切換回預設值。 不論使用何種方法,此值只能是 False 或 True。 嘗試指派不是布林值的另一個值會導致發生錯誤。

  • 有一個評估為 True/False 的運算式。 在這裡,您可以改為使用內建的範本函式 equals(arg1, arg2),而不是將嚴格 true/false 值指派給 condition 建構。 arg1 必須等於 arg2,才會將函式評估為 True。 您的 condition 建構現在可以使用下列形式來表達:

    "condition": "[equals(parameters('newOrExisting'),'new')]"
    

    使用 equals() 函式,您傳遞至參數的值就不再需要限定是 truefalse。 其必須符合 equals() 函式中的第二個引數。 在前述 JSON 範例中,newOrExisting 參數的值必須符合字串 new,函式才會評估為 true