Reference an existing virtual network in an Azure scale set template
This article shows how to modify the basic scale set template to deploy into an existing virtual network instead of creating a new one.
Prerequisites
In a previous article we had created a basic scale set template. You will need that earlier template so that you can modify it to create a template that deploys a scale set into an existing virtual network.
Identify subnet
First, add a subnetId
parameter. This string is passed into the scale set configuration, allowing the scale set to identify the pre-created subnet to deploy virtual machines into. This string must be of the form:
/subscriptions/<subscription-id>resourceGroups/<resource-group-name>/providers/Microsoft.Network/virtualNetworks/<virtual-network-name>/subnets/<subnet-name>
For instance, to deploy the scale set into an existing virtual network with name myvnet
, subnet mysubnet
, resource group myrg
, and subscription 00000000-0000-0000-0000-000000000000
, the subnetId would be:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/mysubnet
.
},
"adminPassword": {
"type": "securestring"
+ },
+ "subnetId": {
+ "type": "string"
}
},
Delete extra virtual network resource
Next, delete the virtual network resource from the resources
array, as you use an existing virtual network and don't need to deploy a new one.
"variables": {},
"resources": [
- {
- "type": "Microsoft.Network/virtualNetworks",
- "name": "myVnet",
- "location": "[resourceGroup().location]",
- "apiVersion": "2018-11-01",
- "properties": {
- "addressSpace": {
- "addressPrefixes": [
- "10.0.0.0/16"
- ]
- },
- "subnets": [
- {
- "name": "mySubnet",
- "properties": {
- "addressPrefix": "10.0.0.0/16"
- }
- }
- ]
- }
- },
Remove dependency clause
The virtual network already exists before the template is deployed, so there is no need to specify a dependsOn
clause from the scale set to the virtual network. Delete the following lines:
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "myScaleSet",
"location": "[resourceGroup().location]",
"apiVersion": "2019-03-01",
- "dependsOn": [
- "Microsoft.Network/virtualNetworks/myVnet"
- ],
"sku": {
"name": "Standard_A1",
"capacity": 2
Pass subnet parameter
Finally, pass in the subnetId
parameter set by the user (instead of using resourceId
to get the ID of a vnet in the same deployment, which is what the basic viable scale set template does).
"name": "myIpConfig",
"properties": {
"subnet": {
- "id": "[concat(resourceId('Microsoft.Network/virtualNetworks', 'myVnet'), '/subnets/mySubnet')]"
+ "id": "[parameters('subnetId')]"
}
}
}
Next steps
You can deploy the preceding template by following the Azure Resource Manager documentation.
You can start this tutorial series from the basic scale set template article.
You can see how to modify the basic scale set template to deploy the scale set into an existing virtual network.
You can see how to modify the basic scale set template to deploy the scale set with a custom image.
You can see how to modify the basic scale set template to deploy a Linux scale set with guest-based autoscale.
For more information about scale sets, refer to the scale set overview page.