ARM模板中Web App与SQL Database资源循环引用问题解决方案问询
解决ARM模板依赖循环的最简方案
依赖循环的核心是两个资源创建时都要读取对方的输出属性,只要调整创建顺序、拆分互斥的配置项就能打破,具体操作如下:
方案1:分两次手动部署(操作最直观,适合新手)
- 第一次部署:先创建SQL Server、SQL Database(仅配置管理员账号、基础配置,暂时不添加Web App相关的防火墙规则),再创建Web App,此时可以直接用已生成的SQL Server域名、库名、账号密码拼接连接字符串,配置到Web App的应用设置中。Web App创建完成后,就可以获取到它的所有出站IP列表。
- 第二次部署:将上一步拿到的Web App出站IP,添加为SQL Server的防火墙允许规则即可。
方案2:单个ARM模板自动化部署(无需人工干预,适合CI/CD流程)
不需要拆成两个模板,靠ARM的依赖控制和嵌套部署就能实现:
- 主模板中依次定义SQL Server、SQL Database、Web App三个核心资源,设置Web App的
dependsOn属性指向SQL Database,确保SQL创建完成后再建Web App - 新增一个嵌套部署资源,设置它的
dependsOn属性指向Web App,确保Web App创建完成后再执行这部分逻辑 - 在嵌套部署中定义SQL Server的防火墙规则,直接引用Web App的
possibleOutboundIpAddresses属性拆分成多个IP条目批量创建即可,ARM会自动读取已创建完成的Web App的IP值,不会再出现循环。
注意:Web App访问SQL数据库时用的是自身的出站IP,所以直接取
possibleOutboundIpAddresses属性即可覆盖所有Web App可能访问SQL的IP地址。
内容的提问来源于stack exchange,提问作者mt758824
相关产品推荐
相关产品推荐

