azure - ARM template: creating new vnet and peering with existing vnet from different subscription - Stack Overflow

I am trying to create arm template which will create new VNET along with subnet and then create a peeri

I am trying to create arm template which will create new VNET along with subnet and then create a peering between newly created vnet and existing vnet from different subscription. I was able to make arm template working when both vnets are in single subscription (first code), but when trying to create peering when resources are in different subscriptions (second code) I am getting errors.

    {
  "$schema": ".json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnet1Name": {
      "type": "string",
      "defaultValue": "VNet1",
      "metadata": {
        "description": "New VNet Name to be created"
      }
    },
    "vnet1AddressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "Address prefix for the new VNet"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "Subnet1",
      "metadata": {
        "description": "Subnet Name"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Subnet Address Prefix"
      }
    },
    "vnet2Name": {
      "type": "string",
      "defaultValue": "Hub_network",
      "metadata": {
        "description": "Existing Hub VNet Name"
      }
    },
    "vnet2ResourceGroup": {
      "type": "string",
      "metadata": {
        "description": "Resource Group Name of the existing Hub VNet"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the new VNet"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-08-01",
      "name": "[parameters('vnet1Name')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('vnet1AddressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
      "apiVersion": "2021-08-01",
      "name": "[concat(parameters('vnet1Name'), '/to-', parameters('vnet2Name'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
      ],
      "properties": {
        "remoteVirtualNetwork": {
          "id": "[resourceId(parameters('vnet2ResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('vnet2Name'))]"
        },
        "allowVirtualNetworkAccess": true,
        "allowForwardedTraffic": true,
        "allowGatewayTransit": false,
        "useRemoteGateways": false
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
      "apiVersion": "2021-08-01",
      "name": "[concat(parameters('vnet2Name'), '/to-', parameters('vnet1Name'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
      ],
      "properties": {
        "remoteVirtualNetwork": {
          "id": "[resourceId(parameters('vnet2ResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
        },
        "allowVirtualNetworkAccess": true,
        "allowForwardedTraffic": true,
        "allowGatewayTransit": false,
        "useRemoteGateways": false
      }
    }
  ]
}

this is how the code looks like when combining with suggestions from this thread: Azure ARM template vnet peering different subscriptions

{
  "$schema": ".json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnet1Name": {
      "type": "string",
      "defaultValue": "VNet1",
      "metadata": {
        "description": "New VNet Name to be created"
      }
    },
    "vnet1AddressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "Address prefix for the new VNet"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "Subnet1",
      "metadata": {
        "description": "Subnet Name"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Subnet Address Prefix"
      }
    },
    "vnet2Name": {
      "type": "string",
      "defaultValue": "Hub_network",
      "metadata": {
        "description": "Existing Hub VNet Name"
      }
    },
    "vnet2ResourceGroup": {
      "type": "string",
      "metadata": {
        "description": "Resource Group Name of the existing Hub VNet"
      }
    },
    "subscription1ID": {
      "type": "string",
      "metadata": {
        "description": "Subscription ID for the first VNet"
      }
    },
    "subscription2ID": {
      "type": "string",
      "metadata": {
        "description": "Subscription ID for the second VNet"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the new VNet"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-08-01",
      "name": "[parameters('vnet1Name')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('vnet1AddressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]"
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2020-06-01",
      "name": "createPeeringAtoB",
      "type": "Microsoft.Resources/deployments",
      "location": "[parameters('location')]",
      "subscriptionId": "[parameters('subscription1ID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": ".json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
              "apiVersion": "2020-05-01",
              "name": "[concat(parameters('vnet1Name'), '/to-', parameters('vnet2Name'))]",
              "properties": {
                "peeringState": "Connected",
                "remoteVirtualNetwork": {
                  "id": "[concat('/subscriptions/',parameters('subscription2ID'),'/resourceGroups/',parameters('vnet2ResourceGroup'),'/providers/Microsoft.Network/virtualNetworks/', parameters('vnet2Name'))]"
                },
                "allowVirtualNetworkAccess": true,
                "allowForwardedTraffic": true,
                "allowGatewayTransit": false,
                "useRemoteGateways": false
              }
            }
          ]
        }
      }
    },
    {
      "apiVersion": "2020-06-01",
      "name": "createPeeringBtoA",
      "type": "Microsoft.Resources/deployments",
      "location": "[parameters('location')]",
      "subscriptionId": "[parameters('subscription2ID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": ".json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
              "apiVersion": "2020-05-01",
              "name": "[concat(parameters('vnet2Name'), '/to-', parameters('vnet1Name'))]",
              "properties": {
                "peeringState": "Connected",
                "remoteVirtualNetwork": {
                  "id": "[concat('/subscriptions/',parameters('subscription1ID'),'/resourceGroups/',resourceGroup().name,'/providers/Microsoft.Network/virtualNetworks/', parameters('vnet1Name'))]"
                },
                "allowVirtualNetworkAccess": true,
                "allowForwardedTraffic": true,
                "allowGatewayTransit": false,
                "useRemoteGateways": false
              }
            }
          ]
        }
      }
    }
  ]
}

