4MB是一个固定限制,不可以修改其大小。 如果Template文件太大,需要把拆分成多个后,通过Linked Template的方式部署。
在部署的时候,ARM通过main Template文件中配置的 templateLink.uri 来获取模板内容,所以这个URI必须是可以被ARM通过HTTP/HTTPS访问的地址。 如 Storage Account。
(Source Link: https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-job-size-exceeded?tabs=json#solution-2-simplify-template )
在部署ARM时,将由ARM服务的实例从Storage Account访问Linked Template uri, 查看ARM服务的Service Tags,存在IPv4 和 IPv6, 而在目前阶段,Storage Account不允许配置IPv6地址。
如果ARM访问模板时,其执行实例恰巧使用的IPv6地址的情况下,就会遇见403错误。
(Source: https://www.microsoft.com/en-us/download/details.aspx?id=57062)
所以,在ARM中,也明确的指出了 Linked Template 不适用于 Storage Account 打开防火墙的场景。
有,使用 Template Spec,通过把main template和linked Template上传到Azure Template Spec中,通过调用az deployment group create 的方式进行调用。参考链接:https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-specs-create-linked?tabs=azure-powershell
a.直接上传Main Template,这个过程会直接将所有的link templates作为统一的request body调用Azure API,这时候很可能会受到文件大小4MB的限制。
b.先上传link template,然后在main template中修改templateLink属性中的id为link template 在Azure 中的resource id。之后直接通过az命令对main template进行部署即可。但是这个方式有一定的弊端:通过调用main template的方式,Azure会首先将link template中的资源进行部署,在确认他们所有部署成功后进行main template的部署,经过之前的测验该方式的部署时间在30分钟左右。
1) 需要上传template spec的话通常需要用到RBAC权限 Template Spec Contributor. 其它权限参考: 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 是不收费的Azure服务)