將條件式邏輯新增到 ARM 範本
在某些情況下,您可能需要選擇性地部署資源。 常見案例是在 VM 上新增負載平衡器。 假設您擁有一個電子商務網站,而您想要確保該網站能夠承受大筆交易所帶來的流量增加。 負載平衡器是一種資源類型,可讓您與 VM 產生關聯。 透過有條件地新增規則,您可以「啟用」或「停用」要套用到有問題之 VM 的負載平衡器。
想像一下下列情況:
- 預先存在的資源。 當您在範本中指定資源並加以部署時,會發生下列兩種情況之一。 可能會部署資源,或者,如果資源已存在,則不會加以部署。 檢查資源是否存在,是 Azure Resource Manager 會為您做的事;其是隱含的。 問題在於,當您想要對「如何」檢查某個項目是否存在進行推理時,可以使用此機制來發揮您的優勢。
- 分支邏輯。 根據您傳遞給範本的參數而定,在部署期間,建議您部署一組不同的資源。 您所表達的內容是稱為「分支邏輯」的項目。 如果參數具有特定類型的值,就請選取第一個分支。 否則,請選取第二個或第三個分支來部署。 分支邏輯會以這種方式繼續運作。
上述兩種狀況都代表要套用條件式邏輯的案例。 此邏輯可能位於 Resource Manager 系統本身,或您需要明確表達的項目。
條件式部署
condition
建構可讓您表達是否想要部署某個項目。 它是一個屬性,其值為 true
或 false
,且可附加至資源元素。 您通常可在範本中找到 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()
函式,您傳遞至參數的值就不再需要限定是true
或false
。 其必須符合equals()
函式中的第二個引數。 在前述 JSON 範例中,newOrExisting
參數的值必須符合字串new
,函式才會評估為true
。