and errors I am getting

{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see  for usage details.","details":[{"code":"NotFound","message":"{\r\n  \"error\": {\r\n    \"code\": \"ResourceNotFound\",\r\n    \"message\": \"The Resource 'Microsoft.Network/virtualNetworks/VNet1' under resource group '<null>' was not found. For more details please go to \"\r\n  }\r\n}"}]}

Any suggestions please?

I am trying to create arm template which will create new VNET along with subnet and then create a peering between newly created vnet and existing vnet from different subscription. I was able to make arm template working when both vnets are in single subscription (first code), but when trying to create peering when resources are in different subscriptions (second code) I am getting errors.

    {
  "$schema": "https://schema.management.azure/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnet1Name": {
      "type": "string",
      "defaultValue": "VNet1",
      "metadata": {
        "description": "New VNet Name to be created"
      }
    },
    "vnet1AddressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "Address prefix for the new VNet"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "Subnet1",
      "metadata": {
        "description": "Subnet Name"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Subnet Address Prefix"
      }
    },
    "vnet2Name": {
      "type": "string",
      "defaultValue": "Hub_network",
      "metadata": {
        "description": "Existing Hub VNet Name"
      }
    },
    "vnet2ResourceGroup": {
      "type": "string",
      "metadata": {
        "description": "Resource Group Name of the existing Hub VNet"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the new VNet"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-08-01",
      "name": "[parameters('vnet1Name')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('vnet1AddressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
      "apiVersion": "2021-08-01",
      "name": "[concat(parameters('vnet1Name'), '/to-', parameters('vnet2Name'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
      ],
      "properties": {
        "remoteVirtualNetwork": {
          "id": "[resourceId(parameters('vnet2ResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('vnet2Name'))]"
        },
        "allowVirtualNetworkAccess": true,
        "allowForwardedTraffic": true,
        "allowGatewayTransit": false,
        "useRemoteGateways": false
      }
    },
    {
      "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
      "apiVersion": "2021-08-01",
      "name": "[concat(parameters('vnet2Name'), '/to-', parameters('vnet1Name'))]",
      "dependsOn": [
        "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
      ],
      "properties": {
        "remoteVirtualNetwork": {
          "id": "[resourceId(parameters('vnet2ResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
        },
        "allowVirtualNetworkAccess": true,
        "allowForwardedTraffic": true,
        "allowGatewayTransit": false,
        "useRemoteGateways": false
      }
    }
  ]
}

this is how the code looks like when combining with suggestions from this thread: Azure ARM template vnet peering different subscriptions

{
  "$schema": "https://schema.management.azure/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnet1Name": {
      "type": "string",
      "defaultValue": "VNet1",
      "metadata": {
        "description": "New VNet Name to be created"
      }
    },
    "vnet1AddressPrefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/16",
      "metadata": {
        "description": "Address prefix for the new VNet"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "Subnet1",
      "metadata": {
        "description": "Subnet Name"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.0.0.0/24",
      "metadata": {
        "description": "Subnet Address Prefix"
      }
    },
    "vnet2Name": {
      "type": "string",
      "defaultValue": "Hub_network",
      "metadata": {
        "description": "Existing Hub VNet Name"
      }
    },
    "vnet2ResourceGroup": {
      "type": "string",
      "metadata": {
        "description": "Resource Group Name of the existing Hub VNet"
      }
    },
    "subscription1ID": {
      "type": "string",
      "metadata": {
        "description": "Subscription ID for the first VNet"
      }
    },
    "subscription2ID": {
      "type": "string",
      "metadata": {
        "description": "Subscription ID for the second VNet"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the new VNet"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-08-01",
      "name": "[parameters('vnet1Name')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('vnet1AddressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]"
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2020-06-01",
      "name": "createPeeringAtoB",
      "type": "Microsoft.Resources/deployments",
      "location": "[parameters('location')]",
      "subscriptionId": "[parameters('subscription1ID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
              "apiVersion": "2020-05-01",
              "name": "[concat(parameters('vnet1Name'), '/to-', parameters('vnet2Name'))]",
              "properties": {
                "peeringState": "Connected",
                "remoteVirtualNetwork": {
                  "id": "[concat('/subscriptions/',parameters('subscription2ID'),'/resourceGroups/',parameters('vnet2ResourceGroup'),'/providers/Microsoft.Network/virtualNetworks/', parameters('vnet2Name'))]"
                },
                "allowVirtualNetworkAccess": true,
                "allowForwardedTraffic": true,
                "allowGatewayTransit": false,
                "useRemoteGateways": false
              }
            }
          ]
        }
      }
    },
    {
      "apiVersion": "2020-06-01",
      "name": "createPeeringBtoA",
      "type": "Microsoft.Resources/deployments",
      "location": "[parameters('location')]",
      "subscriptionId": "[parameters('subscription2ID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
              "apiVersion": "2020-05-01",
              "name": "[concat(parameters('vnet2Name'), '/to-', parameters('vnet1Name'))]",
              "properties": {
                "peeringState": "Connected",
                "remoteVirtualNetwork": {
                  "id": "[concat('/subscriptions/',parameters('subscription1ID'),'/resourceGroups/',resourceGroup().name,'/providers/Microsoft.Network/virtualNetworks/', parameters('vnet1Name'))]"
                },
                "allowVirtualNetworkAccess": true,
                "allowForwardedTraffic": true,
                "allowGatewayTransit": false,
                "useRemoteGateways": false
              }
            }
          ]
        }
      }
    }
  ]
}

