問(wèn)題一:在ADF Pipeline部署ARM Template報(bào)錯(cuò)“Deployment failed -- the request content size exceeds the maximum size of 4MB”

【解答】
4MB是一個(gè)固定限制,不可以修改其大小。 如果Template文件太大,需要把拆分成多個(gè)后,通過(guò)Linked Template的方式部署。
在部署的時(shí)候,ARM通過(guò)main Template文件中配置的 templateLink.uri 來(lái)獲取模板內(nèi)容,所以這個(gè)URI必須是可以被ARM通過(guò)HTTP/HTTPS訪問(wèn)的地址。 如 Storage Account。

(Source: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/best-practices#template-limits )

(Source Link: https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-job-size-exceeded?tabs=json#solution-2-simplify-template )
問(wèn)題二:采用Linked Template方案,把大于4MB的ARM Template拆分成小于4MB的文件,然后存儲(chǔ)在Storage Account. 但是由于安全原因,Storage Account 必須啟用防火墻,盡管把ARM所屬于的Service Tags中的所有IPv4地址添加到白名單中,但依舊回遇見(jiàn) 403 錯(cuò)誤 (SASIpAuthorization)

【解答】
在部署ARM時(shí),將由ARM服務(wù)的實(shí)例從Storage Account訪問(wèn)Linked Template uri, 查看ARM服務(wù)的Service Tags,存在IPv4 和 IPv6, 而在目前階段,Storage Account不允許配置IPv6地址。
如果ARM訪問(wèn)模板時(shí),其執(zhí)行實(shí)例恰巧使用的IPv6地址的情況下,就會(huì)遇見(jiàn)403錯(cuò)誤。

(Source: https://www.microsoft.com/en-us/download/details.aspx?id=57062)
所以,在ARM中,也明確的指出了 Linked Template 不適用于 Storage Account 打開(kāi)防火墻的場(chǎng)景。

( Source : https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/linked-templates?tabs=azure-powershell#securing-an-external-template)
問(wèn)題三:基于把Linked Template存放在Storage Account,但因?yàn)閱⒂梅阑饓Χ鵁o(wú)法訪問(wèn)的情況下,是否有其他的代替方案呢?
【解答】
有,使用 Template Spec,通過(guò)把main template和linked Template上傳到Azure Template Spec中,通過(guò)調(diào)用az deployment group create 的方式進(jìn)行調(diào)用。參考鏈接:https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-specs-create-linked?tabs=azure-powershell
上傳到Azure Template Spec中有兩種方式:
a.直接上傳Main Template,這個(gè)過(guò)程會(huì)直接將所有的link templates作為統(tǒng)一的request body調(diào)用Azure API,這時(shí)候很可能會(huì)受到文件大小4MB的限制。
b.先上傳link template,然后在main template中修改templateLink屬性中的id為link template 在Azure 中的resource id。之后直接通過(guò)az命令對(duì)main template進(jìn)行部署即可。但是這個(gè)方式有一定的弊端:通過(guò)調(diào)用main template的方式,Azure會(huì)首先將link template中的資源進(jìn)行部署,在確認(rèn)他們所有部署成功后進(jìn)行main template的部署,經(jīng)過(guò)之前的測(cè)驗(yàn)該方式的部署時(shí)間在30分鐘左右。
關(guān)于Template Spec的權(quán)限和費(fèi)用問(wèn)題:
1) 需要上傳template spec的話通常需要用到RBAC權(quán)限 Template Spec Contributor. 其它權(quán)限參考: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-specs?tabs=azure-powershell#required-permissions
2) Template Spec is not a charged service in Azure. (Template Spec 是不收費(fèi)的Azure服務(wù))
當(dāng)在復(fù)雜的環(huán)境中面臨問(wèn)題,格物之道需:濁而靜之徐清,安以動(dòng)之徐生。 云中,恰是如此!