我試圖創建一個有條件的資源模板。發展環境並不像生產環境那樣健壯,我大部分都很成功地做到這一點。但是,我似乎無法獲得正確的嵌套資源。沒有模板鏈接的ARM模板條件嵌套資源
下面是從我的ARM模板的代碼段:
"webApp-resources": "[variables(concat('webApp-', parameters('env'), '-resources'))]",
"webApp-dev-resources": [],
"webApp-prod-resources": [
{
"name": "staging",
"type": "Microsoft.Web/sites/slots",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('webApp-name'))]"
]
}
],
的想法很簡單,資源變量使用env
參數組成。 env
參數可以是dev
或prod
,雖然此方法有效,但在嘗試部署此模板時出現以下錯誤。
{
"name": "[variables('webApp-name')]",
"type": "Microsoft.Web/sites",
...
"resources": "[variables('webApp-resources')]" // <- culprit!
},
請求內容是無效的,不能被反序列化:「錯誤轉換值‘的變量(‘web應用資源’)]’輸入」 Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Schema .TemplateResource []」。 Path'properties.template.resources [1] .resources',line 195,position 64.'
我還試圖移動資源到一個變量,並以類似條件的方式非常相似,我們會怎麼做模板嵌套鏈接,但沒有模板鏈接引用變量。
resources: [
"[variables('webApp-resource')]" // <- this doesn't work!
]
這導致了一個類似的錯誤,但如果我正確回想了不同的錯誤。
由此我得出結論,ARM模板語法不是簡單地找到並替換我認爲不好的東西,因爲它確實使得更難推理什麼可行,什麼不可行。因爲如果是這樣,這會產生一個有效的模板。我已通過將正確的值粘貼到資源部分進行了驗證。
有沒有人有類似的問題,你是如何解決這個問題的?
實際上,我甚至不確定我是否回答正確的問題,我不完全瞭解你的問題,你能否詳細說明一下位? – 4c74356b41
部署插槽只支持標準和應用程序服務計劃,開發環境不需要部署插槽,所以我選擇不使用它們。但是,我現在有一個部署模板,需要根據部署到的環境而有所不同。我設法做得很好,但是我一直無法添加部署插槽「staging」,因此此插槽僅存在於* prod *環境中。 * dev *環境使用基本層,但* prod *使用標準層。我的問題中的錯誤描繪了各種(IMAO)直接嘗試實現這一目標的過程。 –
你試圖使用'variable'而不是'resource'嗎?我很肯定你不能那樣做,但是你可以有條件地創建slot – 4c74356b41