多资源组ARM模板中,如何让同组VNet依赖对应NSG?
让ARM模板中同资源组的VNet依赖对应NSG的解决方案
你需要在VNet的dependsOn数组中,通过resourceId函数生成同资源组下NSG的唯一资源ID,同时利用循环索引匹配对应的资源组,具体修改如下:
修正后的模板代码
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "listOfRGs": { "type": "array", "defaultValue": ["rg1", "rg2", "rgN"] } }, "resources": [ { "copy": [ { "name": "rgNsgCopyIdx", "count": "[length(parameters('listOfRGs'))]", "input": { "type": "Microsoft.Network/networkSecurityGroups", "name": "myNSG", "resourceGroup": "[parameters('listOfRGs')[copyIndex('rgNsgCopyIdx')]]", "apiVersion": "2023-05-01", "location": "[resourceGroup(parameters('listOfRGs')[copyIndex('rgNsgCopyIdx')]).location]", "properties": { "securityRules": [] } } }, { "name": "rgVNetCopyIdx", "count": "[length(parameters('listOfRGs'))]", "input": { "type": "Microsoft.Network/virtualNetworks", "name": "myVNET", "resourceGroup": "[parameters('listOfRGs')[copyIndex('rgVNetCopyIdx')]]", "apiVersion": "2023-05-01", "location": "[resourceGroup(parameters('listOfRGs')[copyIndex('rgVNetCopyIdx')]).location]", "dependsOn": [ "[resourceId(parameters('listOfRGs')[copyIndex('rgVNetCopyIdx')], 'Microsoft.Network/networkSecurityGroups', 'myNSG')]" ], "properties": { "addressSpace": { "addressPrefixes": ["10.0.0.0/16"] } } } } ] } ] }
关键说明
- 资源ID生成逻辑:
resourceId函数的第一个参数指定目标资源组(通过当前VNet循环的索引copyIndex('rgVNetCopyIdx')匹配listOfRGs中的对应项),第二个参数是NSG的资源类型,第三个是NSG名称,这样就能精准指向同一资源组下的NSG。 - 索引匹配:两个循环的
count都是length(parameters('listOfRGs')),所以索引一一对应,确保每个VNet依赖的是同组的NSG,不会跨组关联。 - 补充必要属性:模板中补充了
apiVersion、location和基础资源属性,确保模板语法合法可执行。
内容的提问来源于stack exchange,提问作者Sten Petrov
相关产品推荐
相关产品推荐

