diff --git a/lansa-vmss-windows-autoscale-sql-database/README.md b/lansa-vmss-windows-autoscale-sql-database/README.md index 082f1d9ecdc6..5b7f262733e2 100644 --- a/lansa-vmss-windows-autoscale-sql-database/README.md +++ b/lansa-vmss-windows-autoscale-sql-database/README.md @@ -40,18 +40,20 @@ The Autoscale rules are configured as follows + A Virtual Network + Six Storage Accounts for deploying up to 100 virtual machines + Two public ip addresses, one for each Load Balancer ++ One Application Gateway with SSL certificate + Two external Load Balancers + One Virtual Machine Scale Set to contain the single virtual machine which is responsible for configuring the database + One Virtual Machine Scale Set to contain the number of web servers requested by the deployer + The Virtual Machines are all instantiated from the Marketplace LANSA SKU lansa-scalable-license. There is a software cost for using this image. [Click here](https://azure.microsoft.com/en-us/marketplace/partners/lansa/lansa-scalable-license/) for details. -+ One Azure SQL Database server with one database, configured as per settings provided by the deployer ++ Optionally, one Azure SQL Database server with one database, configured as per settings provided by the deployer ## Prerequisites Before deploying this template you must: -- Construct your LANSA application using [Visual LANSA for Web Development](https://azure.microsoft.com/en-us/marketplace/partners/lansa/visuallansa/) Version 14.1 with EPCs 141010, 141011 and 141013 applied, or later. -- Construct a deployment image MSI using the LANSA Deployment Tool provided with [Visual LANSA for Web Development](https://azure.microsoft.com/en-us/marketplace/partners/lansa/visuallansa/). +- Construct your LANSA application using [Visual LANSA](https://www.lansa.com/products/visual-lansa.htm) Version 14.1 with EPCs 141010, 141011 and 141013 applied, or later. +- Construct a deployment image MSI using the LANSA Deployment Tool provided with [Visual LANSA](https://www.lansa.com/products/visual-lansa.htm). - Upload your LANSA Web Application MSI to Azure BLOB storage and obtain the URL of the MSI. Note that the template includes a demonstration application so it is not strictly necessary to create a LANSA MSI in order to use the template. +- Obtain an SSL certificate for your web site and convert it to a base64 encoded string. To get the certificate data from a pfx file in PowerShell you can use this: [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("path to pfx file")) - Its also highly recommended to follow the usage instructions below :) ## Usage Instructions @@ -61,7 +63,7 @@ For full instructions for using this template go to [Azure Deployment Tutorial]( ## Notes -1. Two VMSS. One to install the database; 1 to run the web site. OverProvision = false. This is so that extra VMs are not created which would put more load on the database which slows down provisioning. Failure to provision has not been seen. A second reason is that the database installer VMSS MUST NEVER have more than 1 instance installing at a time. Errors occur when publishing the weblets. As well as the database state not being matched to what the VM thinks the state of the database is in terms of table creation, etc. +1. Two VMSS. One to install the database; one to run the web site. OverProvision = false. This is so that extra VMs are not created which would put more load on the database which slows down provisioning. Failure to provision has not been seen. A second reason is that the database installer VMSS MUST NEVER have more than 1 instance installing at a time. Errors occur when publishing the weblets. As well as the database state not being matched to what the VM thinks the state of the database is in terms of table creation, etc. 1. Database VMSS 1. Only 1 instance ever. If instance dies another one is created. 2. This instance is not currently used by the web site as 1 load balancer may only be configured for a single VMSS. diff --git a/lansa-vmss-windows-autoscale-sql-database/Scripts/Deploy-AzureResourceGroup.ps1 b/lansa-vmss-windows-autoscale-sql-database/Scripts/Deploy-AzureResourceGroup.ps1 deleted file mode 100644 index db3047355d9d..000000000000 --- a/lansa-vmss-windows-autoscale-sql-database/Scripts/Deploy-AzureResourceGroup.ps1 +++ /dev/null @@ -1,103 +0,0 @@ -#Requires -Version 3.0 -#Requires -Module AzureRM.Resources -#Requires -Module Azure.Storage - -Param( - [string] [Parameter(Mandatory=$true)] $ResourceGroupLocation, - [string] [Parameter(Mandatory=$true)] $ResourceGroupName, - [switch] $UploadArtifacts, - [string] $StorageAccountName, - [string] $StorageContainerName = $ResourceGroupName.ToLowerInvariant() + '-stageartifacts', - [string] $TemplateFile = '..\azuredeploy.json', - [string] $TemplateParametersFile = '..\azuredeploy.parameters.json', - [string] $ArtifactStagingDirectory = '..\bin\Debug\staging', - [string] $DSCSourceFolder = '..\DSC' -) - -Import-Module Azure -ErrorAction SilentlyContinue - -try { - [Microsoft.Azure.Common.Authentication.AzureSession]::ClientFactory.AddUserAgent("VSAzureTools-$UI$($host.name)".replace(" ","_"), "2.9") -} catch { } - -Set-StrictMode -Version 3 - -$OptionalParameters = New-Object -TypeName Hashtable -$TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile)) -$TemplateParametersFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFile)) - -if ($UploadArtifacts) { - # Convert relative paths to absolute paths if needed - $ArtifactStagingDirectory = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $ArtifactStagingDirectory)) - $DSCSourceFolder = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $DSCSourceFolder)) - - Set-Variable ArtifactsLocationName '_artifactsLocation' -Option ReadOnly -Force - Set-Variable ArtifactsLocationSasTokenName '_artifactsLocationSasToken' -Option ReadOnly -Force - - $OptionalParameters.Add($ArtifactsLocationName, $null) - $OptionalParameters.Add($ArtifactsLocationSasTokenName, $null) - - # Parse the parameter file and update the values of artifacts location and artifacts location SAS token if they are present - $JsonContent = Get-Content $TemplateParametersFile -Raw | ConvertFrom-Json - $JsonParameters = $JsonContent | Get-Member -Type NoteProperty | Where-Object {$_.Name -eq "parameters"} - - if ($JsonParameters -eq $null) { - $JsonParameters = $JsonContent - } - else { - $JsonParameters = $JsonContent.parameters - } - - $JsonParameters | Get-Member -Type NoteProperty | ForEach-Object { - $ParameterValue = $JsonParameters | Select-Object -ExpandProperty $_.Name - - if ($_.Name -eq $ArtifactsLocationName -or $_.Name -eq $ArtifactsLocationSasTokenName) { - $OptionalParameters[$_.Name] = $ParameterValue.value - } - } - - # Create DSC configuration archive - if (Test-Path $DSCSourceFolder) { - Add-Type -Assembly System.IO.Compression.FileSystem - $ArchiveFile = Join-Path $ArtifactStagingDirectory "dsc.zip" - Remove-Item -Path $ArchiveFile -ErrorAction SilentlyContinue - [System.IO.Compression.ZipFile]::CreateFromDirectory($DSCSourceFolder, $ArchiveFile) - } - - $StorageAccountContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -eq $StorageAccountName}).Context - - # Generate the value for artifacts location if it is not provided in the parameter file - $ArtifactsLocation = $OptionalParameters[$ArtifactsLocationName] - if ($ArtifactsLocation -eq $null) { - $ArtifactsLocation = $StorageAccountContext.BlobEndPoint + $StorageContainerName - $OptionalParameters[$ArtifactsLocationName] = $ArtifactsLocation - } - - # Copy files from the local storage staging location to the storage account container - New-AzureStorageContainer -Name $StorageContainerName -Context $StorageAccountContext -Permission Container -ErrorAction SilentlyContinue *>&1 - - $ArtifactFilePaths = Get-ChildItem $ArtifactStagingDirectory -Recurse -File | ForEach-Object -Process {$_.FullName} - foreach ($SourcePath in $ArtifactFilePaths) { - $BlobName = $SourcePath.Substring($ArtifactStagingDirectory.length + 1) - Set-AzureStorageBlobContent -File $SourcePath -Blob $BlobName -Container $StorageContainerName -Context $StorageAccountContext -Force - } - - # Generate the value for artifacts location SAS token if it is not provided in the parameter file - $ArtifactsLocationSasToken = $OptionalParameters[$ArtifactsLocationSasTokenName] - if ($ArtifactsLocationSasToken -eq $null) { - # Create a SAS token for the storage container - this gives temporary read-only access to the container - $ArtifactsLocationSasToken = New-AzureStorageContainerSASToken -Container $StorageContainerName -Context $StorageAccountContext -Permission r -ExpiryTime (Get-Date).AddHours(4) - $ArtifactsLocationSasToken = ConvertTo-SecureString $ArtifactsLocationSasToken -AsPlainText -Force - $OptionalParameters[$ArtifactsLocationSasTokenName] = $ArtifactsLocationSasToken - } -} - -# Create or update the resource group using the specified template file and template parameters file -New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -ErrorAction Stop - -New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) ` - -ResourceGroupName $ResourceGroupName ` - -TemplateFile $TemplateFile ` - -TemplateParameterFile $TemplateParametersFile ` - @OptionalParameters ` - -Force -Verbose \ No newline at end of file diff --git a/lansa-vmss-windows-autoscale-sql-database/azuredeploy.json b/lansa-vmss-windows-autoscale-sql-database/azuredeploy.json index 6cc89939992d..2dfcc8dc5545 100644 --- a/lansa-vmss-windows-autoscale-sql-database/azuredeploy.json +++ b/lansa-vmss-windows-autoscale-sql-database/azuredeploy.json @@ -1,56 +1,161 @@ { - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { - "msiUri": { + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Resource Group Location." + } + }, + "msiURL": { "type": "string", "defaultValue": "https://lansalpcmsdn.blob.core.windows.net/app/test/AWAMAPP_v14.1.2_en-us.msi", "metadata": { - "description": "URL of the LANSA MSI to install on each VM." + "description": "URL of the LANSA MSI which will be installed on each virtual machine." } }, - "vmSku": { + "virtualMachineSize": { "type": "string", - "defaultValue": "Standard_A2", + "defaultValue": "Standard_B4ms", "metadata": { - "description": "Size of VMs in the VM Scale Set." + "description": "Size of the Virtual Machines in the Virtual Machine Scale Set." } }, - "vmssName": { + "dbVirtualMachineSize": { "type": "string", + "defaultValue": "Standard_B2ms", "metadata": { - "description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended." + "description": "Size of the Virtual Machine which manages the database." + } + }, + "stackName": { + "type": "string", + "metadata": { + "description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended. Some identifiers use precisely 9 characters from this name and so it can be useful to use exactly 9. The template pads it out or truncates it as necessary to make it 9 characters long where required." }, + "minLength" : 3, "maxLength": 61 }, - "minInstanceCount": { + "applicationGatewaySkuTier": { + "type": "string", + "allowedValues": [ + "Standard", + "WAF" + ], + "defaultValue": "Standard", + "metadata": { + "description": "Application Gateway SKU Tier" + } + }, + "applicationGatewaySkuName": { + "type": "string", + "allowedValues": [ + "Standard_Small", + "Standard_Medium", + "Standard_Large", + "WAF_Medium", + "WAF_Large", + "WAF_v2" + ], + "defaultValue": "Standard_Medium", + "metadata": { + "description": "Application Gateway SKU Name" + } + }, + "applicationGatewayCapacity": { + "type": "int", + "defaultValue": 2, + "metadata": { + "description": "Number of Application Gateway instances" + } + }, + "certificateBase64Encoded": { + "type": "string", + "metadata": { + "description": "Base 64 encoded String representing the SSL certificate" + } + }, + "certificatePassword": { + "type": "securestring", + "metadata": { + "description": "SSL certificate password" + } + }, + "minimumInstanceCount": { "type": "int", "defaultValue": 1, "metadata": { - "description": "Minimum number of VM instances (1 or more)." + "description": "Minimum number of Virtual Machine instances (1 or more)." }, - "minValue": 1 + "minValue": 1, + "maxValue": 100 }, - "maxInstanceCount": { + "maximumInstanceCount": { "type": "int", "defaultValue": 100, "metadata": { - "description": "Maximum number of VM instances (100 or less)." + "description": "Maximum number of Virtual Machine instances (100 or less)." }, + "minValue": 1, "maxValue": 100 }, + "databaseNewOrExisting": { + "type": "string", + "defaultValue": "new", + "allowedValues": [ + "new", + "existing" + ], + "metadata": { + "description": "Determines whether a new SQL database should be provisioned or to use an existing database. Parameters which are relevant to choosing 'new' are prefixed 'New DB'. Parameters which are relevant to choosing 'existing' are prefixed 'Existing DB'." + } + }, + "databaseType": { + "type": "string", + "defaultValue": "SQLAZURE", + "allowedValues": [ + "MSSQLS", + "SQLAZURE", + "MYSQL" + ], + "metadata": { + "description": "Existing DB. Refer to LANSA documentation for an explanation of each Database Type and the supported versions of the database servers. DO NOT CHANGE THIS IF CREATING A NEW DATABASE. IT MUST BE SET TO SQLAZURE." + } + }, + "databaseServerName": { + "type": "string", + "defaultValue": "lansa", + "metadata": { + "description": "Existing DB. The name of the existing Database Server to connect to. If the name has /MSSQLSERVER appended, omit it." + } + }, "databaseName": { "type": "string", "defaultValue": "lansa", "metadata": { - "description": "The name of the new database to create." + "description": "The name of the new database to create or name of the existing database to connect to." + } + }, + "databaseLogin": { + "type": "string", + "metadata": { + "description": "The admin user of the Azure SQL Database" } }, + "databaseLoginPassword": { + "type": "securestring", + "metadata": { + "description": "The password of the admin user of the Azure SQL Database" + } + + }, "collation": { "type": "string", "defaultValue": "SQL_Latin1_General_CP1_CI_AS", "metadata": { - "description": "The database collation for governing the proper use of characters." + "description": "New DB. The new database collation for governing the proper use of characters." } }, "edition": { @@ -62,7 +167,7 @@ "Premium" ], "metadata": { - "description": "The type of database to create." + "description": "New DB. The type of database to create." } }, "requestedServiceObjectiveName": { @@ -74,6 +179,11 @@ "S1", "S2", "S3", + "S4", + "S6", + "S7", + "S9", + "S12", "P1", "P2", "P4", @@ -82,19 +192,18 @@ "P15" ], "metadata": { - "description": "Describes the performance level for Edition" + "description": "New DB. Describes the performance level for Edition" } }, "maxSizeBytes": { "type": "string", "defaultValue": "1073741824", "metadata": { - "description": "The maximum size, in bytes, for the database" + "description": "New DB. The maximum size, in bytes, for the new database" } }, "adminUsername": { "type": "string", - "defaultValue": "lansa", "metadata": { "description": "Admin username on all VMs." } @@ -107,7 +216,6 @@ }, "webUsername": { "type": "string", - "defaultValue": "Pcxuser2", "metadata": { "description": "Web Server username on all VMs." } @@ -118,20 +226,6 @@ "description": "Web Server password on all VMs." } }, - "databaseLogin": { - "type": "string", - "defaultValue": "lansa", - "metadata": { - "description": "The admin user of the Azure SQL Database" - } - }, - "databaseLoginPassword": { - "type": "securestring", - "metadata": { - "description": "The password of the admin user of the Azure SQL Database" - } - - }, "webServerMaxConnect": { "type": "string", "defaultValue": "20", @@ -157,14 +251,14 @@ "type": "string", "defaultValue": "0", "metadata": { - "description": "Uninstall the MSI: Set this to 1 to uninstall the MSI. The MSI used to uninstall is the last one that was installed. It is called c:\\lansa\\MyApp.msi" + "description": "Uninstall the MSI: Set this to 1 to uninstall the MSI. The MSI used to uninstall, is the last one that was installed. It is called c:\\lansa\\MyApp.msi" } }, "triggerWebConfig": { "type": "string", "defaultValue": "0", "metadata": { - "description": "Update Stack: Set this to 1 to update the web configuration" + "description": "Update Stack: Set this to 1 to update the web configuration" } }, "imageOffer": { @@ -172,7 +266,7 @@ "defaultValue": "lansa-scalable-license", "allowedValues": [ "lansa-scalable-license", - "visuallansa" + "lansa-scalable-license-preview" ], "metadata": { "description": "The offer of the image. Allowed values: lansa-scalable-license, lansa-scalable-license-preview" @@ -180,10 +274,10 @@ }, "gitBranch": { "type": "string", - "defaultValue": "support/L4W14000_scalable_azure", + "defaultValue": "support/L4W14200_scalable", "metadata": { "description": "Git Branch" - } + } }, "trace": { "type": "string", @@ -200,15 +294,17 @@ "type": "string", "defaultValue": "0", "metadata": { - "description": "Re-run licensing" + "description": "Re-run licensing. It is unlikely that this parameter needs to be used" } } }, - "variables": { - "namingInfix": "[toLower(substring(concat(parameters('vmssName'), uniqueString(resourceGroup().id)), 0, 9))]", - "longNamingInfix": "[toLower(parameters('vmssName'))]", - "dblongNamingInfix": "[toLower(concat('db',parameters('vmssName')))]", - "dbvmssName": "[toLower(substring(concat('db',parameters('vmssName'), uniqueString(resourceGroup().id)), 0, 9))]", + "variables": { + "isNewDatabase": "[equals(parameters('databaseNewOrExisting'), 'new')]", + "namingInfix": "[toLower(substring(concat(parameters('stackName'), uniqueString(resourceGroup().id)), 0, 9))]", + "longNamingInfix": "[toLower(parameters('stackName'))]", + "dblongNamingInfix": "[toLower(concat('db',parameters('stackName')))]", + "aglongNamingInfix": "[toLower(concat('ag',parameters('stackName')))]", + "dbvmssName": "[toLower(substring(concat('db',parameters('stackName'), uniqueString(resourceGroup().id)), 0, 9))]", "addressPrefix": "10.0.0.0/16", "subnetPrefix": "10.0.0.0/24", "virtualNetworkName": "[concat(variables('namingInfix'), 'vnet')]", @@ -216,24 +312,24 @@ "dbpublicIPAddressName": "[concat(variables('namingInfix'), 'dbpip')]", "subnetName": "[concat(variables('namingInfix'), 'subnet')]", "loadBalancerName": "[concat(variables('namingInfix'), 'lb')]", + "lbFrontEndName": "LoadBalancerFrontEnd", + "lbProbeName": "LoadBalancerProbe", "dbloadBalancerName": "[concat(variables('namingInfix'), 'dblb')]", + "dblbFrontEndName": "dbLoadBalancerFrontEnd", + "dblbProbeName": "dbLoadBalancerProbe", "publicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]", "dbpublicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',variables('dbpublicIPAddressName'))]", - "lbID": "[resourceId('Microsoft.Network/loadBalancers',variables('loadBalancerName'))]", - "dblbID": "[resourceId('Microsoft.Network/loadBalancers',variables('dbloadBalancerName'))]", "natPoolName": "[concat(variables('namingInfix'), 'natpool')]", - "dbnatPoolName": "[concat(variables('namingInfix'), 'dbnatpool')]", "bePoolName": "[concat(variables('namingInfix'), 'bepool')]", "dbbePoolName": "[concat(variables('namingInfix'), 'dbbepool')]", - "dbvmSku": "Standard_A1", "natStartPort": 50000, "natEndPort": 50119, "natBackendPort": 3389, "nicName": "[concat(variables('namingInfix'), 'nic')]", "ipConfigName": "[concat(variables('namingInfix'), 'ipconfig')]", - "frontEndIPConfigID": "[concat(variables('lbID'),'/frontendIPConfigurations/loadBalancerFrontEnd')]", + "frontEndIPConfigID": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('loadBalancerName'), variables('lbFrontEndName'))]", "imagePublisher": "lansa", - "imageSku": "lansa-scalable-license-14-1", + "imageSku": "lansa-scalable-license-14-2", "osType": { "publisher": "[variables('imagePublisher')]", "offer": "[parameters('imageOffer')]", @@ -245,14 +341,26 @@ "gitRepo": "https://raw.githubusercontent.com/robe070/cookbooks/", "gitRefreshName": "git-pull.ps1", "gitRefreshUri": "[concat(variables('gitRepo'), parameters('gitBranch'), '/scripts/', variables('gitRefreshName'))]", - "q": "'" + "q": "'", + "agPublicIPAddressName": "[concat(variables('namingInfix'), '-agpip')]", + "agPublicIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',variables('agPublicIPAddressName'))]", + "agSubnetPrefix": "10.0.1.0/24", + "agSubnetName": "[concat(variables('namingInfix'), '-agsubnet')]", + "agSubnetID": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('agsubnetName'))]", + "agName": "[concat(variables('namingInfix'), '-ag')]", + "agHttpListenerName": "appGatewayHttpListener", + "agFrontendIPName": "appGatewayFrontendIP", + "agFrontendPortName": "appGatewayFrontendPort", + "agSslCertName": "appGatewaySslCert", + "agBackendHttpSettingsName": "appGatewayBackendHttpSettings", + "agBackendAddressPoolName": "[concat(variables('namingInfix'), '-agpool')]" }, "resources": [ { "type": "Microsoft.Network/virtualNetworks", "name": "[variables('virtualNetworkName')]", - "location": "[resourceGroup().location]", - "apiVersion": "2016-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-08-01", "properties": { "addressSpace": { "addressPrefixes": [ @@ -265,6 +373,12 @@ "properties": { "addressPrefix": "[variables('subnetPrefix')]" } + }, + { + "name": "[variables('agSubnetName')]", + "properties": { + "addressPrefix": "[variables('agSubnetPrefix')]" + } } ] } @@ -272,8 +386,8 @@ { "type": "Microsoft.Network/publicIPAddresses", "name": "[variables('publicIPAddressName')]", - "location": "[resourceGroup().location]", - "apiVersion": "2016-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-08-01", "properties": { "publicIPAllocationMethod": "Dynamic", "dnsSettings": { @@ -284,15 +398,15 @@ { "type": "Microsoft.Network/loadBalancers", "name": "[variables('loadBalancerName')]", - "location": "[resourceGroup().location]", - "apiVersion": "2016-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-08-01", "dependsOn": [ "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]" ], "properties": { "frontendIPConfigurations": [ { - "name": "LoadBalancerFrontEnd", + "name": "[variables('lbFrontEndName')]", "properties": { "publicIPAddress": { "id": "[variables('publicIPAddressID')]" @@ -327,10 +441,10 @@ "id": "[variables('frontEndIPConfigID')]" }, "backendAddressPool": { - "id": "[concat(variables('lbID'), '/backendAddressPools/', variables('bePoolName'))]" + "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadbalancerName'), variables('bePoolName'))]" }, "probe": { - "id": "[concat(variables('lbID'), '/probes/lbprobe')]" + "id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('loadbalancerName'), variables('lbProbeName'))]" }, "protocol": "Tcp", "loadDistribution": "SourceIP", @@ -342,12 +456,11 @@ ], "probes": [ { - "name": "lbprobe", + "name": "[variables('lbProbeName')]", "properties": { "protocol": "Http", "port": 80, "intervalInSeconds": 15, - "timeoutInSeconds": 31, "numberOfProbes": 2, "requestPath": "cgi-bin/probe" } @@ -358,8 +471,8 @@ { "type": "Microsoft.Network/publicIPAddresses", "name": "[variables('dbpublicIPAddressName')]", - "location": "[resourceGroup().location]", - "apiVersion": "2016-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-08-01", "properties": { "publicIPAllocationMethod": "Dynamic", "dnsSettings": { @@ -370,15 +483,15 @@ { "type": "Microsoft.Network/loadBalancers", "name": "[variables('dbloadBalancerName')]", - "location": "[resourceGroup().location]", - "apiVersion": "2016-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-08-01", "dependsOn": [ "[concat('Microsoft.Network/publicIPAddresses/', variables('dbpublicIPAddressName'))]" ], "properties": { "frontendIPConfigurations": [ { - "name": "LoadBalancerFrontEnd", + "name": "[variables('dblbFrontEndName')]", "properties": { "publicIPAddress": { "id": "[variables('dbpublicIPAddressID')]" @@ -396,13 +509,13 @@ "name": "lbrule", "properties": { "frontendIPConfiguration": { - "id": "[concat(variables('dblbID'),'/frontendIPConfigurations/loadBalancerFrontEnd')]" + "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('dbloadBalancerName'), variables('dblbFrontEndName'))]" }, "backendAddressPool": { - "id": "[concat(variables('dblbID'), '/backendAddressPools/', variables('dbbePoolName'))]" + "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('dbloadBalancerName'), variables('dbbePoolName'))]" }, "probe": { - "id": "[concat(variables('dblbID'), '/probes/lbprobe')]" + "id": "[resourceId('Microsoft.Network/loadBalancers/probes', variables('dbloadBalancerName'), variables('dblbProbeName'))]" }, "protocol": "Tcp", "loadDistribution": "SourceIP", @@ -414,12 +527,11 @@ ], "probes": [ { - "name": "lbprobe", + "name": "[variables('dblbProbeName')]", "properties": { "protocol": "Tcp", "port": 3389, "intervalInSeconds": 15, - "timeoutInSeconds": 31, "numberOfProbes": 2 } } @@ -429,16 +541,17 @@ { "type": "Microsoft.Compute/virtualMachineScaleSets", "name": "[variables('dbvmssName')]", - "location": "[resourceGroup().location]", - "apiVersion": "2017-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-07-01", "dependsOn": [ "[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]", "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]", "[concat('Microsoft.Sql/servers/', variables('sqlserverName'))]", - "[concat('Microsoft.Sql/servers/', variables('sqlserverName'), '/databases/', parameters('databaseName'))]" + "[concat('Microsoft.Sql/servers/', variables('sqlserverName'), '/databases/', parameters('databaseName'))]", + "[concat('Microsoft.Network/applicationGateways/', variables('agName'))]" ], "sku": { - "name": "[variables('dbvmSku')]", + "name": "[parameters('dbVirtualMachineSize')]", "tier": "Standard", "capacity": 1 }, @@ -479,11 +592,11 @@ "name": "[concat( 'db',variables('ipConfigName'))]", "properties": { "subnet": { - "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'), '/subnets/', variables('subnetName'))]" + "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]" }, "loadBalancerBackendAddressPools": [ { - "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('dbloadBalancerName'), '/backendAddressPools/', variables('dbbePoolName'))]" + "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('dbloadBalancerName'), variables('dbbePoolName'))]" } ] } @@ -500,14 +613,14 @@ "properties": { "publisher": "Microsoft.Compute", "type": "CustomScriptExtension", - "typeHandlerVersion": "1.8", + "typeHandlerVersion": "1.9", "autoUpgradeMinorVersion": true, "forceUpdateTag": "[concat( parameters('installMSI'),parameters('updateMSI'),parameters('triggerWebConfig'),parameters('UninstallMSI'),parameters('fixLicense'), parameters('trace'), parameters('gitBranch') )]", "settings": { "fileUris": [ "[variables('gitRefreshUri')]" ] }, "protectedSettings": { - "commandToExecute": "[concat('powershell -NoProfile -ExecutionPolicy unrestricted -command \"& {pushd;./',variables('gitRefreshName'), ' ', parameters('gitBranch'), ';popd;', 'pushd;c:\\lansa\\scripts\\azure-custom-script.ps1 ', '-server_name ',variables('Q'), reference(variables('sqlserverName')).fullyQualifiedDomainName, variables('Q'), ' -DBUT ', variables('Q'), 'SQLAZURE', variables('Q'), ' -dbname ', variables('Q'), parameters('databaseName'), variables('Q'), ' -dbuser ', variables('Q'), parameters('databaseLogin'), variables('Q'), ' -dbpassword ', variables('Q'), parameters('databaseLoginPassword'), variables('Q'), ' -webuser ', variables('Q'), parameters('webUsername'), variables('Q'), ' -webpassword ', variables('Q'), parameters('webPassword'), variables('Q'), ' -MSIuri ', variables('Q'), parameters('msiUri'), variables('Q'), ' -maxconnections ', variables('Q'), parameters('webServerMaxConnect'), variables('Q'), ' -trace ', variables('Q'), parameters('trace'), variables('Q'), ' -installMSI ', variables('Q'), parameters('installMSI'), variables('Q'), ' -updateMSI ', variables('Q'), parameters('updateMSI'), variables('Q'),' -triggerWebConfig ', variables('Q'), parameters('triggerWebConfig'), variables('Q'),' -UninstallMSI ', variables('Q'), parameters('UninstallMSI'), variables('Q'), ' -fixLicense ', variables('Q'), parameters('fixLicense'), variables('Q'), ';if ($LASTEXITCODE -ne 0) {Write-Error (\"MSI Install failed\");exit $LASTEXITCODE}; exit 0;popd;}\"')]" + "commandToExecute": "[concat('powershell -NoProfile -ExecutionPolicy unrestricted -command \"& {pushd;./',variables('gitRefreshName'), ' ', parameters('gitBranch'), ';popd;', 'pushd;c:\\lansa\\scripts\\azure-custom-script.ps1 ', '-server_name ',variables('Q'), if(variables('isNewDatabase'), reference(variables('sqlserverName')).fullyQualifiedDomainName, parameters('databaseServerName')), variables('Q'), ' -DBUT ', variables('Q'), parameters('databaseType'), variables('Q'), ' -dbname ', variables('Q'), parameters('databaseName'), variables('Q'), ' -dbuser ', variables('Q'), parameters('databaseLogin'), variables('Q'), ' -dbpassword ', variables('Q'), parameters('databaseLoginPassword'), variables('Q'), ' -webuser ', variables('Q'), parameters('webUsername'), variables('Q'), ' -webpassword ', variables('Q'), parameters('webPassword'), variables('Q'), ' -MSIuri ', variables('Q'), parameters('msiURL'), variables('Q'), ' -maxconnections ', variables('Q'), parameters('webServerMaxConnect'), variables('Q'), ' -trace ', variables('Q'), parameters('trace'), variables('Q'), ' -installMSI ', variables('Q'), parameters('installMSI'), variables('Q'), ' -updateMSI ', variables('Q'), parameters('updateMSI'), variables('Q'),' -triggerWebConfig ', variables('Q'), parameters('triggerWebConfig'), variables('Q'),' -UninstallMSI ', variables('Q'), parameters('UninstallMSI'), variables('Q'), ' -fixLicense ', variables('Q'), parameters('fixLicense'), variables('Q'), ';if ($LASTEXITCODE -ne 0) {Write-Error (\"MSI Install failed\");exit $LASTEXITCODE}; exit 0;popd;}\"')]" } } } @@ -519,8 +632,8 @@ { "type": "Microsoft.Compute/virtualMachineScaleSets", "name": "[variables('namingInfix')]", - "location": "[resourceGroup().location]", - "apiVersion": "2017-03-30", + "location": "[parameters('location')]", + "apiVersion": "2019-07-01", "dependsOn": [ "[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]", "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]", @@ -529,9 +642,9 @@ "[concat('Microsoft.Compute/virtualMachineScaleSets/', variables('dbvmssName'))]" ], "sku": { - "name": "[parameters('vmSku')]", + "name": "[parameters('virtualMachineSize')]", "tier": "Standard", - "capacity": "[parameters('minInstanceCount')]" + "capacity": "[parameters('minimumInstanceCount')]" }, "plan": { "name": "[variables('imageSKU')]", @@ -570,16 +683,21 @@ "name": "[variables('ipConfigName')]", "properties": { "subnet": { - "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'), '/subnets/', variables('subnetName'))]" - }, - "loadBalancerBackendAddressPools": [ + "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]" + }, + "loadBalancerBackendAddressPools": [ + { + "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerName'), variables('bePoolName'))]" + } + ], + "loadBalancerInboundNatPools": [ { - "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('loadBalancerName'), '/backendAddressPools/', variables('bePoolName'))]" + "id": "[resourceId('Microsoft.Network/loadBalancers/inboundNatPools', variables('loadBalancerName'), variables('natPoolName'))]" } ], - "loadBalancerInboundNatPools": [ + "applicationGatewayBackendAddressPools": [ { - "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('loadBalancerName'), '/inboundNatPools/', variables('natPoolName'))]" + "id": "[resourceId('Microsoft.Network/applicationGateways/backendAddressPools', variables('agName'), variables('agBackendAddressPoolName'))]" } ] } @@ -596,14 +714,14 @@ "properties": { "publisher": "Microsoft.Compute", "type": "CustomScriptExtension", - "typeHandlerVersion": "1.8", + "typeHandlerVersion": "1.9", "autoUpgradeMinorVersion": true, "forceUpdateTag": "[concat( parameters('installMSI'),parameters('updateMSI'),parameters('triggerWebConfig'),parameters('UninstallMSI'),parameters('fixLicense'), parameters('trace'), parameters('gitBranch') )]", "settings": { "fileUris": [ "[variables('gitRefreshUri')]" ] }, "protectedSettings": { - "commandToExecute": "[concat('powershell -NoProfile -ExecutionPolicy unrestricted -command \"& {pushd;./',variables('gitRefreshName'), ' ', parameters('gitBranch'), ';popd;', 'pushd;c:\\lansa\\scripts\\azure-custom-script.ps1 ', '-SUDB \"0\" -server_name ', variables('Q'), reference(variables('sqlserverName')).fullyQualifiedDomainName, variables('Q'), ' -DBUT ', variables('Q'), 'SQLAZURE', variables('Q'), ' -dbname ', variables('Q'), parameters('databaseName'), variables('Q'), ' -dbuser ', variables('Q'), parameters('databaseLogin'), variables('Q'), ' -dbpassword ', variables('Q'), parameters('databaseLoginPassword'), variables('Q'), ' -webuser ', variables('Q'), parameters('webUsername'), variables('Q'), ' -webpassword ', variables('Q'), parameters('webPassword'), variables('Q'), ' -MSIuri ', variables('Q'), parameters('msiUri'), variables('Q'), ' -maxconnections ', variables('Q'), parameters('webServerMaxConnect'), variables('Q'), ' -trace ', variables('Q'), parameters('trace'), variables('Q'), ' -installMSI ', variables('Q'), parameters('installMSI'), variables('Q'), ' -updateMSI ', variables('Q'), parameters('updateMSI'), variables('Q'),' -triggerWebConfig ', variables('Q'), parameters('triggerWebConfig'), variables('Q'), ' -UninstallMSI ', variables('Q'), parameters('UninstallMSI'), variables('Q'), ' -fixLicense ', variables('Q'), parameters('fixLicense'), variables('Q'), ';if ($LASTEXITCODE -ne 0) {Write-Error (\"MSI Install failed\");exit $LASTEXITCODE}; exit 0;popd;}\"')]" + "commandToExecute": "[concat('powershell -NoProfile -ExecutionPolicy unrestricted -command \"& {pushd;./',variables('gitRefreshName'), ' ', parameters('gitBranch'), ';popd;', 'pushd;c:\\lansa\\scripts\\azure-custom-script.ps1 ', '-SUDB \"0\" -server_name ', variables('Q'), if(variables('isNewDatabase'), reference(variables('sqlserverName')).fullyQualifiedDomainName, parameters('databaseServerName')), variables('Q'), ' -DBUT ', variables('Q'), parameters('databaseType'), variables('Q'), ' -dbname ', variables('Q'), parameters('databaseName'), variables('Q'), ' -dbuser ', variables('Q'), parameters('databaseLogin'), variables('Q'), ' -dbpassword ', variables('Q'), parameters('databaseLoginPassword'), variables('Q'), ' -webuser ', variables('Q'), parameters('webUsername'), variables('Q'), ' -webpassword ', variables('Q'), parameters('webPassword'), variables('Q'), ' -MSIuri ', variables('Q'), parameters('msiURL'), variables('Q'), ' -maxconnections ', variables('Q'), parameters('webServerMaxConnect'), variables('Q'), ' -trace ', variables('Q'), parameters('trace'), variables('Q'), ' -installMSI ', variables('Q'), parameters('installMSI'), variables('Q'), ' -updateMSI ', variables('Q'), parameters('updateMSI'), variables('Q'),' -triggerWebConfig ', variables('Q'), parameters('triggerWebConfig'), variables('Q'), ' -UninstallMSI ', variables('Q'), parameters('UninstallMSI'), variables('Q'), ' -fixLicense ', variables('Q'), parameters('fixLicense'), variables('Q'), ';if ($LASTEXITCODE -ne 0) {Write-Error (\"MSI Install failed\");exit $LASTEXITCODE}; exit 0;popd;}\"')]" } } } @@ -616,28 +734,27 @@ "type": "Microsoft.Insights/autoscaleSettings", "apiVersion": "2015-04-01", "name": "autoscalehost", - "location": "[resourceGroup().location]", + "location": "[parameters('location')]", "dependsOn": [ - "[concat('Microsoft.Compute/virtualMachineScaleSets/', variables('namingInfix'))]" + "[ResourceId('Microsoft.Compute/virtualMachineScaleSets', variables('namingInfix'))]" ], "properties": { "name": "autoscalehost", - "targetResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', variables('namingInfix'))]", + "targetResourceUri": "[ResourceId('Microsoft.Compute/virtualMachineScaleSets', variables('namingInfix'))]", "enabled": true, "profiles": [ { "name": "Profile1", "capacity": { - "minimum": "[parameters('minInstanceCount')]", - "maximum": "[parameters('maxInstanceCount')]", - "default": "[parameters('minInstanceCount')]" + "minimum": "[parameters('minimumInstanceCount')]", + "maximum": "[parameters('maximumInstanceCount')]", + "default": "[parameters('minimumInstanceCount')]" }, "rules": [ { "metricTrigger": { "metricName": "Percentage CPU", - "metricNamespace": "", - "metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', variables('namingInfix'))]", + "metricResourceUri": "[ResourceId('Microsoft.Compute/virtualMachineScaleSets', variables('namingInfix'))]", "timeGrain": "PT1M", "statistic": "Average", "timeWindow": "PT5M", @@ -655,8 +772,7 @@ { "metricTrigger": { "metricName": "Percentage CPU", - "metricNamespace": "", - "metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Compute/virtualMachineScaleSets/', variables('namingInfix'))]", + "metricResourceUri": "[ResourceId('Microsoft.Compute/virtualMachineScaleSets', variables('namingInfix'))]", "timeGrain": "PT1M", "statistic": "Average", "timeWindow": "PT5M", @@ -677,9 +793,151 @@ } }, { + "type": "Microsoft.Insights/autoscaleSettings", + "apiVersion": "2015-04-01", + "name": "[variables('dbvmssName')]", + "location": "[parameters('location')]", + "dependsOn": [ + "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('dbvmssName'))]" + ], + "properties": { + "name": "[variables('dbvmssName')]", + "targetResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', variables('dbvmssName'))]", + "enabled": true, + "profiles": [ + { + "name": "Single Fixed Instance", + "capacity": { + "minimum": "1", + "maximum": "1", + "default": "1" + } + } + ] + } + }, + { + "apiVersion": "2019-08-01", + "type": "Microsoft.Network/publicIPAddresses", + "name": "[variables('agPublicIPAddressName')]", + "location": "[parameters('location')]", + "properties": { + "publicIPAllocationMethod": "Dynamic", + "dnsSettings": { + "domainNameLabel": "[variables('aglongNamingInfix')]" + } + } + }, + { + "apiVersion": "2019-04-01", + "name": "[variables('agName')]", + "type": "Microsoft.Network/applicationGateways", + "location": "[parameters('location')]", + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]", + "[concat('Microsoft.Network/publicIPAddresses/', variables('agPublicIPAddressName'))]" + ], + "properties": { + "sku": { + "tier": "[parameters('applicationGatewaySkuTier')]", + "name": "[parameters('applicationGatewaySkuName')]", + "capacity": "[parameters('applicationGatewayCapacity')]" + }, + "sslCertificates": [ + { + "name": "[variables('agSslCertName')]", + "properties": { + "data": "[parameters('certificateBase64Encoded')]", + "password": "[parameters('certificatePassword')]" + } + } + ], + "gatewayIPConfigurations": [ + { + "name": "appGatewayIpConfig", + "properties": { + "subnet": { + "id": "[variables('agSubnetID')]" + } + } + } + ], + "frontendIPConfigurations": [ + { + "name": "[variables('agFrontendIPName')]", + "properties": { + "PublicIPAddress": { + "id": "[variables('agPublicIPAddressID')]" + } + } + } + ], + "frontendPorts": [ + { + "name": "[variables('agFrontendPortName')]", + "properties": { + "Port": 443 + } + } + ], + "backendAddressPools": [ + { + "name": "[variables('agBackendAddressPoolName')]" + } + ], + "backendHttpSettingsCollection": [ + { + "name": "[variables('agBackendHttpSettingsName')]", + "properties": { + "Port": 80, + "Protocol": "Http", + "CookieBasedAffinity": "Enabled", + "RequestTimeout": 120 + } + } + ], + "httpListeners": [ + { + "name": "[variables('agHttpListenerName')]", + "properties": { + "FrontendIPConfiguration": { + "Id": "[resourceId('Microsoft.Network/applicationgateways/frontendIPConfigurations',variables('agName'),variables('agFrontendIPName'))]" + + }, + "FrontendPort": { + "Id": "[resourceId('Microsoft.Network/applicationgateways/frontendPorts',variables('agName'),variables('agFrontendPortName'))]" + }, + "Protocol": "Https", + "SslCertificate": { + "Id": "[resourceId('Microsoft.Network/applicationgateways/sslCertificates',variables('agName'),variables('agSslCertName'))]" + } + } + } + ], + "requestRoutingRules": [ + { + "Name": "rule1", + "properties": { + "RuleType": "Basic", + "httpListener": { + "id": "[resourceId('Microsoft.Network/applicationgateways/httpListeners',variables('agName'),variables('agHttpListenerName'))]" + }, + "backendAddressPool": { + "id": "[resourceId('Microsoft.Network/applicationgateways/backendAddressPools',variables('agName'),variables('agBackendAddressPoolName'))]" + }, + "backendHttpSettings": { + "id": "[resourceId('Microsoft.Network/applicationgateways/backendHttpSettingsCollection',variables('agName'),variables('agBackendHttpSettingsName'))]" + } + } + } + ] + } + }, + { + "condition": "[equals(parameters('databaseNewOrExisting'), 'new')]", "name": "[variables('sqlserverName')]", "type": "Microsoft.Sql/servers", - "location": "[resourceGroup().location]", + "location": "[parameters('location')]", "dependsOn": [ "[concat('Microsoft.Network/loadBalancers/', variables('loadBalancerName'))]", "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]" @@ -687,7 +945,7 @@ "tags": { "displayName": "SqlServer" }, - "apiVersion": "2014-04-01", + "apiVersion": "2018-06-01-preview", "properties": { "administratorLogin": "[parameters('databaseLogin')]", "administratorLoginPassword": "[parameters('databaseLoginPassword')]", @@ -695,13 +953,14 @@ }, "resources": [ { + "condition": "[equals(parameters('databaseNewOrExisting'), 'new')]", "name": "[parameters('databaseName')]", "type": "databases", - "location": "[resourceGroup().location]", + "location": "[parameters('location')]", "tags": { "displayName": "Database" }, - "apiVersion": "2014-04-01", + "apiVersion": "2018-06-01-preview", "dependsOn": [ "[variables('sqlserverName')]" ], @@ -713,12 +972,13 @@ } }, { + "condition": "[equals(parameters('databaseNewOrExisting'), 'new')]", "type": "firewallRules", - "apiVersion": "2014-04-01", + "apiVersion": "2018-06-01-preview", "dependsOn": [ "[variables('sqlserverName')]" ], - "location": "[resourceGroup().location]", + "location": "[parameters('location')]", "name": "AllowAllIps", "properties": { "endIpAddress": "0.0.0.0", @@ -727,12 +987,11 @@ } ] } - ], "outputs": { "dbServerName": { "type": "string", - "value": "[reference(variables('sqlserverName')).fullyQualifiedDomainName]" + "value": "[if(variables('isNewDatabase'), reference(variables('sqlserverName')).fullyQualifiedDomainName, parameters('databaseServerName'))]" }, "dbName": { "type": "string", @@ -740,7 +999,7 @@ }, "lbFqdn": { "type": "string", - "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]" + "value": "[concat('https://', reference(variables('agPublicIPAddressName')).dnsSettings.fqdn)]" }, "dbrdpAddress": { "type": "string", diff --git a/lansa-vmss-windows-autoscale-sql-database/azuredeploy.parameters.json b/lansa-vmss-windows-autoscale-sql-database/azuredeploy.parameters.json index 744371a89443..bf5528b669c3 100644 --- a/lansa-vmss-windows-autoscale-sql-database/azuredeploy.parameters.json +++ b/lansa-vmss-windows-autoscale-sql-database/azuredeploy.parameters.json @@ -2,17 +2,35 @@ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { - "vmssName": { + "stackName": { "value": "GEN-UNIQUE-10" }, + "certificateBase64Encoded": { + "value" : "GEN-SELFSIGNED-CERT-PFXDATA" + }, + "certificatePassword": { + "value": "GEN-SELFSIGNED-CERT-PASSWORD" + }, + "databaseServerName": { + "value": "GEN-UNIQUE-10" + }, + "databaseLogin": { + "value": "GEN-UNIQUE-10" + }, + "databaseLoginPassword": { + "value": "GEN-PASSWORD" + }, + "adminUsername": { + "value": "GEN_UNIQUE-10" + }, "adminPassword": { "value": "GEN-PASSWORD" }, + "webUsername": { + "value": "GEN_UNIQUE-10" + }, "webPassword": { "value": "GEN-PASSWORD" }, - "databaseLoginPassword": { - "value": "GEN-PASSWORD" - } } } diff --git a/lansa-vmss-windows-autoscale-sql-database/metadata.json b/lansa-vmss-windows-autoscale-sql-database/metadata.json index 9bd82f320101..4c15519656a7 100644 --- a/lansa-vmss-windows-autoscale-sql-database/metadata.json +++ b/lansa-vmss-windows-autoscale-sql-database/metadata.json @@ -1,11 +1,12 @@ { "$schema": "https://aka.ms/azure-quickstart-templates-metadata-schema#", "type": "QuickStart", - "itemDisplayName": "Autoscale LANSA Windows VM ScaleSet with Azure SQL Database", - "description": "The template deploys a Windows VMSS with a desired count of VMs in the scale set and a LANSA MSI to install into each VM. Once the VM Scale Set is deployed a custom script extension is used to install the LANSA MSI)", - "summary": "This template deploys a VM Scale Set of Windows VMs behind a load balancer with NAT rules for RDP connections and Auto scale integrated", - "githubUsername": "robe070", - "dateUpdated": "2018-08-30" + "environments": [ + "AzureCloud" + ], + "itemDisplayName": "Autoscale LANSA Windows VM ScaleSet with Azure SQL Database", + "description": "The template deploys a Windows VMSS with a desired count of VMs in the scale set and a LANSA MSI to install into each VM. Once the VM Scale Set is deployed a custom script extension is used to install the LANSA MSI)", + "summary": "This template deploys a VM Scale Set of Windows VMs behind a load balancer with NAT rules for RDP connections and Auto scale integrated", + "githubUsername": "robe070", + "dateUpdated": "2019-11-04" } - -