Skip to main content
Version: Next

Naming Standards

Runbook Azure

DOCUMENT CATEGORY: Runbook SCOPE: Azure resource naming conventions PURPOSE: Establish consistent naming patterns aligned with Microsoft CAF MASTER REFERENCE: Microsoft CAF Naming

Status: Active


Naming conventions are established during discovery workshops with customers to ensure consistency across all Azure Local infrastructure components. Azure Local Cloud follows Microsoft Cloud Adoption Framework (CAF) naming standards aligned with Azure best practices and the Azure Local Cloud Variable Management Standard.

Overview

During customer discovery sessions and environment design, these standards serve as suggested best practices based on:

  • Microsoft Cloud Adoption Framework (CAF) - Industry-proven Azure naming patterns
  • Microsoft Well-Architected Framework (WAF) - Operational excellence and reliability principles
  • Azure Best Practices - Microsoft-recommended resource naming conventions
  • Azure Local Cloud Azure Local Cloudnology Standards - Internal consistency and automation enablement
Customer Standards Take Precedence

These naming standards are recommendations, not mandates. If a customer has established naming conventions, identity standards, or organizational requirements, those must be followed. Use this document as a reference during discovery to understand customer standards, identify gaps or conflicts, and propose alternatives only when customer standards cause technical limitations (e.g., exceeding character limits).

When to apply Azure Local Cloud standards:

  • Customer has no existing naming standards
  • Customer explicitly requests Azure Local Cloud recommendations
  • Internal Azure Local Cloud labs, demos, and POC environments

When to follow customer standards:

  • Customer has documented naming conventions
  • Customer IT governance requires specific patterns
  • Integration with existing customer infrastructure

Discovery Workshop Objectives

During discovery, deployment teams work with customers to establish naming standards that will be used throughout the implementation. These standards:

  • Follow Microsoft CAF/WAF best practices
  • Align with Azure Local Cloud Variable Management Standard
  • Cover on-premises infrastructure (cluster nodes, management servers)
  • Cover Azure resources (resource groups, virtual networks, storage accounts)
  • Support automation via variable substitution (variables.yml)
  • Ensure technical compliance with platform limits (NetBIOS 15-char, Azure resource limits, etc.)
Microsoft CAF Reference

Microsoft CAF Naming Pattern

Azure Local Cloud follows Microsoft-recommended naming patterns for Azure resources. Note: Different resource types follow different patterns based on their specific requirements and constraints.

General Pattern for Most Resources:

<resource-type>-<workload>-<environment>-<region>-<instance>

Special Patterns:

  • Storage Accounts: st<workload><environment><region><instance> (no hyphens, lowercase only)
  • Management Groups: ID pattern {prefix}-{purpose}-{tenant} with separate Display Name
  • Subnets: snet-<purpose>-<environment> (no region for consistency)

Pattern Components:

  • resource-type: Microsoft abbreviation (rg, vnet, kv, st, etc.)
  • workload: Application or service name (azurelocal, azlocal, or customer-specific)
  • environment: prod, dev, test, staging, dr
  • region: Azure region code (eastus, westus, etc.)
  • instance: Sequential number (001, 002, etc.) or purpose identifier

Variable Substitution (for automation):

<resource-type>-<workload>-{{environment}}-{{azure_region}}-{{instance}}

Note: Always check the specific resource section below for exact patterns, as some resources deviate from the general pattern due to Azure constraints.


1. On-Premises Infrastructure

This section covers all physical and on-premises resources deployed at customer sites.

1.1 Azure Local Cluster

Cluster Nodes

Pattern: <site>-<cluster#>-N<node#> (⚠️ Strict 15-char NetBIOS limit for Active Directory)

Examples:

  • Node 1: ral-01-n01
  • Node 2: ral-01-n02
NetBIOS Limit

Azure Local nodes must be domain-joined and follow the 15-character NetBIOS limit for Active Directory computer objects. The simplified N pattern provides maximum flexibility for site codes while maintaining clear identification as cluster nodes.

Cluster Name

Pattern: <site>-clus<nn> (⚠️ Strict 15-char NetBIOS limit for CNO)

Examples:

  • Cluster 1: ral-clus01
Cluster Name Object (CNO) Limit

Windows Server Failover Cluster Name Object (CNO) is limited to 15 characters due to Active Directory NetBIOS requirements. The cluster name must be unique in the Active Directory domain.

1.2 Management Infrastructure

Pattern: <site>-<type>-<nn> (⚠️ 15-char limit for domain-joined servers)

Examples:

  • Domain Controllers: ral-dc-01, ral-dc-02 (9 chars)
  • Certificate Authority: ral-ca-01 (9 chars)
  • WAC Gateway: ral-wac-01 (10 chars)
  • Tools/Jumpbox Server: ral-tools (9 chars)

Variable Mapping:

azure_vms:
domain_controllers:
- hostname: "{{site_code}}-DC-01"
- hostname: "{{site_code}}-DC-02"
jumpbox:
hostname: "{{site_code}}-TOOLS"
wac:
hostname: "{{site_code}}-WAC-01"
Windows Server Naming

All Windows servers that will be domain-joined must follow the 15-character NetBIOS limit. Keep site codes short (2-5 chars) to accommodate role identifiers.

1.3 Storage

Cluster Shared Volumes (CSV)

Pattern: csv-<cluster>-<mirror>-<purpose>-<env>-<##>

  • cluster: Cluster name/number (e.g., clu01, clus01)
  • mirror: M2 (two-way), M3 (three-way)
  • purpose: vmstore, imgstore, backup, etc.
  • env: prd, dev, test, etc.
  • ##: Sequence number

Examples:

  • csv-clu01-m3-vmstore-prd-01 (Three-way mirror, production VM storage)
  • csv-clu01-m2-vmstore-prd-02 (Two-way mirror, production VM storage)
  • csv-clus01-m2-imgstore-prd-05 (Two-way mirror, production image store)

Variable Mapping:

cluster_shared_volumes:
vmstore_1: "csv-clu01-m3-vmstore-prd-01"
vmstore_2: "csv-clu01-m2-vmstore-prd-02"
imgstore: "csv-clus01-m2-imgstore-prd-05"
CSV Naming Constraints
  • Must be unique within the cluster
  • Use clear, automation-friendly names
  • Created during Azure Local deployment or via New-Volume cmdlet
  • Must be accessible by all cluster nodes for high availability
  • Avoid reserved names like Infrastructure_1

Azure Local Storage Paths

Pattern: sp-<cluster>-<mirror>-<purpose>-<env>-<##>

  • Closely matches the associated CSV name for clarity and automation.
  • Example: For csv-clu01-m3-vmstore-prd-01, use sp-clu01-m3-vmstore-prd-01 as the storage path name.

Examples:

  • sp-clu01-m3-vmstore-prd-01 (Storage path for three-way mirror, production VM storage)
  • sp-clu01-m2-vmstore-prd-02 (Storage path for two-way mirror, production VM storage)
  • sp-clus01-m2-imgstore-prd-05 (Storage path for two-way mirror, production image store)

Variable Mapping:

azure_local_storage_paths:
vmstore_1: "sp-clu01-m3-vmstore-prd-01"
vmstore_2: "sp-clu01-m2-vmstore-prd-02"
imgstore: "sp-clus01-m2-imgstore-prd-05"

CSV to Storage Path Mapping Table:

