我创建了一个模板,旨在部署一个完整的网络解决方案,其中包括2个子网、vnet、vnetgw和pubip。我正在寻找一种方法来程序化地引用一些资源ID,使模板更加动态化,并能尽可能多次使用。请看下面的错误。
New-AzResourceGroupDeployment: 行virtualNetworkGateways'rgvnetdev-vnetgw'失败的消息'{ "error": { "code": "InvalidTemplate", "message": "无法处理资源'subscriptions77dd2569-6341-4c72-880d-ef59413db99eresourceGroupsrg-vnet-devprovidersMicrosoft.NetworkvirtualNetworkGatewaysrgvnetdev-vnetgw'的模板语言表达式,在行'279'和列'9'。'无法评估模板语言函数'resourceId':类型'Microsoft.NetworkvirtualNetworkssubnets'需要'2'资源名参数。请看 https:/aka.msarm-template-expressions#resourceid。 '", "additionalInfo": [ { "type": "TemplateViolation", "info": "lineNumber": 279, "linePosition": 9, "path": "" } } ] } }
如果这能帮助解决我的问题,我很乐意分享代码。该错误涉及到引用vnet dependon来创建vnetgw。
从错误信息来看,似乎引用的子网ID无效。这个函数 资源ID 格式是
resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)
在这种情况下,你可能在'279'行缺少VNet名称,引用的子网ID应该是这样的。
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]"
},
{
"type": "Microsoft.Network/virtualNetworkGateways",
"apiVersion": "2019-12-01",
"name": "[variables('vnetgwname')]",
"location": "[parameters('Location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses',variables('pubIp'))]",
"[resourceId('Microsoft.Network/virtualNetworks',variables('VNetName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "vnetgatewayconfig",
"properties": {
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('pubIp'))]"
},
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets',variables('VNetName'),variables('Uniquegwsubnet'))]"
},
"privateIPAllocationMethod": "[parameters('publicIPAllocationMethod')]"
}
}
],
"sku": {
"name": "[parameters('sku')]",
"tier": "[parameters('sku')]"
},
"gatewayType": "[parameters('gatewayType')]",
"vpnType": "[parameters('VpnType')]",
"activeActive": false,
"enableBgp": false,
"vpnGatewayGeneration": "[parameters('vpnGatewayGeneration')]"
}
},