Skip to content

Getting Started

This guide walks you through deploying Azure Virtual Desktop on Azure Local using this repository.


Prerequisites

Azure

  • Azure subscription (Contributor or Owner role, or custom AVD role)
  • Microsoft Entra ID (Azure AD) tenant
  • Azure Virtual Desktop service principal / resource provider registered:
    bash
    az provider register --namespace Microsoft.DesktopVirtualization

Azure Local

  • Azure Local cluster (version 23H2 or later) deployed and registered with Azure Arc
  • Arc Resource Bridge installed and running on the cluster
  • Custom location created for the Arc Resource Bridge
  • Sufficient compute and storage capacity for session-host VMs

Tooling (choose one or more)

ToolMinimum VersionInstall
PowerShell7.2+Install
Az PowerShell module9.0+Install-Module Az -Force
Azure CLI2.50+Install
Bicep CLI0.22+az bicep install
Terraform1.5+Install
Ansible2.14+pip install ansible + ansible-galaxy collection install azure.azcollection

Step 1 – Clone This Repository

bash
git clone https://github.com/AzureLocal/aurelocal-avd.git
cd aurelocal-avd

Step 2 – Deploy the AVD Control Plane in Azure

The control plane creates the host pool, application group, workspace, and supporting resources (Key Vault, Log Analytics, Storage) in your Azure subscription.

Pick your preferred tool:

Option A – Bicep

bash
cd src/bicep
cp control-plane.bicepparam.example control-plane.bicepparam
# Edit control-plane.bicepparam with your values
az deployment sub create \
  --location eastus \
  --template-file control-plane.bicep \
  --parameters control-plane.bicepparam

Option B – PowerShell

powershell
cd src/powershell
cp parameters.example.ps1 parameters.ps1
# Edit parameters.ps1 with your values
.\New-AVDControlPlane.ps1 -ParametersFile .\parameters.ps1

Option C – Azure CLI

bash
cd scripts
cp parameters.example.env parameters.env
# Edit parameters.env with your values
source parameters.env
bash deploy-avd-control-plane.sh

Option D – Terraform

bash
cd src/terraform
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your values
terraform init
terraform plan
terraform apply

Step 3 – Note the Host Pool Registration Token

After Step 2, retrieve the registration token. The session-host deployment scripts use it to register VMs with the host pool.

powershell
# PowerShell
$token = Get-AzWvdRegistrationInfo -ResourceGroupName <rg> -HostPoolName <pool>
$token.Token
bash
# Azure CLI
az desktopvirtualization hostpool retrieve-registration-token \
  --resource-group <rg> \
  --name <pool> \
  --query registrationInfo.token -o tsv

Store this token in Azure Key Vault:

bash
az keyvault secret set \
  --vault-name <kv-name> \
  --name avd-registration-token \
  --value "<token>"

Step 4 – Deploy Session Hosts on Azure Local

Session hosts are Arc-enabled VMs deployed on your Azure Local cluster.

Option A – Bicep

bash
cd src/bicep
cp session-hosts.bicepparam.example session-hosts.bicepparam
# Edit session-hosts.bicepparam (set customLocationId, hostPoolRegistrationToken, etc.)
az deployment group create \
  --resource-group <rg> \
  --template-file session-hosts.bicep \
  --parameters session-hosts.bicepparam

Option B – PowerShell

powershell
cd src/powershell
# parameters.ps1 should already exist from control-plane step
.\New-AVDSessionHosts.ps1 -ParametersFile .\parameters.ps1

Option C – Terraform

bash
cd src/terraform
# terraform.tfvars should already exist from control-plane step
terraform plan
terraform apply

Step 5 – Validate the Deployment

powershell
# Check session hosts are registered and available
Get-AzWvdSessionHost -ResourceGroupName <rg> -HostPoolName <pool>

All hosts should show Status = Available after the VMs boot and the AVD agent completes registration.


For profile persistence deploy a Scale Out File Server using the companion repository:

https://github.com/AzureLocal/azurelocal-sofs-fslogix

Then set the FSLogix VHD location on session hosts:

powershell
# Group Policy or registry
Set-ItemProperty -Path "HKLM:\SOFTWARE\FSLogix\Profiles" `
  -Name VHDLocations -Value "\\<SOFS-Name>\FSLogixProfiles"
Set-ItemProperty -Path "HKLM:\SOFTWARE\FSLogix\Profiles" `
  -Name Enabled -Value 1

Next Steps

  • Review deployment scenarios for more configurations.
  • Set up CI/CD pipelines using the examples in examples/pipelines/ for automated deployments.
  • Review the architecture overview to understand the full solution.

Released under the MIT License.