CSV NameStorage Path NamePurpose
csv-clu01-m3-vmstore-prd-01sp-clu01-m3-vmstore-prd-01Production VM storage
csv-clu01-m2-vmstore-prd-02sp-clu01-m2-vmstore-prd-02Production VM storage
csv-clus01-m2-imgstore-prd-05sp-clus01-m2-imgstore-prd-05Production image store
Azure Local Storage Path Requirements
  • Resource Type: microsoft.azurestackhci/storagecontainers
  • Purpose: Maps Azure resource to a specific CSV path (e.g., C:\ClusterStorage\csv-clu01-m3-vmstore-prd-01)
  • High Availability: Must use CSV volumes accessible by all cluster nodes
  • Creation: Use az stack-hci-vm storagepath create command
  • Do NOT use: Infrastructure_1 volume (reserved for Azure Local components)

1.4 Azure Local Resources

These are Azure resources that are specific to Azure Local cluster management.

Arc Custom Location

CAF Pattern: cl-<workload>-<environment>-<region>-<instance>

Examples:

  • cl-azlocal-prod-eus-001 (Production custom location)
  • cl-azlocal-dev-eus-001 (Development custom location)

Variable Mapping:

azure_arc:
custom_location_name: "cl-{{workload}}-{{environment}}-{{region}}-{{instance}}"
Arc Custom Location

The Arc Custom Location is a key Azure resource that maps your Azure Local cluster to Azure Arc, enabling Azure management of on-premises resources. The Arc Resource Bridge (arb-*) is created during deployment, but the Custom Location name should follow your naming standards.

Logical Networks

Pattern: lnet-<purpose>-<environment>-<region>

Examples:

  • lnet-management-prod-eus (Management logical network)
  • lnet-compute-prod-eus (Compute/VM logical network)
  • lnet-storage-prod-eus (Storage logical network)
  • lnet-vmworkload-prod-eus (VM workload logical network)

Variable Mapping:

logical_networks:
management: "lnet-management-{{environment}}-{{region}}"
compute: "lnet-compute-{{environment}}-{{region}}"
storage: "lnet-storage-{{environment}}-{{region}}"
vmworkload: "lnet-vmworkload-{{environment}}-{{region}}"
Logical Networks

Logical networks in Azure Local define the network configuration for VMs and services. They map to physical network infrastructure (VLANs, subnets) and are created during cluster deployment.

Pattern: img-<os>-<version>-<environment>

Examples:

  • img-ws2022-dc-prod (Windows Server 2022 Datacenter, Production)
  • img-ws2025-dc-prod (Windows Server 2025 Datacenter, Production)
  • img-ubuntu2204-lts-prod (Ubuntu 22.04 LTS, Production)
  • img-ws2022-dc-dev (Windows Server 2022 Datacenter, Development)

Variable Mapping:

vm_images:
windows_server_2022: "img-ws2022-dc-{{environment}}"
windows_server_2025: "img-ws2025-dc-{{environment}}"
ubuntu_2204: "img-ubuntu2204-lts-{{environment}}"
Azure Local VM Images

VM images are stored in the Azure Local cluster gallery and used for VM provisioning. Images can be downloaded from Azure Marketplace or uploaded from custom sources.

1.5 Hardware & Physical Infrastructure

iDRAC/BMC Hostnames

Pattern: <node>-i

Examples:

  • ral-01-n01-i (Node 1 iDRAC)
  • ral-01-n02-i (Node 2 iDRAC)
  • ral-01-n03-i (Node 3 iDRAC)
  • ral-01-n04-i (Node 4 iDRAC)

Variable Mapping:

hardware:
node_idrac: "{{node_hostname}}-i"
BMC/iDRAC Naming

The -i suffix indicates the iDRAC/BMC interface for out-of-band management. This allows easy correlation between the node hostname and its management interface.

Top-of-Rack (ToR) Switches

Pattern: <site>-sw-<##>

Examples:

  • ral-sw-01 (Rack switch 1)
  • ral-sw-02 (Rack switch 2)
  • ATL-sw-01 (Atlanta site switch 1)

Variable Mapping:

network_devices:
tor_switch: "{{site_code}}-sw-{{instance}}"

Firewalls

Pattern: <site>-fw-<##>

Examples:

  • RAL-fw-01 (Primary firewall)
  • RAL-fw-02 (Secondary firewall)
  • ATL-fw-01 (Atlanta site firewall)

Variable Mapping:

network_devices:
firewall: "{{site_code}}-fw-{{instance}}"

Opengear Console Servers

Pattern: <site>-og-<##>

Examples:

  • RAL-og-01 (Opengear console server 1)
  • RAL-og-02 (Opengear console server 2)
  • ATL-og-01 (Atlanta site Opengear)

Variable Mapping:

network_devices:
opengear: "{{site_code}}-og-{{instance}}"

PDUs (Power Distribution Units)

Pattern: <site>-pdu-<##>

Examples:

  • RAL-pdu-01 (PDU 1)
  • RAL-pdu-02 (PDU 2)
  • RAL-pdu-03 (PDU 3)
  • RAL-pdu-04 (PDU 4)

Variable Mapping:

hardware:
pdu: "{{site_code}}-pdu-{{instance}}"
Hardware Naming

All hardware devices follow a consistent pattern: <site>-<type>-<##>. This ensures easy identification and correlation across physical infrastructure.


2. Azure Cloud Resources

This section covers all Azure cloud resources following CAF naming standards.

2.1 Core Resources

Management Groups

Management groups have two distinct identifiers that serve different purposes:

IdentifierPurposeConstraintsEditable
ID (Name)Unique identifier for API/automation1-90 chars, alphanumeric, hyphens, underscores, periods, parenthesesNo (immutable after creation)
Display NameHuman-readable label in Azure Portal1-90 chars, any charactersYes
Microsoft CAF Guidance

"Provide a globally unique identifier (GUID) for the management group ID. Display names are editable and should represent the platform function or workload types within them."


Management Group ID

Pattern: {prefix}-{purpose}-{tenant}

ComponentDescriptionExamples
prefixOrganization short code (chosen by org)iic, acme, azl
purposeFunctional role in hierarchyroot, platform, platform-identity, landing-zones
tenantTenant/environment short codeprod, dev, staging
Prefix is Organization-Specific

The {prefix} is whatever the organization chooses — there is no universal default. For example, Infinite Improbability Corp might use iic and another organization might use acme. The prefix must be consistent across all management groups in a tenant.


Management Group Display Name

Pattern: {Organization} {Purpose} or {Tenant} {Purpose}

Display Name Examples:

  • Azure Local Cloud Root
  • Azure Local Cloud Platform
  • Azure Local Cloud Platform - Identity
  • Azure Local Cloud Platform - Security
  • Azure Local Cloud Platform - Connectivity
  • Azure Local Cloud Platform - Management
  • Azure Local Cloud Landing Zones
  • Azure Local Cloud Sandbox
  • Azure Local Cloud Decommissioned

Deployment Models

Azure Local deployments support two management group models depending on complexity and governance requirements.

Model A — Single Subscription / Single Management Group

For smaller or customer deployments that don't require full Azure Landing Zone governance. One root management group with a single subscription.

Tenant Root Group
└── {prefix}-{tenant}-root (e.g., iic-prod-root)
└── sub-{org}-azurelocal-{site} (e.g., sub-iic-azurelocal-ral)

Customer Example (Org: iic, Tenant: prod):

ResourceID / NameDisplay Name
Management Groupiic-prod-rootInfinite Improbability Corp Root
Subscriptionsub-iic-azurelocal-ral
When to Use Model A
  • Customer has a single Azure Local cluster
  • No requirement for separate platform subscriptions
  • Simplified governance and RBAC
  • Quick deployments and POC environments
