似乎azure处理嵌套的模板依赖项,如果找不到资源,则失败。
例如,我有3个嵌套模板:
模板Json:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"apiVersion": "2017-05-10",
"name": "VnetTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"properties":{
"subnets":[
{
"properties":{
"addressPrefix":"10.0.0.0/24"
},
"name":"default"
}
],
"addressSpace":{
"addressPrefixes":[
"10.0.0.0/24"
]
}
},
"type":"Microsoft.Network/virtualNetworks",
"location":"[resourceGroup().location]",
"name":"my_vnet",
"apiVersion":"2017-10-01"
},
{
"properties":{
"resolutionVirtualNetworks":[
{
"id":"[resourceId('Microsoft.Network/virtualNetworks/','my_vnet')]"
}
],
"zoneType":"Private"
},
"type":"Microsoft.Network/dnsZones",
"location":"global",
"dependsOn":["my_vnet"],
"name":"my.dns",
"apiVersion":"2017-10-01"
}
]
}
}
},
{
"apiVersion": "2017-05-10",
"name": "NicTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"properties":{
"ipConfigurations":[
{
"properties":{
"privateIPAllocationMethod":"Dynamic",
"subnet":{
"id":"[resourceId('Microsoft.Network/virtualNetworks/subnets', 'my_vnet', 'default')]"
}
},
"name":"app_vnic_IPConf"
}
]
},
"type":"Microsoft.Network/networkInterfaces",
"location":"[resourceGroup().location]",
"name":"app_vnic",
"apiVersion":"2017-10-01"
}
]
}
},
"dependsOn":[
"VnetTemplate"
]
},
{
"apiVersion": "2017-05-10",
"name": "DnsRecordTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"properties":{
"TTL":3600,
"ARecords":[
{
"ipv4Address":"[reference(resourceId('Microsoft.Network/networkInterfaces/','app_vnic'), '2017-10-01').ipConfigurations[0].properties.privateIPAddress]"
}
]
},
"type":"Microsoft.Network/dnsZones/A",
"name":"my.dns/my_app",
"apiVersion":"2017-10-01"
}
]
}
},
"dependsOn": [
"NicTemplate"
]
}
]
}
我希望最后一个嵌套模板在前两个模板完成之前不会被处理,但是事实并非如此。
(此示例使用更大的模板简化了我的问题,该模板部署在多个资源组上)
有什么想法如何处理吗?
答案 0 :(得分:1)
这是不正确的,如果您再部署一次模板,它将起作用,并且部署将彼此等待。因此,模板中的dependsOn属性没有任何问题。但是,如果您查看该错误,则会注意到该错误是关于找不到app_vnic
NIC。此错误来自引用函数,而不是嵌套的INLINE模板(应根据依赖关系而定)开始于此错误。
要解决此问题,您需要将具有参考功能的模板转换为常规的嵌套模板(非内联)。将其上传到可公开访问的地方,并像这样引用它:
{
"name": "NestedDeployment1",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2015-01-01",
"dependsOn": [
"NicTemplate"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "url_goes_here",
"contentVersion": "1.0.0.0"
}
}
}
这样,它将起作用。
我必须承认这是一个错误,但是为了公平起见,嵌套的INLINE模板充满了奇怪的行为,我建议您不要使用它们(除非您知道自己在做什么)。