Skip to main content
Version: Next

Task 11: Deploy Management VMs

Runbook Azure

DOCUMENT CATEGORY: Runbook SCOPE: Management VM provisioning PURPOSE: Deploy all management VMs from Azure Marketplace images MASTER REFERENCE: Microsoft Learn - Create VM

Status: Active


Overview

This task deploys all five management VMs needed for the Azure Local environment. Each VM is deployed from Azure Marketplace images into the management subnet. OS-level configuration (AD DS, utilities, etc.) is handled in Tasks 12–16.

Task Classification

Execution Target: Azure-Only (control-plane API operation) Tab Profile: 3 tabs — Azure Portal · Azure CLI / PowerShell · Standalone Script

Admin Credentials

VM admin passwords are stored in Key Vault. Never hardcode passwords. Retrieve the admin password from keyvault://kv-{name}/azlocal-admin-password at deploy time.

Terraform Reference

Module: azurelocal-toolkit Files: nic.tf, VM resources Mode: Management

VMs to Deploy

VM KeyNameRoleOSSizeIPConfig Path
dc01vm-azrldc-{env}-{region}-01Primary Domain ControllerWindows Server 2025Standard_D2s_v4Per configazure_vms.dc01
dc02vm-azrldc-{env}-{region}-02Secondary Domain ControllerWindows Server 2025Standard_D2s_v4Per configazure_vms.dc02
utilityvm-util-{env}-{region}-01Utility/Management ServerWindows Server 2025Standard_D2as_v6Per configazure_vms.utility
ndmvm-ndm-{env}-{region}-01NDM (SYSLOG/SNMP)Ubuntu 24.04 LTSStandard_D2s_v4Per configazure_vms.ndm
lighthousevm-lh-{env}-{region}-01Lighthouse Central MgmtOpenGear LighthouseStandard_D2s_v4Per configazure_vms.lighthouse

Prerequisites

  • Task 01: Virtual Network completed — Management subnet exists
  • Task 10: Key Vault completed — Admin password stored in Key Vault
  • VM sizes available in target region (check quotas)
  • Marketplace terms accepted for OpenGear Lighthouse image (if deploying)

Variables from variables.yml

VariableConfig PathExample (IIC)
Subscription IDazure.subscriptions.<name>.id(per environment)
Resource Groupazure_vms.dc01.resource_grouprg-azrlmgmt-azl-eus-01
DC01 Nameazure_vms.dc01.namevm-azrldc-azl-eus-01
DC02 Nameazure_vms.dc02.namevm-azrldc-azl-eus-02
Utility VM Nameazure_vms.utility.namevm-util-azl-eus-01
NDM VM Nameazure_vms.ndm.namevm-ndm-azl-eus-01
Lighthouse VM Nameazure_vms.lighthouse.namevm-lh-azl-eus-01
Subnetazure_vms.dc01.subnetsnet-azrl-azl-eus-01

Single Subscription Model

Landing Zone Placement

FieldValueConfig Path
SubscriptionCustomer subscriptionazure.subscriptions.<name>.id
Resource Grouprg-azrlmgmt-{env}-{region}-01azure_vms.dc01.resource_group
SubnetManagement subnetazure_vms.dc01.subnet

Execution Options

Azure Portal

When to use: Learning Azure Local, single deployment, prefer visual interface

Procedure (repeat for each VM)

  1. Create Virtual Machine:
  • Search for Virtual machines+ CreateAzure virtual machine
  1. Basics: | Field | Value | Source | |-------|-------|--------| | Name | Per VM table above | azure_vms.<key>.name | | Region | Your region | azure_vms.<key>.location | | Image | Per VM table | azure_vms.<key>.image.* | | Size | Per VM table | azure_vms.<key>.vm_size | | Username | azureadmin | Standard | | Password | From Key Vault | keyvault://<vault>/azlocal-admin-password |

  2. Disks: | Field | Value | Source | |-------|-------|--------| | OS disk type | Premium SSD | azure_vms.<key>.os_disk.type | | OS disk size | Per config | azure_vms.<key>.os_disk.size_gb |

  3. Networking: | Field | Value | Source | |-------|-------|--------| | Virtual network | Management VNet | network.azure_vnets.management.name | | Subnet | Management subnet | azure_vms.<key>.subnet | | Public IP | None | No public IPs on mgmt VMs | | NIC name | Per config | azure_vms.<key>.nic_name |

  4. Advanced → IP Configuration: Set static private IP: | Field | Value | Source | |-------|-------|--------| | Private IP | Static | azure_vms.<key>.private_ip |

  5. Review + create: Verify → Click Create

  6. Repeat for all 5 VMs

Validation

  • All 5 VMs provisioning state: Succeeded
  • Each VM has correct static private IP
  • No public IPs assigned
  • All VMs accessible via Bastion (Task 05)

Validation

  • All 5 VMs running
  • Correct static IPs assigned
  • No public IPs
  • Bastion connectivity works to each VM

CAF/WAF Landing Zone Model

In the CAF/WAF model, management VMs are deployed in the Management subscription in a spoke VNet peered to the Hub.

Landing Zone Placement

FieldValueConfig Path
SubscriptionManagement subscriptionazure.subscriptions.management.id
Resource Grouprg-azrlmgmt-{env}-{region}-01azure_vms.dc01.resource_group
VNet/SubnetManagement spokeMay differ from single-sub

Execution Options

Azure Portal

Follow the same procedure, targeting the Management subscription and spoke VNet.

Validation

  • VMs in Management subscription
  • Reachable via Bastion from Connectivity Hub

Troubleshooting

IssueRoot CauseRemediation
VM size not availableQuota or region limitationRequest quota increase or change region
Marketplace terms not acceptedOpenGear Lighthouse requires acceptanceSet-AzMarketplaceTerms -Publisher opengear -Product lighthouse -Name lighthouse -Accept
Static IP conflictIP already in useVerify IP availability in subnet
Password too weakAzure policy enforcedUse 12+ chars with upper, lower, number, special
NIC creation failsSubnet NSG blockingCheck NSG rules on management subnet

PreviousUpNext
Task 10: Key VaultManual Deployment IndexVM Configuration

Version Control

  • Created: 2025-09-15 by Hybrid Cloud Solutions
  • Last Updated: 2026-03-03 by Hybrid Cloud Solutions
  • Version: 4.0.0
  • Tags: azure-local, virtual-machines, management, deployment
  • Keywords: VM deployment, domain controller, utility server, NDM, Lighthouse, Azure VM
  • Author: Hybrid Cloud Solutions