Model B — Full Azure Landing Zone

For enterprise deployments requiring full CAF governance with separated platform services and workload landing zones.

Tenant Root Group
└── {prefix}-{tenant}-root
├── {prefix}-platform-{tenant}
│ ├── {prefix}-platform-identity-{tenant}
│ ├── {prefix}-platform-security-{tenant}
│ ├── {prefix}-platform-connectivity-{tenant}
│ └── {prefix}-platform-management-{tenant}
├── {prefix}-landing-zones-{tenant}
├── {prefix}-sandbox-{tenant}
└── {prefix}-decommissioned-{tenant}

Azure Local Cloud Internal Example (Prefix: tp, Tenant: prod):

Tenant Root Group
└── azl-prod-root Azure Local Cloud Root
├── azl-platform-prod Azure Local Cloud Platform
│ ├── azl-platform-identity-prod Azure Local Cloud Platform - Identity
│ ├── azl-platform-security-prod Azure Local Cloud Platform - Security
│ ├── azl-platform-connectivity-prod Azure Local Cloud Platform - Connectivity
│ └── azl-platform-management-prod Azure Local Cloud Platform - Management
├── azl-landing-zones-prod Azure Local Cloud Landing Zones
├── azl-sandbox-prod Azure Local Cloud Sandbox
└── azl-decommissioned-prod Azure Local Cloud Decommissioned

Customer Example (Prefix: iic, Tenant: prod):

Tenant Root Group
└── iic-prod-root IIC Root
├── iic-platform-prod IIC Platform
│ ├── iic-platform-identity-prod IIC Platform - Identity
│ ├── iic-platform-security-prod IIC Platform - Security
│ ├── iic-platform-connectivity-prod IIC Platform - Connectivity
│ └── iic-platform-management-prod IIC Platform - Management
├── iic-landing-zones-prod IIC Landing Zones
├── iic-sandbox-prod IIC Sandbox
└── iic-decommissioned-prod IIC Decommissioned
When to Use Model B
  • Enterprise customers with multiple workloads
  • Regulatory/compliance requirements for separated governance
  • Multiple subscriptions for identity, security, connectivity, management
  • Full CAF Enterprise-Scale alignment required

Variable Mapping
management_groups:
# Management Group IDs (immutable - set at creation)
mgtgrp_root_id: "{{org_prefix}}-{{tenant}}-root"
mgtgrp_platform_id: "{{org_prefix}}-platform-{{tenant}}"
mgtgrp_platform_identity_id: "{{org_prefix}}-platform-identity-{{tenant}}"
mgtgrp_platform_security_id: "{{org_prefix}}-platform-security-{{tenant}}"
mgtgrp_platform_connectivity_id: "{{org_prefix}}-platform-connectivity-{{tenant}}"
mgtgrp_platform_management_id: "{{org_prefix}}-platform-management-{{tenant}}"
mgtgrp_landing_zones_id: "{{org_prefix}}-landing-zones-{{tenant}}"
mgtgrp_sandbox_id: "{{org_prefix}}-sandbox-{{tenant}}"
mgtgrp_decommissioned_id: "{{org_prefix}}-decommissioned-{{tenant}}"

# Display Names (human-readable, editable)
mgtgrp_root_display: "{{organization}} Root"
mgtgrp_platform_display: "{{organization}} Platform"
mgtgrp_platform_identity_display: "{{organization}} Platform - Identity"
mgtgrp_platform_security_display: "{{organization}} Platform - Security"
mgtgrp_platform_connectivity_display: "{{organization}} Platform - Connectivity"
mgtgrp_platform_management_display: "{{organization}} Platform - Management"
mgtgrp_landing_zones_display: "{{organization}} Landing Zones"
mgtgrp_sandbox_display: "{{organization}} Sandbox"
mgtgrp_decommissioned_display: "{{organization}} Decommissioned"

Hierarchy Pattern
LevelID PatternDisplay NamePurpose
Root{prefix}-{tenant}-root{Org} RootTop-level governance container
Platform (Parent){prefix}-platform-{tenant}{Org} PlatformShared platform services
Platform - Identity{prefix}-platform-identity-{tenant}{Org} Platform - IdentityIdentity services (AD, Entra)
Platform - Security{prefix}-platform-security-{tenant}{Org} Platform - SecuritySecurity services
Platform - Connectivity{prefix}-platform-connectivity-{tenant}{Org} Platform - ConnectivityNetwork connectivity
Platform - Management{prefix}-platform-management-{tenant}{Org} Platform - ManagementManagement services
Landing Zones{prefix}-landing-zones-{tenant}{Org} Landing ZonesWorkload landing zones
Sandbox{prefix}-sandbox-{tenant}{Org} SandboxTesting/experimentation
Decommissioned{prefix}-decommissioned-{tenant}{Org} DecommissionedResources pending deletion
Management Group Constraints
  • ID is Immutable: Once created, the Management Group ID cannot be changed
  • Tenant Uniqueness: IDs must be unique within the Entra ID tenant
  • Hierarchy Limits: Maximum 6 levels deep (excluding root)
  • Character Limits: 1-90 characters for both ID and Display Name
  • ID Characters: Alphanumeric, underscore, hyphen, period, parentheses (cannot end with period)
  • Display Name: Any characters allowed

Subscriptions

CAF Pattern: sub-<purpose>-<environment>

Subscriptions organize Azure resources for billing, governance, and access control. Azure Local deployments typically use dedicated subscriptions aligned with CAF Enterprise-Scale landing zone architecture.

Standard Subscription Types for Azure Local:

PurposePatternExampleVariable
Bootstrapsub-<org>-bootstrapsub-Azure Local Cloud-bootstrapsub_bootstrap_name
Connectivitysub-<org>-connectivitysub-Azure Local Cloud-connectivitysub_connectivity_name
Managementsub-<org>-managementsub-Azure Local Cloud-managementsub_management_name
Securitysub-<org>-securitysub-Azure Local Cloud-securitysub_security_name
Identitysub-<org>-identitysub-Azure Local Cloud-identitysub_identity_name
Azure Localsub-<org>-azurelocal-<site>sub-Azure Local Cloud-azurelocal-ralsub_azure_local_name
Workloadssub-<org>-workloads-<env>sub-Azure Local Cloud-workloads-prodsub_workloads_name

Variable Mapping (from config/variables.yml):

subscriptions:
sub_bootstrap_id: "00000000-1111-2222-3333-444444444444"
sub_bootstrap_name: "sub-Azure Local Cloud-bootstrap"
sub_connectivity_id: "12345678-1234-1234-1234-123456789015"
sub_connectivity_name: "sub-Azure Local Cloud-connectivity"
sub_management_id: "12345678-1234-1234-1234-123456789016"
sub_security_id: "12345678-1234-1234-1234-123456789017"
sub_security_name: "sub-Azure Local Cloud-security"
sub_identity_id: "12345678-1234-1234-1234-123456789018"
sub_identity_name: "sub-Azure Local Cloud-identity"
sub_azure_local_id: "00000000-1111-2222-3333-444444444444"
sub_azure_local_name: "sub-Azure Local Cloud-azurelocal-ral"
sub_workloads_id: "12345678-1234-1234-1234-123456789019"
sub_workloads_name: "sub-Azure Local Cloud-workloads-prod"

CAF Enterprise-Scale Subscription Alignment:

Landing ZoneSubscription PurposeExample Name
Platform - ManagementMonitoring, Log Analytics, Automationsub-Azure Local Cloud-management
Platform - ConnectivityHub networking, VPN, ExpressRoutesub-Azure Local Cloud-connectivity
Platform - IdentityDomain Controllers, Entra ID Connectsub-Azure Local Cloud-identity
Platform - SecurityDefender, Sentinel, Key Vaultssub-Azure Local Cloud-security
Landing Zones - CorpAzure Local clusters, internal workloadssub-Azure Local Cloud-azurelocal-ral
Landing Zones - OnlineInternet-facing workloadssub-Azure Local Cloud-workloads-prod
Subscription Strategy
  • Dedicated Azure Local Subscription: Each Azure Local cluster site should have its own subscription for clear billing, governance, and RBAC boundaries
  • Site Code in Name: Include site code (e.g., ral, atl) for multi-site deployments
  • Environment Separation: Production and non-production workloads in separate subscriptions
Subscription Limits
  • Maximum Display Name Length: 64 characters
  • Resources per Subscription: 800+ resource types with varying limits
  • RBAC Scope: Subscription is the highest scope for most RBAC assignments

Resource Groups

CAF Pattern: rg-<workload>-<environment>-<region>-<instance>

Examples:

  • rg-azlocal-prod-eus-001 (Primary cluster resources)
  • rg-azlocal-prod-eus-arc (Arc-connected resources)
  • rg-azlocal-prod-eus-network (Networking resources)
  • rg-azlocal-prod-eus-security (Security resources)

Variable Mapping:

azure_resources:
resource_group_name: "rg-{{workload}}-{{environment}}-{{region}}-{{instance}}"
Workload Naming
  • Use azurelocal for full product name compliance
  • Use azlocal for abbreviated version (when length is constrained)
  • Never use legacy azs or hci abbreviations

2.2 Networking

Virtual Networks and Subnets

VNet CAF Pattern: vnet-<workload>-<environment>-<region>-<purpose> Subnet CAF Pattern: snet-<purpose>-<environment>

Examples:

  • vnet-azlocal-prod-eus-hub (Hub virtual network)
  • snet-management-prod (Management subnet)
  • snet-gateway-prod (Gateway subnet)
  • AzureBastionSubnet (Azure Bastion subnet - must use exact name)

Variable Mapping:

networking:
vnet_name: "vnet-{{workload}}-{{environment}}-{{region}}-{{purpose}}"
subnet_name: "snet-{{purpose}}-{{environment}}"
Bastion Subnet Name

Azure Bastion subnet must be named exactly AzureBastionSubnet - no flexibility allowed.

ExpressRoute Circuit

CAF Pattern: erc-<workload>-<environment>-<region>-<instance>

Examples:

  • erc-azlocal-prod-eus-001 (Production ExpressRoute circuit)
  • erc-azlocal-dr-wus-001 (DR site ExpressRoute circuit)

Variable Mapping:

expressroute:
circuit_name: "erc-{{workload}}-{{environment}}-{{region}}-{{instance}}"

VPN Gateway

CAF Pattern: vgw-<workload>-<environment>-<region>-<instance>

VPN Gateways provide site-to-site (S2S) VPN connectivity between Azure and on-premises networks for Azure Local deployments.

Examples:

  • vgw-azlocal-prod-eus-001 (Primary VPN gateway)
  • vgw-azlocal-dr-wus-001 (DR site VPN gateway)

Related Resources:

Resource TypeCAF PatternExample
Virtual Network Gatewayvgw-<workload>-<environment>-<region>-<instance>vgw-azlocal-prod-eus-001
Local Network Gatewaylgw-<site>-<environment>-<region>lgw-ral-prod-eus
VPN Connectionvcn-<source>-to-<destination>-<environment>vcn-azure-to-ral-prod
Public IP (VPN)pip-vgw-<environment>-<instance>pip-vgw-prod-001

Variable Mapping:

vpn:
vgw_name: "vgw-{{workload}}-{{environment}}-{{region}}-{{instance}}"
lgw_name: "lgw-{{site_code}}-{{environment}}-{{region}}"
connection_name: "vcn-azure-to-{{site_code}}-{{environment}}"
pip_name: "pip-vgw-{{environment}}-{{instance}}"
VPN vs ExpressRoute
  • VPN Gateway: Site-to-site VPN over public internet (backup connectivity)
  • ExpressRoute: Private dedicated connection (primary connectivity for production)
  • Azure Local deployments typically use ExpressRoute with VPN as failover

Azure Bastion

CAF Pattern: bas-<workload>-<environment>-<region>-<instance>

Azure Bastion provides secure RDP/SSH access to Azure VMs without public IP addresses.

Examples:

  • bas-azlocal-prod-eus-001 (Production Bastion host)
  • bas-azlocal-dev-eus-001 (Development Bastion host)

Related Resources:

Resource TypeCAF PatternExample
Azure Bastionbas-<workload>-<environment>-<region>-<instance>bas-azlocal-prod-eus-001
Bastion SubnetAzureBastionSubnetAzureBastionSubnet (exact name required)
Public IP (Bastion)pip-bas-<environment>-<instance>pip-bas-prod-001

Variable Mapping:

bastion:
bastion_name: "bas-{{workload}}-{{environment}}-{{region}}-{{instance}}"
subnet_name: "AzureBastionSubnet"
pip_name: "pip-bas-{{environment}}-{{instance}}"
Bastion Subnet Requirement

Azure Bastion subnet must be named exactly AzureBastionSubnet. This is a Microsoft requirement with no flexibility. Minimum subnet size is /26.

Azure Firewall

CAF Pattern: afw-<workload>-<environment>-<region>-<instance>

Azure Firewall provides centralized network security and traffic filtering for hub-spoke architectures.

Examples:

  • afw-azlocal-prod-eus-001 (Production Azure Firewall)
  • afw-azlocal-dr-wus-001 (DR site Azure Firewall)

Related Resources:

Resource TypeCAF PatternExample
Azure Firewallafw-<workload>-<environment>-<region>-<instance>afw-azlocal-prod-eus-001
Firewall Policyafwp-<workload>-<environment>-<region>afwp-azlocal-prod-eus
Firewall SubnetAzureFirewallSubnetAzureFirewallSubnet (exact name required)
Public IP (Firewall)pip-afw-<environment>-<instance>pip-afw-prod-001

Variable Mapping:

azure_firewall:
firewall_name: "afw-{{workload}}-{{environment}}-{{region}}-{{instance}}"
policy_name: "afwp-{{workload}}-{{environment}}-{{region}}"
subnet_name: "AzureFirewallSubnet"
pip_name: "pip-afw-{{environment}}-{{instance}}"
Azure Firewall Subnet Requirement

Azure Firewall subnet must be named exactly AzureFirewallSubnet. Minimum subnet size is /26.

Network Security Groups (NSG)

CAF Pattern: nsg-<purpose>-<environment>

NSGs control inbound and outbound network traffic for subnets and network interfaces.

Examples:

  • nsg-management-prod (Management subnet NSG)
  • nsg-gateway-prod (Gateway subnet NSG)
  • nsg-workloads-prod (Workloads subnet NSG)
  • nsg-azlocal-prod (Azure Local subnet NSG)

Variable Mapping:

network_security_groups:
management: "nsg-management-{{environment}}"
gateway: "nsg-gateway-{{environment}}"
workloads: "nsg-workloads-{{environment}}"
azlocal: "nsg-azlocal-{{environment}}"
NSG Best Practices
  • Apply NSGs to subnets (not individual NICs) for easier management
  • Use Application Security Groups (ASGs) for grouping VMs
  • Document all custom rules with clear descriptions
  • Use tags for governance and compliance tracking