and errors I am getting

{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.","details":[{"code":"NotFound","message":"{\r\n  \"error\": {\r\n    \"code\": \"ResourceNotFound\",\r\n    \"message\": \"The Resource 'Microsoft.Network/virtualNetworks/VNet1' under resource group '<null>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix\"\r\n  }\r\n}"}]}

Any suggestions please?

Share Improve this question edited Mar 3 at 11:41 Michał Olczyk asked Mar 3 at 11:35 Michał OlczykMichał Olczyk 631 silver badge7 bronze badges 2
  • Did you try using depends_on for VNet1 creation using this so will ensure that the resource was fully provision and readily available resource IDs @MichalOlczyk – Vinay B Commented Mar 4 at 5:29
  • I do not think you can use resourceId to refer another subscription vnet. Have you tried simply hardcode the vnet resourceId here. "remoteVirtualNetwork": { "id": "/subscriptions/xxx-sub2id--xxx-xxx/resourceGroups/xxx-rg-in-sub2-name-xxx/providers/Microsoft.Network/virtualNetworks/xx-vnetname2-xx" }, – wenbo - Finding Job Commented Mar 5 at 3:31
Add a comment  | 

1 Answer 1

Reset to default 0

ARM template: creating new vnet and peering with existing vnet from different subscription

I do agree with wenbo for suggesting the same point.

You can hardcode it resourceId to refer to a VNet in another subscription.

Here is the updated code to create a VNet and enable peering with a VNet in another subscription


{
  "$schema": "https://schema.management.azure/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnet1Name": {
      "type": "string",
      "defaultValue": "remote-vnet",
      "metadata": {
        "description": "New VNet Name to be created"
      }
    },
    "vnet1AddressPrefix": {
      "type": "string",
      "defaultValue": "10.1.0.0/16",
      "metadata": {
        "description": "Address prefix for the new VNet to be created"
      }
    },
    "subnet1Name": {
      "type": "string",
      "defaultValue": "remotesubnet",
      "metadata": {
        "description": "Subnet Name for the new VNet to be created"
      }
    },
    "subnet1Prefix": {
      "type": "string",
      "defaultValue": "10.1.0.0/24",
      "metadata": {
        "description": "Subnet Address Prefix to be created"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the new VNet"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2021-08-01",
      "name": "[parameters('vnet1Name')]",
      "location": "[parameters('location')]",
      "properties": {
        "addressSpace": {
          "addressPrefixes": [
            "[parameters('vnet1AddressPrefix')]"
          ]
        },
        "subnets": [
          {
            "name": "[parameters('subnet1Name')]",
            "properties": {
              "addressPrefix": "[parameters('subnet1Prefix')]"
            }
          }
        ]
      },
      "resources": [
        {
          "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
          "apiVersion": "2020-05-01",
          "name": "[concat(parameters('vnet1Name'), '/peering-to-venkat-vnet')]",
          "dependsOn": [
            "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnet1Name'))]"
          ],
          "properties": {
            "peeringState": "Connected",
            "remoteVirtualNetwork": {
              "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/Automation_RG/providers/Microsoft.Network/virtualNetworks/venkat-vnet"
            },
            "allowVirtualNetworkAccess": true,
            "allowForwardedTraffic": true,
            "allowGatewayTransit": false,
            "useRemoteGateways": false
          }
        }
      ]
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      "name": "PeeringVenkatToVksb",
      "subscriptionId": "8332xxxxxxxxxxxxxxx60e5f09a9",
      "resourceGroup": "Automation_RG",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
              "apiVersion": "2020-05-01",
              "name": "venkat-vnet/peering-to-vksb-vnet",
              "properties": {
                "peeringState": "Connected",
                "remoteVirtualNetwork": {
                  "id": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', parameters('vnet1Name'))]"
                },
                "allowVirtualNetworkAccess": true,
                "allowForwardedTraffic": true,
                "allowGatewayTransit": false,
                "useRemoteGateways": false
              }
            }
          ]
        }
      }
    }
  ]
}

az deployment group create --resource-group vksb-rg --template-file vnet-peering.json

Output:

After running the code, the VNet peering has been successfully enabled on the VNet in another subscription.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745096485a4611008.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信