packer-windows-avd
packer-windows-avd copied to clipboard
Custom Windows 11 "golden" image for Azure Virtual Desktop (AVD) built with Packer.
packer-windows-avd
Custom Windows 11 "golden" image for Azure Virtual Desktop (AVD) built with Packer.
It bundles apps that make the image suitable for software development workstations using Chocolatey and a PowerShell provisioning script.
A GitHub Actions workflow checks daily for a new Windows release and runs Packer if required (typically on Patch Tuesday).
Read more about my thoughts going into this on my blog.
Deploy Terraform Resources
I like using Terraform to pre-provision the resources required by Packer. However, you can use the Azure Portal or similar alternatively.
Authenticate with Terraform:
The packer.tf file contains the following resources:
- Two resource groups
packer-artifacts-rg: managed images produced by Packerpacker-build-rg: build-time Packer resources. It should be empty when Packer isn't running
- Service Principal with scoped
Contributoraccess to Packer resource groups, andReaderaccess to subscription - GitHub secrets required for GitHub Actions workflow
Run terraform apply to deploy the required resources.
Run Packer Locally
After deploying the resources with Terraform, run the following command to run Packer (note the . at the very end):
packer build \
-var "artifacts_resource_group=$(terraform output -raw packer_artifacts_resource_group)" \
-var "build_resource_group=$(terraform output -raw packer_build_resource_group)" \
-var "client_id=$(terraform output -raw packer_client_id)" \
-var "client_secret=$(terraform output -raw packer_client_secret)" \
-var "subscription_id=$(terraform output -raw packer_subscription_id)" \
-var "tenant_id=$(terraform output -raw packer_tenant_id)" \
-var "source_image_publisher=MicrosoftWindowsDesktop" \
-var "source_image_offer=office-365" \
-var "source_image_sku=win11-21h2-avd-m365" \
-var "source_image_version=22000.556.220308" \
.
Discover Windows 11 Versions
Use the Azure CLI to discover what versions are available.
With Office
List SKUs:
az vm image list-skus \
--offer office-365 \
--publisher MicrosoftWindowsDesktop \
--query "[*].name" \
--out tsv
List versions:
az vm image list \
--sku win11-21h2-avd-m365 \
--offer office-365 \
--publisher MicrosoftWindowsDesktop \
--query "[*].version" \
--out tsv \
--all
Without Office
List SKUs:
az vm image list-skus \
--offer windows-11 \
--publisher MicrosoftWindowsDesktop \
--query "[*].name" \
--out tsv
List versions:
az vm image list \
--sku win11-21h2-avd \
--offer windows-11 \
--publisher MicrosoftWindowsDesktop \
--query "[*].version" \
--out tsv \
--all