Route Tables

CAF Pattern: rt-<purpose>-<environment>-<region>

Examples:

  • rt-hub-prod-eus (Hub network route table)
  • rt-spoke-prod-eus (Spoke network route table)
  • rt-azlocal-prod-eus (Azure Local network route table)

Variable Mapping:

route_tables:
hub: "rt-hub-{{environment}}-{{region}}"
spoke: "rt-spoke-{{environment}}-{{region}}"
azlocal: "rt-azlocal-{{environment}}-{{region}}"

User Defined Routes (UDR)

Pattern: udr-<purpose>-<environment>

Examples:

  • udr-internet-prod (Internet egress route)
  • udr-onprem-prod (On-premises route)
  • udr-azlocal-prod (Azure Local route)

Variable Mapping:

user_defined_routes:
internet: "udr-internet-{{environment}}"
onprem: "udr-onprem-{{environment}}"

Private Endpoints

CAF Pattern: pe-<service>-<environment>-<region>

Examples:

  • pe-keyvault-prod-eus (Key Vault private endpoint)
  • pe-storage-prod-eus (Storage account private endpoint)
  • pe-sqldb-prod-eus (SQL Database private endpoint)

Variable Mapping:

private_endpoints:
keyvault: "pe-keyvault-{{environment}}-{{region}}"
storage: "pe-storage-{{environment}}-{{region}}"

Private DNS Zones

Pattern: privatelink.<service>.core.windows.net

Examples:

  • privatelink.blob.core.windows.net (Blob storage)
  • privatelink.vaultcore.azure.net (Key Vault)
  • privatelink.database.windows.net (SQL Database)
  • privatelink.file.core.windows.net (File storage)

Variable Mapping:

private_dns_zones:
blob: "privatelink.blob.core.windows.net"
keyvault: "privatelink.vaultcore.azure.net"
sql: "privatelink.database.windows.net"
file: "privatelink.file.core.windows.net"
Private DNS Zones

Private DNS zones enable name resolution for Azure Private Endpoints. These zones follow Microsoft's standard naming convention and cannot be customized.

VLANs

Standard VLAN Allocation (from config/variables.yml):

VLAN IDPurposeVariable NameNotes
100-199Managementvlan_managementCustomer preference
711Storage 1vlan_storage_1RDMA network 1
712Storage 2vlan_storage_2RDMA network 2
200-299VM Networksvlan_vm_*Application workloads
300-399Backupvlan_backupOptional, if segregated

Variable Mapping:

vlans:
management: 100
storage_1: 711
storage_2: 712
vm_production: 200
vm_development: 201
backup: 300

IP Address Allocation

Management Network Example (10.x.x.x/24):

Device/ServiceHostnameIP PatternVariable
Cluster IPral-clus01mgmt_network.10cluster_ip
Node 1ral-01-n01mgmt_network.11node_01_ip
Node 2ral-01-n02mgmt_network.12node_02_ip
Node 3ral-01-n03mgmt_network.13node_03_ip
Node 4ral-01-n04mgmt_network.14node_04_ip
Reserved-mgmt_network.15-20(Future expansion)
iDRAC Node 1ral-01-n01-ioob_network.11node_01_idrac_ip
iDRAC Node 2ral-01-n02-ioob_network.12node_02_idrac_ip
iDRAC Node 3ral-01-n03-ioob_network.13node_03_idrac_ip
iDRAC Node 4ral-01-n04-ioob_network.14node_04_idrac_ip

2.3 Compute

Virtual Machines (Azure VMs)

Azure VMs have two separate names that serve different purposes:

Name TypePurposeMax LengthWhere It Appears
Azure Resource NameIdentifies the VM in Azure Portal, ARM, CLI64 chars (Linux), 15 chars (Windows resource name)Azure Portal, billing, RBAC
Computer Name (Hostname)The OS-level hostname visible in Windows/Linux15 chars (Windows NetBIOS), 64 chars (Linux)Active Directory, DNS, OS
Two Names — Always Configure Both

Every VM deployment must set both the Azure resource name and the OS hostname. They are independent values. Failing to set the hostname explicitly results in Azure auto-generating one.

Azure Resource Name

CAF Pattern: vm-<workload>-<environment>-<region>-<role>-<instance>

Examples:

  • vm-azlocal-prod-eus-dc-01 (Domain Controller 1)
  • vm-azlocal-prod-eus-dc-02 (Domain Controller 2)
  • vm-azlocal-prod-eus-jmp-01 (Jumpbox server)
  • vm-azlocal-prod-eus-wac-01 (Windows Admin Center)
Computer Name (Hostname)

Pattern: <site>-<role>-<nn> (⚠️ 15-character NetBIOS limit for domain-joined Windows machines)

Examples:

  • ral-dc-01 (9 chars)
  • ral-wac-01 (10 chars)
  • ral-jmp-01 (10 chars)
  • ral-tools (9 chars)
VM Name Mapping Table

The following table shows how Azure resource names map to Windows hostnames for common VM roles:

RoleAzure Resource NameHostname (≤15 chars)Chars
Domain Controller 1vm-azlocal-prod-eus-dc-01ral-dc-019
Domain Controller 2vm-azlocal-prod-eus-dc-02ral-dc-029
Certificate Authorityvm-azlocal-prod-eus-ca-01ral-ca-019
Windows Admin Centervm-azlocal-prod-eus-wac-01ral-wac-0110
Jumpbox / Toolsvm-azlocal-prod-eus-jmp-01ral-jmp-0110
backup servervm-azlocal-prod-eus-Azure Backup-01ral-Azure Backup-0111
Utility Servervm-azlocal-prod-eus-util-01ral-util-0111
NDM Servervm-azlocal-prod-eus-ndm-01ral-ndm-0110
VM Scale Sets (VMSS)

CAF Pattern: vmss-<workload>-<environment>-<region>-<role>-<instance>

VMSS instances use a computer_name_prefix instead of a full hostname. Azure appends a unique suffix automatically.

RoleAzure Resource NameComputer Name PrefixInstance Hostname
CI/CD Runnersvmss-azlocal-prod-eus-cicd-01cicdcicd000000, cicd000001, ...
Web Tiervmss-azlocal-prod-eus-web-01webweb000000, web000001, ...
Deployment Configuration

Always configure both names during VM deployment:

PowerShell:

New-AzVM -ResourceGroupName "rg-azlocal-prod-eus-001" `
-Name "vm-azlocal-prod-eus-dc-01" `
-ComputerName "ral-dc-01"

Terraform:

resource "azurerm_windows_virtual_machine" "dc_01" {
name = "vm-azlocal-prod-eus-dc-01" # Azure resource name
computer_name = "ral-dc-01" # Windows hostname (≤15 chars)
# ...
}

resource "azurerm_linux_virtual_machine_scale_set" "cicd" {
name = "vmss-azlocal-prod-eus-cicd-01" # Azure resource name
computer_name_prefix = "cicd" # Hostname prefix for instances
# ...
}

ARM Template / Bicep:

"osProfile": {
"computerName": "ral-dc-01",
"adminUsername": "..."
}

Variable Mapping:

azure_vms:
domain_controllers:
- vm_name: "vm-{{workload}}-{{environment}}-{{region}}-dc-{{instance}}"
computer_name: "{{site_code}}-dc-{{instance}}" # Windows hostname (15 chars max)
jumpbox:
- vm_name: "vm-{{workload}}-{{environment}}-{{region}}-jmp-{{instance}}"
computer_name: "{{site_code}}-jmp-{{instance}}"
wac:
- vm_name: "vm-{{workload}}-{{environment}}-{{region}}-wac-{{instance}}"
computer_name: "{{site_code}}-wac-{{instance}}"
NetBIOS 15-Character Limit

Windows computer names (hostnames) are limited to 15 characters due to the NetBIOS protocol used by Active Directory. This applies to all domain-joined Windows VMs. Keep site codes short (2-5 chars) and role codes short (2-4 chars) to stay within the limit.

Character budget: {site} (2-5) + - (1) + {role} (2-4) + - (1) + {nn} (2) = 8-13 characters

2.4 Storage

Storage Accounts

CAF Pattern: st<workload><environment><region><instance> Constraints: 3-24 characters, lowercase alphanumeric only, globally unique

Examples:

  • stazlprdeus001 (Azure Local production storage - 15 chars)
  • stazldevwus001 (Azure Local dev storage - 15 chars)
  • stazltestcus001 (Azure Local test storage - 16 chars)

Variable Mapping:

storage:
storage_account_name: "st{{workload_abbr}}{{environment_abbr}}{{region}}{{instance}}"

Abbreviations:

  • Workload: azl (Azure Local)
  • Environment: prd (prod), dev (dev), tst (test)
  • Region: eus, wus, cus (abbreviated codes)
Storage Account Naming
  • Must be globally unique across all of Azure
  • Lowercase alphanumeric only (no hyphens, no uppercase)
  • Use shortened patterns from the start to stay within 24-character limit
  • 15-16 characters recommended to allow for longer instance numbers

2.5 Security & Identity

Key Vault

CAF Pattern: kv-<workload>-<environment>-<region>-<instance> Constraints: 3-24 characters, alphanumeric and hyphens only, globally unique, no consecutive hyphens

Examples:

  • kv-azl-prod-eus-001 (Production Key Vault - 19 chars)
  • kv-azl-mgmt-eus-001 (Management Key Vault - 19 chars)
  • kv-azl-dev-eus-001 (Development Key Vault - 18 chars)

Variable Mapping:

keyvault:
platform_keyvault_name: "kv-{{workload}}-{{environment}}-{{region}}-{{instance}}"
Key Vault Naming
  • Must be globally unique across all of Azure
  • 3-24 characters maximum
  • No consecutive hyphens allowed (e.g., kv-azl--prod is invalid)
  • Use shortened workload names if needed

Entra ID Groups

Pattern: grp-<scope>-<role>-<environment>

Entra ID security groups follow a consistent naming pattern aligned with Azure CAF/WAF best practices.

ComponentDescriptionExamples
grpResource type prefixAlways grp
scopeFunctional area or workloadplatform, azlocal, keyvault, network
roleRBAC role or access leveladmins, operators, readers, contributors
environmentEnvironment identifierprod, dev, test
Standard Security Groups
PurposeGroup NameDescription
Platform Adminsgrp-platform-admins-prodFull platform administrative access
Azure Local Adminsgrp-azlocal-admins-prodAzure Local cluster administration
Azure Local Operatorsgrp-azlocal-operators-prodDay-to-day operations access
Azure Local Readersgrp-azlocal-readers-prodRead-only monitoring access
Key Vault Adminsgrp-keyvault-admins-prodKey Vault management access
Network Adminsgrp-network-admins-prodNetwork resource management
Security Adminsgrp-security-admins-prodSecurity and compliance management
AVD Usersgrp-avd-users-prodAzure Virtual Desktop access
Backup Operatorsgrp-backup-operators-prodBackup and recovery operations
PIM-Eligible Groups

Pattern: grp-pim-<role>-<environment>

Privileged Identity Management (PIM) eligible groups enable just-in-time (JIT) access elevation. These groups must be created with isAssignableToRole = true in Entra ID.

PurposeGroup NameActivation Use Case
PIM Ownergrp-pim-owner-prodEmergency full-access activation
PIM Contributorgrp-pim-contributor-prodElevated write access for deployments
PIM Security Admingrp-pim-security-admin-prodSecurity incident response
PIM Key Vault Admingrp-pim-keyvault-admin-prodKey Vault secret rotation / emergency access
PIM Network Admingrp-pim-network-admin-prodNetwork change management windows
PIM User Admingrp-pim-user-admin-prodIdentity management tasks
PIM Group Requirements
  • PIM-eligible groups must have isAssignableToRole = true set at creation (cannot be changed later)
  • Use PIM for all privileged operations — avoid permanent standing access
  • Configure activation policies: maximum duration (e.g., 8 hours), require justification, require approval for Owner roles
  • All PIM activations are logged in Entra ID audit logs

Variable Mapping:

entra_groups:
# Standard groups
platform_admins: "grp-platform-admins-{{environment}}"
azlocal_admins: "grp-azlocal-admins-{{environment}}"
azlocal_operators: "grp-azlocal-operators-{{environment}}"
azlocal_readers: "grp-azlocal-readers-{{environment}}"
keyvault_admins: "grp-keyvault-admins-{{environment}}"
security_admins: "grp-security-admins-{{environment}}"

# PIM-eligible groups
pim_owner: "grp-pim-owner-{{environment}}"
pim_contributor: "grp-pim-contributor-{{environment}}"
pim_security_admin: "grp-pim-security-admin-{{environment}}"
pim_keyvault_admin: "grp-pim-keyvault-admin-{{environment}}"

Service Principals

Pattern: sp-<workload>-<environment>-<purpose>

Examples:

  • sp-azlocal-prod-deployment (Azure Local deployment automation)
  • sp-azlocal-prod-monitoring (Monitoring integration)
  • sp-cicd-customer-prod (CI/CD pipeline service principal)
  • sp-backup-prod-recovery (Backup and recovery automation)

Variable Mapping:

service_principals:
deployment: "sp-{{workload}}-{{environment}}-deployment"
monitoring: "sp-{{workload}}-{{environment}}-monitoring"
cicd: "sp-cicd-{{customer}}-{{environment}}"

Managed Identities

CAF Pattern: id-<workload>-<environment>-<region>-<instance>

Examples:

  • id-azlocal-prod-eus-001 (Primary managed identity)
  • id-azlocal-prod-eus-backup (Backup service identity)
  • id-azlocal-prod-eus-monitoring (Monitoring identity)

Variable Mapping:

managed_identities:
primary: "id-{{workload}}-{{environment}}-{{region}}-{{instance}}"
backup: "id-{{workload}}-{{environment}}-{{region}}-backup"

Azure Policy

CAF Pattern: Policy definitions and assignments follow specific naming patterns for governance.

Policy Definition Pattern: policy-<purpose>-<scope> Policy Assignment Pattern: assign-<policy>-<scope>-<environment> Initiative (Policy Set) Pattern: initiative-<purpose>-<scope>

Examples:

  • policy-require-tags-rg (Require tags on resource groups)
  • policy-deny-public-ip (Deny public IP creation)
  • assign-require-tags-sub-prod (Policy assignment at subscription level)
  • initiative-azlocal-security (Security initiative for Azure Local)

Standard Azure Local Policy Assignments:

Policy PurposeAssignment NameScope
Require resource tagsassign-require-tags-sub-azlocalSubscription
Allowed VM SKUsassign-allowed-vmsizes-rg-azlocalResource Group
Allowed regionsassign-allowed-regions-mg-corpManagement Group
Deny public IPassign-deny-publicip-sub-azlocalSubscription
Enable Defenderassign-enable-defender-sub-azlocalSubscription

Variable Mapping:

azure_policy:
require_tags_assignment: "assign-require-tags-sub-{{workload}}"
allowed_regions_assignment: "assign-allowed-regions-mg-{{management_group}}"
security_initiative: "initiative-{{workload}}-security"
Policy Governance
  • Use initiatives (policy sets) to group related policies
  • Apply policies at the highest appropriate scope (management group preferred)
  • Use exclusions sparingly and document reasoning
  • Tag all custom policies for tracking

2.6 Monitoring & Operations

Log Analytics Workspace

CAF Pattern: law-<workload>-<environment>-<region>-<instance>

Log Analytics Workspaces are the central repository for all Azure monitoring data, including logs from Azure Local clusters, Arc-enabled servers, and Azure resources.

Examples:

  • law-azlocal-prod-eus-001 (Production Log Analytics workspace)
  • law-azlocal-dev-eus-001 (Development Log Analytics workspace)
  • law-security-prod-eus-001 (Security-focused workspace)

Variable Mapping:

monitoring:
law_name: "law-{{workload}}-{{environment}}-{{region}}-{{instance}}"
law_id: "/subscriptions/{{subscription_id}}/resourceGroups/{{rg_name}}/providers/Microsoft.OperationalInsights/workspaces/{{law_name}}"
Workspace Strategy
  • Use a centralized workspace for Azure Local infrastructure monitoring
  • Consider separate workspaces for security (SIEM integration) and compliance requirements
  • Configure data retention based on compliance needs (default 30 days, up to 730 days)

Application Insights

CAF Pattern: appi-<workload>-<environment>-<region>-<instance>

Application Insights provides application performance monitoring (APM) for workloads running on Azure Local.

Examples:

  • appi-azlocal-prod-eus-001 (Production Application Insights)
  • appi-azlocal-dev-eus-001 (Development Application Insights)
  • appi-webapp-prod-eus-001 (Web application monitoring)

Variable Mapping:

monitoring:
appi_name: "appi-{{workload}}-{{environment}}-{{region}}-{{instance}}"

Azure Monitor Action Groups

CAF Pattern: ag-<workload>-<environment>-<region>-<instance>

Examples:

  • ag-azlocal-prod-eus-001 (Production alerts)
  • ag-azlocal-dev-eus-001 (Development alerts)

Variable Mapping:

azure_monitor:
action_group_name: "ag-{{workload}}-{{environment}}-{{region}}-{{instance}}"

Data Collection Rules

CAF Pattern: dcr-<workload>-<environment>-<region>-<instance>

Examples:

  • dcr-azlocal-prod-eus-001 (Production data collection rule)
  • dcr-azlocal-prod-eus-security (Security-focused collection)
  • dcr-azlocal-prod-eus-performance (Performance metrics collection)

Variable Mapping:

data_collection:
rule_name: "dcr-{{workload}}-{{environment}}-{{region}}-{{instance}}"
security_rule: "dcr-{{workload}}-{{environment}}-{{region}}-security"

Data Collection Endpoints

CAF Pattern: dce-<workload>-<environment>-<region>-<instance>

Examples:

  • dce-azlocal-prod-eus-001 (Production data collection endpoint)
  • dce-azlocal-dev-eus-001 (Development data collection endpoint)

Variable Mapping:

data_collection:
endpoint_name: "dce-{{workload}}-{{environment}}-{{region}}-{{instance}}"

Alerts

Pattern: alert-<purpose>-<environment>-<region>

Examples:

  • alert-cpu-high-prod-eus (High CPU alert)
  • alert-disk-low-prod-eus (Low disk space alert)
  • alert-cluster-health-prod-eus (Cluster health alert)

Variable Mapping:

alerts:
cpu_high: "alert-cpu-high-{{environment}}-{{region}}"
disk_low: "alert-disk-low-{{environment}}-{{region}}"
cluster_health: "alert-cluster-health-{{environment}}-{{region}}"

Azure Update Manager

CAF Pattern: aum-<workload>-<environment>-<region>-<instance>

Examples:

  • aum-azlocal-prod-eus-001 (Production update management)
  • aum-azlocal-dev-eus-001 (Development update management)

Variable Mapping:

azure_update_manager:
maintenance_config_name: "aum-{{workload}}-{{environment}}-{{region}}-{{instance}}"

Microsoft Defender for Cloud

CAF Pattern: mdc-<workload>-<environment>-<region>-<instance>

Examples:

  • mdc-azlocal-prod-eus-001 (Production security center)
  • mdc-azlocal-dev-eus-001 (Development security center)

Variable Mapping:

defender_for_cloud:
security_center_name: "mdc-{{workload}}-{{environment}}-{{region}}-{{instance}}"

2.7 Automation

Automation Account

CAF Pattern: aa-<workload>-<environment>-<region>-<instance>

Examples:

  • aa-azlocal-prod-eus-001 (Production automation account)
  • aa-azlocal-dev-eus-001 (Development automation account)

Variable Mapping:

automation:
account_name: "aa-{{workload}}-{{environment}}-{{region}}-{{instance}}"

Runbooks

Pattern: rb-<purpose>-<environment>

Examples:

  • rb-patching-prod (Patching automation runbook)
  • rb-backup-prod (Backup automation runbook)
  • rb-scaling-prod (Auto-scaling runbook)

Variable Mapping:

runbooks:
patching: "rb-patching-{{environment}}"
backup: "rb-backup-{{environment}}"

2.8 Arc Resources

Azure Arc Gateway

CAF Pattern: arcgw-<workload>-<environment>-<region>-<instance>

Examples:

  • arcgw-azlocal-prod-eus-001 (Production Arc gateway)
  • arcgw-azlocal-dev-eus-001 (Development Arc gateway)

Variable Mapping:

azure_arc:
gateway_name: "arcgw-{{workload}}-{{environment}}-{{region}}-{{instance}}"

2.9 Backup & Disaster Recovery

Witness Resources

Cloud Witness Storage Account

Pattern: stwitness<cluster><region><##> Constraints: 3-24 characters, lowercase alphanumeric only, globally unique

Examples:

  • stwitnessclus01eus01 (Cluster 01 cloud witness - 20 chars)
  • stwitnessraleus01 (RAL site cloud witness - 17 chars)

Variable Mapping:

witness:
cloud_witness_storage: "stwitness{{cluster}}{{region}}{{instance}}"
Cloud Witness Naming
  • Must be globally unique across all of Azure
  • Lowercase alphanumeric only (no hyphens)
  • Keep names short to stay within 24-character limit
File Share Witness

Pattern: fswit-<cluster>-<##>

Examples:

  • fswit-clus01-01 (Cluster 01 file share witness)
  • fswit-ral-01 (RAL site file share witness)

Variable Mapping:

witness:
file_share_witness: "fswit-{{cluster}}-{{instance}}"

Azure Site Recovery

CAF Pattern: asr-<workload>-<environment>-<region>-<instance>

Examples:

  • asr-azlocal-prod-eus-001 (Production site recovery vault)
  • asr-azlocal-dr-wus-001 (DR region site recovery vault)

Variable Mapping:

site_recovery:
vault_name: "asr-{{workload}}-{{environment}}-{{region}}-{{instance}}"

Backup Policies

Pattern: bkpol-<purpose>-<environment>

