Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save levymoreira/42d4ae3c8d04097708f30f8f33dc878b to your computer and use it in GitHub Desktop.
Save levymoreira/42d4ae3c8d04097708f30f8f33dc878b to your computer and use it in GitHub Desktop.
2 LB 1 VMSSET (differnt ports!)
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location for all resources."
}
},
"vmSize": {
"type": "string",
"defaultValue": "Standard_DS1_v2",
"metadata": {
"description": "The size of the virtual machines."
}
},
"adminUsername": {
"type": "string",
"metadata": {
"description": "The username for the virtual machines."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "The password for the virtual machines."
}
},
"instanceCount": {
"type": "int",
"defaultValue": 2,
"minValue": 2,
"metadata": {
"description": "The number of virtual machine instances in the scale set."
}
},
"imageOffer": {
"type": "string",
"defaultValue": "UbuntuServer",
"metadata": {
"description": "The offer for the virtual machine image."
}
},
"imageSku": {
"type": "string",
"defaultValue": "18.04-LTS",
"metadata": {
"description": "The SKU for the virtual machine image."
}
},
"loadBalancerNamePrefix": {
"type": "string",
"defaultValue": "web-lb",
"metadata": {
"description": "Prefix for the load balancer name"
}
},
"publicIPNamePrefix": {
"type": "string",
"defaultValue": "publicip",
"metadata": {
"description": "Prefix for the public IP name"
}
}
},
"variables": {
"virtualNetworkName": "web-vnet",
"subnetName": "web-subnet",
"publicIPName": "web-publicip",
"publicIPNameV2": "web-publicip-v2",
"loadBalancerName": "web-lb",
"loadBalancerNameV2": "web-lb-v2",
"nsgName": "web-nsg",
"loadBalancerFrontEndConfigName": "LBFrontend",
"loadBalancerFrontEndConfigNameV2": "LBFrontendV2",
"loadBalancerBackEndPoolName": "LBBackendPool",
"loadBalancerBackEndPoolNameV2": "LBBackendPoolV2",
"loadBalancerProbeName": "LBProbe",
"loadBalancerProbeNameV2": "LBProbeV2",
"loadBalancerHttpRuleName": "HTTPRule",
"loadBalancerHttpRuleNameV2": "HTTPRuleV2",
"vmssName": "web-vmss",
"vmssNameV2": "web-vmss-v2",
"storageAccountName": "[concat('st', uniqueString(resourceGroup().id))]",
"loadBalancerBackEndPoolName2": "LBBackendPool2"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage"
},
{
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2020-08-01",
"name": "[variables('nsgName')]",
"location": "[parameters('location')]",
"properties": {
"securityRules": [
{
"name": "AllowHTTP",
"properties": {
"priority": 1000,
"protocol": "Tcp",
"access": "Allow",
"direction": "Inbound",
"sourceAddressPrefix": "*",
"sourcePortRange": "*",
"destinationAddressPrefix": "*",
"destinationPortRange": "80"
}
},
{
"name": "AllowHTTP8080",
"properties": {
"priority": 1010,
"protocol": "Tcp",
"access": "Allow",
"direction": "Inbound",
"sourceAddressPrefix": "*",
"sourcePortRange": "*",
"destinationAddressPrefix": "*",
"destinationPortRange": "8080"
}
}
]
}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2020-08-01",
"name": "[variables('publicIPName')]",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "Static"
},
"sku": {
"name": "Standard"
}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2020-08-01",
"name": "[variables('publicIPNameV2')]",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "Static"
},
"sku": {
"name": "Standard"
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2020-08-01",
"name": "[variables('virtualNetworkName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
],
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"subnets": [
{
"name": "[variables('subnetName')]",
"properties": {
"addressPrefix": "10.0.0.0/24",
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]"
}
}
}
]
}
},
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2020-08-01",
"name": "[variables('loadBalancerName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPName'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]"
],
"properties": {
"frontendIPConfigurations": [
{
"name": "[variables('loadBalancerFrontEndConfigName')]",
"properties": {
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPName'))]"
}
}
}
],
"backendAddressPools": [
{
"name": "[variables('loadBalancerBackEndPoolName')]"
},
{
"name": "[variables('loadBalancerBackEndPoolName2')]"
}
],
"loadBalancingRules": [
{
"name": "[variables('loadBalancerHttpRuleName')]",
"properties": {
"frontendIPConfiguration": {
"id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('loadBalancerName'), variables('loadBalancerFrontEndConfigName'))]"
},
"frontendPort": 80,
"backendPort": 80,
"protocol": "Tcp",
"enableFloatingIP": false,
"backendAddressPool": {
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerName'), variables('loadBalancerBackEndPoolName'))]"
},
"probe": {
"id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('loadBalancerName'), variables('loadBalancerProbeName'))]"
}
}
}
],
"probes": [
{
"name": "[variables('loadBalancerProbeName')]",
"properties": {
"protocol": "Http",
"port": 80,
"requestPath": "/",
"intervalInSeconds": 15,
"numberOfProbes": 2
}
}
]
},
"sku": {
"name": "Standard"
}
},
{
"type": "Microsoft.Network/loadBalancers",
"apiVersion": "2020-08-01",
"name": "[variables('loadBalancerNameV2')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPNameV2'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]"
],
"properties": {
"frontendIPConfigurations": [
{
"name": "[variables('loadBalancerFrontEndConfigNameV2')]",
"properties": {
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPNameV2'))]"
}
}
}
],
"backendAddressPools": [
{
"name": "[variables('loadBalancerBackEndPoolNameV2')]"
}
],
"loadBalancingRules": [
{
"name": "[variables('loadBalancerHttpRuleNameV2')]",
"properties": {
"frontendIPConfiguration": {
"id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('loadBalancerNameV2'), variables('loadBalancerFrontEndConfigNameV2'))]"
},
"frontendPort": 80,
"backendPort": 8080,
"protocol": "Tcp",
"enableFloatingIP": false,
"backendAddressPool": {
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerNameV2'), variables('loadBalancerBackEndPoolNameV2'))]"
},
"probe": {
"id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('loadBalancerNameV2'), variables('loadBalancerProbeNameV2'))]"
}
}
}
],
"probes": [
{
"name": "[variables('loadBalancerProbeNameV2')]",
"properties": {
"protocol": "Http",
"port": 8080,
"requestPath": "/",
"intervalInSeconds": 15,
"numberOfProbes": 2
}
}
]
},
"sku": {
"name": "Standard"
}
},
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2020-12-01",
"name": "[variables('vmssName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName'))]",
"[resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerNameV2'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]"
],
"sku": {
"name": "[parameters('vmSize')]",
"capacity": "[parameters('instanceCount')]"
},
"properties": {
"upgradePolicy": {
"mode": "Manual"
},
"virtualMachineProfile": {
"osProfile": {
"computerNamePrefix": "vmss",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"storageProfile": {
"osDisk": {
"createOption": "FromImage",
"managedDisk": {
"storageAccountType": "Standard_LRS"
}
},
"imageReference": {
"publisher": "Canonical",
"offer": "[parameters('imageOffer')]",
"sku": "[parameters('imageSku')]",
"version": "latest"
}
},
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "nicConfig",
"properties": {
"primary": true,
"ipConfigurations": [
{
"name": "ipConfig",
"properties": {
"primary": true,
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]"
},
"loadBalancerBackendAddressPools": [
{
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerName'), variables('loadBalancerBackEndPoolName'))]"
}
]
}
},
{
"name": "ipConfig2",
"properties": {
"subnet": {
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]"
},
"loadBalancerBackendAddressPools": [
{
"id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerNameV2'), variables('loadBalancerBackEndPoolNameV2'))]"
}
]
}
}
],
"enableIpForwarding": true
}
}
]
},
"extensionProfile": {
"extensions": [
{
"name": "InstallWebServer",
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.1",
"autoUpgradeMinorVersion": true,
"settings": {
"commandToExecute": "apt-get update && apt-get install -y nginx && systemctl start nginx && systemctl enable nginx && echo '<html><body><h1>Hello from Azure VM Scale Set - Port 80</h1><p>Server hostname: '$(hostname)'</p><p>This content is served from the first load balancer (web-lb)</p><p>Current time: '$(date)'</p></body></html>' > /var/www/html/index.html && mkdir -p /var/www/html-v2 && echo '<html><body><h1>Hello from Azure VM Scale Set - Port 8080</h1><p>Server hostname: '$(hostname)'</p><p>This content is served from the second load balancer (web-lb-v2)</p><p>Current time: '$(date)'</p></body></html>' > /var/www/html-v2/index.html && echo 'server { listen 8080; root /var/www/html-v2; index index.html index.htm; server_name _; location / { try_files $uri $uri/ =404; } }' > /etc/nginx/sites-available/v2 && ln -s /etc/nginx/sites-available/v2 /etc/nginx/sites-enabled/ && ufw allow 'Nginx HTTP' && ufw allow 8080/tcp && systemctl reload nginx"
},
"protectedSettings": {}
}
},
{
"name": "health-extension",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthLinux",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"settings": {
"protocol": "http",
"port": 80,
"requestPath": "/"
}
}
}
]
}
},
"overprovision": true
}
}
],
"outputs": {
"publicIPAddress": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPName'))).ipAddress]"
},
"publicIPAddressV2": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPNameV2'))).ipAddress]"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment