Created
November 30, 2016 18:26
-
-
Save monteirobrena/1292ddbd1cb3ffb385b03cbe701cfdad to your computer and use it in GitHub Desktop.
Template JSON Azure VMSS Auto Scale Load Balancer VHD HTTPS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", | |
"contentVersion": "1.0.0.0", | |
"parameters": { | |
"vmSku": { | |
"type": "string", | |
"defaultValue": "Standard_F1s", | |
"metadata": { | |
"description": "Size of VMs in the VM Scale Set." | |
} | |
}, | |
"vmssName": { | |
"type": "string", | |
"metadata": { | |
"description": "String used as a base for naming resources (9 characters or less). A hash is prepended to this string for some resources, and resource-specific information is appended." | |
}, | |
"maxLength": 9 | |
}, | |
"instanceCount": { | |
"type": "int", | |
"metadata": { | |
"description": "Number of VM instances (100 or less)." | |
}, | |
"maxValue": 100 | |
}, | |
"adminUsername": { | |
"type": "string", | |
"metadata": { | |
"description": "Admin username on all VMs." | |
} | |
}, | |
"adminPassword": { | |
"type": "securestring", | |
"metadata": { | |
"description": "Admin password on all VMs." | |
} | |
} | |
}, | |
"variables": { | |
"location": "[resourceGroup().location]", | |
"storageAccountType": "Standard_LRS", | |
"availabilitySetName": "[concat(parameters('vmssName'), 'aset')]", | |
"saCount": 5, | |
"newStorageAccountSuffix": "[concat(parameters('vmssName'), 'sa')]", | |
"uniqueStringArray": [ | |
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '0')))]", | |
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '1')))]", | |
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '2')))]", | |
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '3')))]", | |
"[concat(uniqueString(concat(resourceGroup().id, variables('newStorageAccountSuffix'), '4')))]" | |
], | |
"vhdContainerName": "[concat(parameters('vmssName'), 'vhd')]", | |
"vhdContainerArray": [ | |
"[concat('https://', variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]", | |
"[concat('https://', variables('uniqueStringArray')[1], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]", | |
"[concat('https://', variables('uniqueStringArray')[2], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]", | |
"[concat('https://', variables('uniqueStringArray')[3], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]", | |
"[concat('https://', variables('uniqueStringArray')[4], variables('newStorageAccountSuffix'), '.blob.core.windows.net/', variables('vhdContainerName'))]" | |
], | |
"osDiskName": "[concat(parameters('vmssName'), 'osdisk')]", | |
"addressPrefix": "10.0.0.0/16", | |
"subnetPrefix": "10.0.0.0/24", | |
"virtualNetworkName": "[concat(parameters('vmssName'), 'vnet')]", | |
"publicIPAddressName": "[concat(parameters('vmssName'), 'pip')]", | |
"subnetName": "[concat(parameters('vmssName'), 'subnet')]", | |
"loadBalancerName": "[concat(parameters('vmssName'), 'lb')]", | |
"publicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]", | |
"lbID": "[resourceId('Microsoft.Network/loadBalancers',variables('loadBalancerName'))]", | |
"natPoolName": "[concat(parameters('vmssName'), 'natpool')]", | |
"bePoolName": "[concat(parameters('vmssName'), 'bepool')]", | |
"natStartPort": 50000, | |
"natEndPort": 50120, | |
"natBackendPort": 22, | |
"nicName": "[concat(parameters('vmssName'), 'nic')]", | |
"ipConfigName": "[concat(parameters('vmssName'), 'ipconfig')]", | |
"frontEndIPConfigID": "[concat(variables('lbID'),'/frontendIPConfigurations/loadBalancerFrontEnd')]", | |
"diagnosticsStorageAccountName": "[concat(variables('uniqueStringArray')[0], variables('newStorageAccountSuffix'))]", | |
"diagnosticsStorageAccountResourceGroup": "[resourceGroup().name]", | |
"accountid": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',variables('diagnosticsStorageAccountResourceGroup'),'/providers/','Microsoft.Storage/storageAccounts/', variables('diagnosticsStorageAccountName'))]", | |
"wadlogs": "<WadCfg><DiagnosticMonitorConfiguration>", | |
"wadperfcounters1": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\"><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\AvailableMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentAvailableMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. percent available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\UsedMemory\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory used\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedMemory\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Memory percentage\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\PercentUsedByCache\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Mem. used by cache\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIdleTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU idle time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentUserTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU user time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentProcessorTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU percentage guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor\\PercentIOWaitTime\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU IO wait time\" locale=\"en-us\"/></PerformanceCounterConfiguration>", | |
"wadperfcounters2": "<PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\BytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk total bytes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk read guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WriteBytesPerSecond\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk write guest OS\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\TransfersPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk transfers\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\ReadsPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk reads\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\WritesPerSecond\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk writes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageReadTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk read time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageWriteTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk write time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageTransferTime\" sampleRate=\"PT15S\" unit=\"Seconds\"><annotation displayName=\"Disk transfer time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk\\AverageDiskQueueLength\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Disk queue length\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>", | |
"wadcfgxstart": "[concat(variables('wadlogs'),variables('wadperfcounters1'),variables('wadperfcounters2'),'<Metrics resourceId=\"')]", | |
"wadmetricsresourceid": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name ,'/providers/','Microsoft.Compute/virtualMachineScaleSets/',parameters('vmssName'))]", | |
"wadcfgxend": "[concat('\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>')]", | |
"osType": { | |
"publisher": "Canonical", | |
"offer": "UbuntuServer", | |
"sku": "16.04.0-LTS", | |
"version": "latest" | |
}, | |
"imageReference": "[variables('osType')]", | |
"computeApiVersion": "2016-03-30", | |
"networkApiVersion": "2016-06-01", | |
"storageApiVersion": "2016-01-01", | |
"insightsApiVersion": "2015-04-01" | |
}, | |
"resources": [ | |
{ | |
"type": "Microsoft.Compute/availabilitySets", | |
"name": "[variables('availabilitySetName')]", | |
"apiVersion": "2015-06-15", | |
"location": "eastus", | |
"properties": { | |
"platformFaultDomainCount": "3", | |
"platformUpdateDomainCount": "20" | |
} | |
}, | |
{ | |
"type": "Microsoft.Network/virtualNetworks", | |
"name": "[variables('virtualNetworkName')]", | |
"location": "[variables('location')]", | |
"apiVersion": "[variables('networkApiVersion')]", | |
"properties": { | |
"addressSpace": { | |
"addressPrefixes": [ | |
"[variables('addressPrefix')]" | |
] | |
}, | |
"subnets": [ | |
{ | |
"name": "[variables('subnetName')]", | |
"properties": { | |
"addressPrefix": "[variables('subnetPrefix')]" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"type": "Microsoft.Storage/storageAccounts", | |
"name": "[concat(variables('uniqueStringArray')[copyIndex()], variables('newStorageAccountSuffix'))]", | |
"location": "[variables('location')]", | |
"apiVersion": "[variables('storageApiVersion')]", | |
"copy": { | |
"name": "storageLoop", | |
"count": "[variables('saCount')]" | |
}, | |
"properties": {}, | |
"kind": "Storage", | |
"sku": { | |
"name": "[variables('storageAccountType')]" | |
} | |
}, | |
{ | |
"type": "Microsoft.Network/publicIPAddresses", | |
"name": "[variables('publicIPAddressName')]", | |
"location": "[variables('location')]", | |
"apiVersion": "[variables('networkApiVersion')]", | |
"properties": { | |
"publicIPAllocationMethod": "Dynamic", | |
"dnsSettings": { | |
"domainNameLabel": "[parameters('vmssName')]" | |
} | |
} | |
}, | |
{ | |
"type": "Microsoft.Network/loadBalancers", | |
"name": "[variables('loadBalancerName')]", | |
"location": "[variables('location')]", | |
"apiVersion": "[variables('networkApiVersion')]", | |
"dependsOn": [ | |
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]" | |
], | |
"properties": { | |
"frontendIPConfigurations": [ | |
{ | |
"name": "LoadBalancerFrontEnd", | |
"properties": { | |
"publicIPAddress": { | |
"id": "[variables('publicIPAddressID')]" | |
} | |
} | |
} | |
], | |
"backendAddressPools": [ | |
{ | |
"name": "[variables('bePoolName')]" | |
} | |
], | |
"inboundNatPools": [ | |
{ | |
"name": "[variables('natPoolName')]", | |
"properties": { | |
"frontendIPConfiguration": { | |
"id": "[variables('frontEndIPConfigID')]" | |
}, | |
"protocol": "tcp", | |
"frontendPortRangeStart": "[variables('natStartPort')]", | |
"frontendPortRangeEnd": "[variables('natEndPort')]", | |
"backendPort": "[variables('natBackendPort')]" | |
} | |
}, | |
{ | |
"name": "natpool2", | |
"properties": { | |
"frontendIPConfiguration": { | |
"id": "[variables('frontEndIPConfigID')]" | |
}, | |
"protocol": "tcp", | |
"frontendPortRangeStart": "80", | |
"frontendPortRangeEnd": "200", | |
"backendPort": "80" | |
} | |
}, | |
{ | |
"name": "natpool3", | |
"properties": { | |
"frontendIPConfiguration": { | |
"id": "[variables('frontEndIPConfigID')]" | |
}, | |
"protocol": "tcp", | |
"frontendPortRangeStart": "443", | |
"frontendPortRangeEnd": "563", | |
"backendPort": "443" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"type": "Microsoft.Compute/virtualMachineScaleSets", | |
"name": "[parameters('vmssName')]", | |
"location": "[variables('location')]", | |
"apiVersion": "[variables('computeApiVersion')]", | |
"dependsOn": [ | |
"storageLoop", | |
"[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]", | |
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]" | |
], | |
"sku": { | |
"name": "[parameters('vmSku')]", | |
"tier": "Standard", | |
"capacity": "[parameters('instanceCount')]" | |
}, | |
"properties": { | |
"overprovision": "false", | |
"upgradePolicy": { | |
"mode": "Manual" | |
}, | |
"virtualMachineProfile": { | |
"storageProfile": { | |
"osDisk": { | |
"name": "vmssosdisk", | |
"caching": "ReadOnly", | |
"createOption": "FromImage", | |
"image": { | |
"uri": "https://storageaccount.blob.core.windows.net/system/Microsoft.Compute/Images/vhds/vhd-osDisk.10aaf77a.vhd" | |
}, | |
"osType": "Linux" | |
} | |
}, | |
"osProfile": { | |
"computerNamePrefix": "[parameters('vmssName')]", | |
"adminUsername": "[parameters('adminUsername')]", | |
"adminPassword": "[parameters('adminPassword')]" | |
}, | |
"networkProfile": { | |
"networkInterfaceConfigurations": [ | |
{ | |
"name": "[variables('nicName')]", | |
"properties": { | |
"primary": "true", | |
"ipConfigurations": [ | |
{ | |
"name": "[variables('ipConfigName')]", | |
"properties": { | |
"subnet": { | |
"id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'), '/subnets/', variables('subnetName'))]" | |
}, | |
"loadBalancerBackendAddressPools": [ | |
{ | |
"id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('loadBalancerName'), '/backendAddressPools/', variables('bePoolName'))]" | |
} | |
], | |
"loadBalancerInboundNatPools": [ | |
{ | |
"id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('loadBalancerName'), '/inboundNatPools/', variables('natPoolName'))]" | |
}, | |
{ | |
"id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('loadBalancerName'), '/inboundNatPools/natpool2')]" | |
}, | |
{ | |
"id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('loadBalancerName'), '/inboundNatPools/natpool3')]" | |
} | |
] | |
} | |
} | |
] | |
} | |
} | |
] | |
}, | |
"extensionProfile": { | |
"extensions": [ | |
{ | |
"name": "LinuxDiagnostic", | |
"properties": { | |
"publisher": "Microsoft.OSTCExtensions", | |
"type": "LinuxDiagnostic", | |
"typeHandlerVersion": "2.3", | |
"autoUpgradeMinorVersion": true, | |
"settings": { | |
"xmlCfg": "[base64(concat(variables('wadcfgxstart'),variables('wadmetricsresourceid'),variables('wadcfgxend')))]", | |
"storageAccount": "[variables('diagnosticsStorageAccountName')]" | |
}, | |
"protectedSettings": { | |
"storageAccountName": "[variables('diagnosticsStorageAccountName')]", | |
"storageAccountKey": "[listkeys(variables('accountid'), variables('storageApiVersion')).keys[0].value]", | |
"storageAccountEndPoint": "https://core.windows.net" | |
} | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
{ | |
"type": "Microsoft.Insights/autoscaleSettings", | |
"apiVersion": "[variables('insightsApiVersion')]", | |
"name": "autoscalewad", | |
"location": "[variables('location')]", | |
"dependsOn": [ | |
"[concat('Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]" | |
], | |
"properties": { | |
"name": "autoscalewad", | |
"targetResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]", | |
"enabled": true, | |
"profiles": [ | |
{ | |
"name": "Profile1", | |
"capacity": { | |
"minimum": "1", | |
"maximum": "10", | |
"default": "1" | |
}, | |
"rules": [ | |
{ | |
"metricTrigger": { | |
"metricName": "\\Processor\\PercentProcessorTime", | |
"metricNamespace": "", | |
"metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]", | |
"timeGrain": "PT1M", | |
"statistic": "Average", | |
"timeWindow": "PT5M", | |
"timeAggregation": "Average", | |
"operator": "GreaterThan", | |
"threshold": 60 | |
}, | |
"scaleAction": { | |
"direction": "Increase", | |
"type": "ChangeCount", | |
"value": "1", | |
"cooldown": "PT1M" | |
} | |
}, | |
{ | |
"metricTrigger": { | |
"metricName": "\\Processor\\PercentProcessorTime", | |
"metricNamespace": "", | |
"metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]", | |
"timeGrain": "PT1M", | |
"statistic": "Average", | |
"timeWindow": "PT10M", | |
"timeAggregation": "Average", | |
"operator": "LessThan", | |
"threshold": 30 | |
}, | |
"scaleAction": { | |
"direction": "Decrease", | |
"type": "ChangeCount", | |
"value": "1", | |
"cooldown": "PT1M" | |
} | |
}, | |
{ | |
"metricTrigger": { | |
"metricName": "\\Memory\\PercentUsedMemory", | |
"metricNamespace": "", | |
"metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]", | |
"timeGrain": "PT1M", | |
"statistic": "Average", | |
"timeWindow": "PT5M", | |
"timeAggregation": "Average", | |
"operator": "GreaterThan", | |
"threshold": 60.0 | |
}, | |
"scaleAction": { | |
"direction": "Increase", | |
"type": "ChangeCount", | |
"value": "1", | |
"cooldown": "PT1M" | |
} | |
}, | |
{ | |
"metricTrigger": { | |
"metricName": "\\Memory\\PercentUsedMemory", | |
"metricNamespace": "", | |
"metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', parameters('vmSSName'))]", | |
"timeGrain": "PT1M", | |
"statistic": "Average", | |
"timeWindow": "PT10M", | |
"timeAggregation": "Average", | |
"operator": "LessThan", | |
"threshold": 30.0 | |
}, | |
"scaleAction": { | |
"direction": "Decrease", | |
"type": "ChangeCount", | |
"value": "1", | |
"cooldown": "PT5M" | |
} | |
} | |
] | |
} | |
] | |
} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment