Install SQL Server onto an Azure VM using PowerShell DSC

The Azure marketplace has quite a few prebuilt virtual machines with SQL Server already in them from versions SQL Server 2008R2 to SQL Server 2016. You can also use the BYOL versions to provide your own SQL Server license if you prefer. However, you may still wish to have more control over the installation process such as the SQL Server instance name, install location, installed features, etc. I’ve created a GitHub project here:
https://github.com/perktime/InstallSQLServerByDSCForAzure
These ARM templates will create a new base Windows VM using an Azure marketplace image, domain join the VM into an existing Windows AD domain and use PowerShell DSC to install SQL Server from Azure Files.
The DSC uses the xSQLServer PowerShell module from here: https://github.com/PowerShell/xSQLServer where you will also find additional documentation. Also note that currently not all potential parameters for SQL Server setup are implemented in the ARM template. You could either add them yourself to the ARM templates and SQLInstall.ps1 file or let me know and I might update Winking smile
Prerequisites
Before you can use this solution, you will need to create a storage account (or use an existing one) and enable Azure Files for it.
1) Go to the Azure portal and create a new storage account:
image
2) Once the storage account is done creating, you will need to create a file share for it. Click Files and then click “+ File Share”
image
3) Supply a name and a quota and click Create
image
4) You will then need to download a version of SQL Server, create a folder for it in Azure Files and copy the SQL Server install files into that folder. You may find it quickest to do this right from an existing Azure VM in the same region to access the Microsoft VLSC site or MSDN or download a copy of SQL Server Developer Edition here: https://www.microsoft.com/en-us/sql-server/sql-server-editions-developers. Note that if you get the ISO, you will need to extract the files out of the ISO as this template currently does not support directly installing from the ISO.
5) You will need to take note of the access key for this storage account as well as the Azure Files URL so that you can supply them to the azuredeploy.parameters.json file. If you click “Connect” on the file share, you can see the Azure Files UNC path as well as click the link for the access keys:
image
6) Next, you will need to copy the SQLinstall.ps1.zip and DeployWindowsVM.json files into your Azure Blob storage account (note: not in Azure Files). Using a tool like Azure Storage Explorer, copy these 2 files into a blob container that has public read access enabled:
image
Updating the azuredeploy.parameters.json file
The azuredeploy.parameters.json file has a number of parameters that you will need to update such as:
vmName: The computer name of the VM
vmSize: The desired Azure VM size and series. It is recommended that you use a series that supports SSD storage such as DS, GS or FS.
assetLocation: The location in Azure blob storage where the SQLInstall.ps1.zip and DeployWindowsVM.json are deployed into an Azure blob storage container with public read access.
AdminUserName: The local Windows administrator account
AdminPassword: The local Windows administrator account password
DomainUserName: The domain username that has domain join permissions
DomainPassword: The domain user’s password
existingDomainName: The name of the Windows domain you will be joining
existingOUPath (optional): The OU where you want the computer account placed in Active Directory
existingVirtualNetworkName: The existing Azure virtual network where this VM will be placed
existingVirtualNetworkResourceGroup: The existing Azure virtual network resource group
storageAccountUri: The existing Azure blob storage account for this VM’s disks. Premium storage is recommended for SQL Server
bootdiagnosticsstorageAccountUri: The existing Azure blob storage account for boot diagnostics. Must be standard storage
windowsOSVersion: The version of Windows Server to use for the VM. Note that not all versions of SQL Server may be supported on all versions of Windows Server
subnetName: The existing subnet name where this VM will be placed
FileShareUserName: The Azure Files username. It should be the same as the first part of the Azure Files UNC path (e.g. if your Azure Files is \\peteazurefiles.file.core.windows.net then the username would be azurefiles
FileSharePassword: The Azure Files access key.
InstallDir: The folder where the SQL Server files are located (e.g. sql2016). It is not the full path
PackagePath: The path to Azure Files directory where the SQL Server install files are location (e.g. \\\\peteazurefiles.file.core.windows.net\\installs”)
location: The Azure data center location you wish to use
SQLAgentUserName: The domain\username for the SQL Agent account
SQLAgentPassword: The password for the SQL Agent account
SQLSAAccountPassword: The SQL SA Account password
SQLServiceUserName: The domain\username for the SQLService account
SQLServicePassword: The password for the SQLService account
Features: The installed features for SQL Server (SQLENGINE,FULLTEXT). Note that not all versions of SQL Server support the same features.
UpdateSource: This is the location where SQL Server setup searches for product updates. Use “MU” if you want to have SQL Server use Windows Update.
UpdateEnabled: This determines if SQL Server should update itself or not. Can be true or false.
InstallSharedDir: The installation path for shared SQL Files
InstallSharedWOWDir: The installation path for x86 shared SQL files
SQLInstanceName: The name of the SQL Instance
SQLInstanceDir: The installation path for the SQL instance files
SecurityMode: The SQL Security mode (either Windows or SQL). SQL is also known as Mixed Mode
SQLSysAdminAccounts: Array of accounts to be made SQL administrators.
 
Troubleshooting
In the event that your deployment fails and it’s because of an invalid parameter, Azure may not provide a helpful error message in this case and you may see this:
image
If this occurs, your best bet is to look at the SQL Server log file (e.g. “C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\Summary.txt”)