Examples:

  • bkpol-daily-prod (Daily backup policy)
  • bkpol-weekly-prod (Weekly backup policy)
  • bkpol-monthly-prod (Monthly backup policy)
  • bkpol-vm-prod (VM backup policy)

Variable Mapping:

backup_policies:
daily: "bkpol-daily-{{environment}}"
weekly: "bkpol-weekly-{{environment}}"
vm: "bkpol-vm-{{environment}}"

3. Operations & CI/CD

This section covers operational resources for deployment automation and GitLab integration.

3.1 Source Control Projects

Pattern: <customer>-azurelocal

Examples:

  • acme-azurelocal (ACME Corp)
  • globaltech-azurelocal (GlobalTech)
  • enterprise-solutions-azurelocal (Enterprise Solutions)

Variable Mapping:

project:
project_name: "{{customer_name}}-azurelocal"

3.2 CI/CD Environments

Pattern: azr-<stage>-<region>

Examples:

  • azr-deploy-eus (Deployment stage - East US)
  • azr-validate-eus (Validation stage - East US)
  • azr-production-eus (Production stage - East US)

Variable Mapping:

cicd:
environment_deploy: "azr-deploy-{{region}}"
environment_validate: "azr-validate-{{region}}"
environment_production: "azr-production-{{region}}"

3.3 CI/CD Service Principal

Pattern: sp-cicd-<customer>-<environment>

Examples:

  • sp-cicd-acme-prod (ACME Corp production CI/CD)
  • sp-cicd-globaltech-prod (GlobalTech production CI/CD)
  • sp-cicd-internal-dev (Internal development CI/CD)

Variable Mapping:

cicd:
service_principal: "sp-cicd-{{customer}}-{{environment}}"

4. Reference Tables

4.1 CAF Resource Type Abbreviations

Azure Local Cloud follows Microsoft's recommended abbreviations for Azure resources:

Resource TypeCAF AbbreviationExample
Management Group(ID pattern)azl-platform-prod
Resource Grouprgrg-azlocal-prod-eus-001
Virtual Networkvnetvnet-azlocal-prod-eus-hub
Subnetsnetsnet-management-prod
Network Security Groupnsgnsg-management-prod
Virtual Network Gatewayvgwvgw-azlocal-prod-eus-001
Local Network Gatewaylgwlgw-onprem-prod-001
VPN Connectioncncn-azlocal-to-onprem
Network Interfacenicnic-vm-dc-001
Public IP Addresspippip-vgw-prod-001
Load Balancerlblb-azlocal-prod-001
Storage Accountststazlprdeus001
Storage Container(no prefix)vhds
Key Vaultkvkv-azl-prod-eus-001
Virtual Machinevmvm-azlocal-prod-eus-dc-001
Availability Setavsetavset-dc-prod-eus
Managed Diskdiskdisk-vm-dc-001-os
Log Analytics Workspacelawlaw-azlocal-prod-eus-001
Application Insightsappiappi-azlocal-prod-eus-001
Azure Bastionbasbas-azlocal-prod-eus-001
Azure Firewallafwafw-azlocal-prod-eus-001
Recovery Services Vaultrsvrsv-azlocal-prod-eus-001
Azure Monitor Action Groupagag-azlocal-prod-eus-001
Azure Update Manageraumaum-azlocal-prod-eus-001
Microsoft Defender for Cloudmdcmdc-azlocal-prod-eus-001
Azure Arc Gatewayarcgwarcgw-azlocal-prod-eus-001
Azure Local Storage Pathstpathstpath-azlocal-prod-eus-001
Arc Custom Locationclcl-azlocal-prod-eus-001
Logical Networklnetlnet-management-prod-eus
VM Imageimgimg-ws2022-dc-prod
ExpressRoute Circuitercerc-azlocal-prod-eus-001
Route Tablertrt-hub-prod-eus
User Defined Routeudrudr-internet-prod
Private Endpointpepe-keyvault-prod-eus
Entra ID Groupgrpgrp-azlocal-admins-prod
Service Principalspsp-azlocal-prod-deployment
Managed Identityidid-azlocal-prod-eus-001
Automation Accountaaaa-azlocal-prod-eus-001
Runbookrbrb-patching-prod
Data Collection Ruledcrdcr-azlocal-prod-eus-001
Data Collection Endpointdcedce-azlocal-prod-eus-001
Alertalertalert-cpu-high-prod-eus
Cloud Witness Storagestwitnessstwitnessclus01eus01
File Share Witnessfswitfswit-clus01-01
Azure Site Recoveryasrasr-azlocal-prod-eus-001
Backup Policybkpolbkpol-daily-prod

4.2 Azure Naming Requirements

Resource TypeLengthValid CharactersCaseGlobal Unique
Resource Group1-90Alphanumeric, underscore, hyphen, period, parenthesesNoNo
Virtual Network2-64Alphanumeric, underscore, hyphen, periodNoNo
Subnet1-80Alphanumeric, underscore, hyphen, periodNoNo
Network Security Group1-80Alphanumeric, underscore, hyphen, periodNoNo
Storage Account3-24Lowercase alphanumeric onlyNoYes
Key Vault3-24Alphanumeric and hyphensNoYes
Virtual Machine (Windows)1-15Alphanumeric and hyphensNoNo
Virtual Machine (Linux)1-64Alphanumeric and hyphensNoNo
Public IP Address1-80Alphanumeric, underscore, hyphen, periodNoNo
Load Balancer1-80Alphanumeric, underscore, hyphen, periodNoNo
Azure Bastion1-80Alphanumeric, underscore, hyphen, periodNoNo
Critical Constraints
  • Storage Accounts: Must be globally unique, lowercase alphanumeric only, no hyphens
  • Key Vaults: Must be globally unique, 3-24 characters
  • Windows VMs: Limited to 15 characters (NetBIOS compatibility)
  • Bastion Subnet: Must be named exactly AzureBastionSubnet (no flexibility)
  • Gateway Subnet: Should be named GatewaySubnet (recommended)

4.3 Variable Substitution Reference

For automation via variables.yml, use these variable patterns:

Common Variables

VariableDescriptionExample Value
site_codeSite code identifier (2-5 chars)RAL, ATL, iic
environmentEnvironment nameprod, dev
azure_regionAzure region codeeastus, westus
workloadWorkload/product nameazlocal, azurelocal
instanceSequential instance number001, 002
purposeResource purposehub, arc, network

Region Abbreviations (CAF-Compliant)

RegionCAF CodeAlt Code
East USeastuseus
East US 2eastus2eus2
West USwestuswus
West US 2westus2wus2
Central UScentraluscus
South Central USsouthcentralusscus
Automation Integration

All variables shown in {{curly braces}} are defined in the Variable Schema and can be populated from config/variables.yml using automation scripts. See Key Inputs and Variables for complete variable reference.


5.1 Naming Standards Validation Checklist

Before finalizing naming standards, validate alignment with both CAF and Azure Local Cloud standards:

  • CAF Compliance: All Azure resource names follow CAF patterns
  • Variable Schema Alignment: Names map to config/schema/variables.schema.json definitions
  • Uniqueness: No conflicts with existing customer infrastructure
  • Azure Compliance: All names meet Azure-specific requirements and constraints
  • DNS Compatibility: Names are valid for DNS records (lowercase recommended)
  • Length Constraints: Names fit within service-specific character limits
  • Consistency: Patterns are applied uniformly across all resources
  • Documentation: All naming conventions documented in variables.yml
  • Automation Ready: Naming patterns support {{variable}} substitution
  • Customer Approval: Naming standards reviewed and approved by customer