← Back to Demo

CAF Naming — The Convention That Scales

The Microsoft Build 2026 refresh turns the CAF matcher from a simple puzzle explainer into a governance article about naming that scales. The SPA teaches the same muscle memory platform teams need in production: choose the resource type, match the CAF pattern, validate the name before provisioning, and keep Azure and Microsoft Fabric artifacts consistent enough for ownership, cost attribution, and automation.
{type}-{project}-{env}-{region}-{instance}
Core Azure CAF Pattern
PR-Gated
Names Validated Before Merge
Azure Naming Tool
Standardize and Automate
lh_<domain>_<layer>
Fabric Pattern
Choose Type→ Match Pattern→ Validate→ Provision→ Govern

Why Naming Conventions Matter

Cloud sprawl starts as a readability problem. If a resource name does not reveal type, workload, environment, and region, every incident, cleanup, and cost review begins with a manual lookup. CAF-aligned naming converts the name itself into operational metadata.

The matcher game reinforces that pattern by asking players to connect resource types to compliant names. In production, the same matching happens in pull requests, deployment pipelines, inventory exports, and chargeback reviews.

Consistent naming improves ownership, cost attribution, and governance. A resource named func-coredata-prd-usw2-001 immediately reads as an example project code for a production Function App in West US 2. A name like app-final-v2 does not.

The CAF Pattern Explained

The Azure resource convention used by the demo follows a hyphenated Cloud Adoption Framework pattern:

{type}-{project}-{env}-{region}-{instance} func-project-dev-usw2-001 kv-coremon-prd-usw2-001 # coremon is an example project code umi-coredata-dev-usw2-ctl # ctl marks a control-plane identity
ComponentPurposeAllowed / Example ValuesGovernance Notes
typeResource-type abbreviationrg, func, kv, st, vnetComes from the canonical abbreviation table.
projectWorkload or platform short codeproject, coremon, coredata, coresecReal-looking values here are example project codes only.
envDeployment environmentdev, stg, prd, sbxMap subscription names to generic scopes such as Production, Dev, and Sandbox.
regionAzure location codeusw2 for West US 2, eus for East USKeep the code short and stable.
instanceSequence or purpose suffix001, 002, ctl, datUse numeric instances for multiples and purpose suffixes for identities.

Resource-Type Abbreviations

The canonical table keeps names predictable across subscriptions. It is grounded in the Microsoft CAF abbreviation guidance and extended with common deployment, identity, data, analytics, network, monitoring, and Fabric-adjacent resource types used by modern Azure platforms.

CategoryResourceProvider / ScopeAbbreviationExample Name
ManagementResource groupMicrosoft.Resources/resourceGroupsrgrg-coremon-dev
ManagementManagement groupTenant scopemgmg-platform-prd
ManagementDeployment stackMicrosoft.Resources/deploymentStacksstackstack-coredata-prd-usw2-001
IdentityUser-assigned managed identityMicrosoft.ManagedIdentity/userAssignedIdentitiesumiumi-coredata-dev-usw2-ctl
IdentityKey VaultMicrosoft.KeyVault/vaultskvkv-coremon-prd-usw2-001
IdentityFederated credentialChild of managed identityfcfc-org-repo-main
ComputeVirtual machineMicrosoft.Compute/virtualMachinesvmvm-build-dev-usw2-001
ComputeVirtual machine scale setMicrosoft.Compute/virtualMachineScaleSetsvmssvmss-api-prd-usw2-001
ComputeAvailability setMicrosoft.Compute/availabilitySetsavailavail-api-prd-usw2-001
ComputeManaged diskMicrosoft.Compute/disksdiskdisk-api-prd-usw2-001
WebFunction AppMicrosoft.Web/sitesfuncfunc-coresec-dev-usw2-001
WebApp Service appMicrosoft.Web/sitesappapp-portal-prd-usw2-001
WebApp Service planMicrosoft.Web/serverfarmsaspasp-portal-prd-usw2-001
WebStatic Web AppMicrosoft.Web/staticSitesstappstapp-portfolio-prd-usw2-001
ContainersContainer registryMicrosoft.ContainerRegistry/registriescrcrplatformdevusw2001
ContainersAzure Kubernetes ServiceMicrosoft.ContainerService/managedClustersaksaks-app-prd-usw2-001
ContainersContainer Apps environmentMicrosoft.App/managedEnvironmentscaecae-app-prd-usw2-001
ContainersContainer AppMicrosoft.App/containerAppscaca-api-prd-usw2-001
StorageStorage accountMicrosoft.Storage/storageAccountsststprojectdevusw2001
StorageBlob containerStorage child resourceblobblob-raw-ingest
StorageFile shareStorage child resourceshareshare-app-prd
DatabaseAzure SQL serverMicrosoft.Sql/serverssqlsql-data-prd-usw2-001
DatabaseAzure SQL databaseMicrosoft.Sql/servers/databasessqldbsqldb-sales-prd-usw2-001
DatabaseCosmos DB accountMicrosoft.DocumentDB/databaseAccountscosmoscosmos-app-prd-usw2-001
DatabasePostgreSQL flexible serverMicrosoft.DBforPostgreSQL/flexibleServerspsqlpsql-app-prd-usw2-001
DatabaseRedis cacheMicrosoft.Cache/Redisredisredis-app-prd-usw2-001
NetworkVirtual networkMicrosoft.Network/virtualNetworksvnetvnet-hub-prd-usw2-001
NetworkSubnetMicrosoft.Network/virtualNetworks/subnetssnetsnet-app-prd-usw2-001
NetworkNetwork security groupMicrosoft.Network/networkSecurityGroupsnsgnsg-app-prd-usw2-001
NetworkRoute tableMicrosoft.Network/routeTablesrtrt-app-prd-usw2-001
NetworkPublic IP addressMicrosoft.Network/publicIPAddressespippip-app-prd-usw2-001
NetworkLoad balancerMicrosoft.Network/loadBalancerslblb-app-prd-usw2-001
NetworkApplication GatewayMicrosoft.Network/applicationGatewaysagwagw-app-prd-usw2-001
NetworkAzure FirewallMicrosoft.Network/azureFirewallsafwafw-hub-prd-usw2-001
NetworkPrivate endpointMicrosoft.Network/privateEndpointspeppep-kv-prd-usw2-001
IntegrationEvent Hubs namespaceMicrosoft.EventHub/namespacesevhnsevhns-coremon-dev-usw2-001
IntegrationEvent hubMicrosoft.EventHub/namespaces/eventhubsevhactivitylogs
IntegrationService Bus namespaceMicrosoft.ServiceBus/namespacessbnssbns-app-prd-usw2-001
IntegrationService Bus queueService Bus child resourcesbqsbq-orders-prd
IntegrationLogic AppMicrosoft.Logic/workflowslogiclogic-ops-prd-usw2-001
DataData FactoryMicrosoft.DataFactory/factoriesadfadf-data-prd-usw2-001
DataData Explorer clusterMicrosoft.Kusto/clustersdecdec-logs-prd-usw2-001
DataData Explorer databaseMicrosoft.Kusto/clusters/databasesdedbdedb-logs-prd-usw2-001
AIAzure AI SearchMicrosoft.Search/searchServicessrchsrch-docs-prd-usw2-001
AIAzure OpenAI ServiceMicrosoft.CognitiveServices/accountsoaioai-copilot-prd-usw2-001
AIFoundry accountMicrosoft.CognitiveServices/accountsaifaif-agents-prd-usw2-001
AIMachine Learning workspaceMicrosoft.MachineLearningServices/workspacesmlwmlw-models-prd-usw2-001
MonitoringApplication InsightsMicrosoft.Insights/componentsappiappi-coremon-dev-usw2-001
MonitoringLog Analytics workspaceMicrosoft.OperationalInsights/workspacesloglog-platform-prd-usw2-001
MonitoringAction groupMicrosoft.Insights/actionGroupsagag-platform-prd-usw2-001
MonitoringManaged GrafanaMicrosoft.Dashboard/grafanaamgamg-coremon-dev-usw2-001
AnalyticsFabric capacityMicrosoft.Fabric/capacitiescapcap-data-prd-usw2-001

Special Cases

Not every Azure service can use the hyphenated pattern exactly. CAF is a convention, but Azure resource-name rules still win.

ResourceRulePatternExample
Storage accountLowercase letters and numbers only; no hyphens; 3–24 characters; globally unique.st{project}{env}{region}{instance}stprojectdevusw2001
Container registryUsually no hyphens; globally unique; keep compact.cr{project}{env}{region}{instance}crplatformdevusw2001
Key VaultGlobally unique DNS name; hyphens allowed; plan for soft-delete and purge protection.kv-{project}-{env}-{region}-{instance}kv-project-prd-usw2-001
Resource groupOften uses short form because region and instance are implied by contained resources.rg-{project}-{env}rg-coremon-dev
Managed identityPurpose suffix can be clearer than a number.umi-{project}-{env}-{region}-{purpose}umi-coredata-dev-usw2-dat
Event hub entityChild resource inside a namespace; descriptive names can be better than repeating CAF.{stream-name}activitylogs

Fabric Artifact Naming

Microsoft Fabric artifacts use a different but complementary convention. Instead of hyphenated Azure resource names, Fabric workspace items use underscore-delimited prefixes that make the artifact type, domain, and medallion layer visible in the workspace list. Common wildcard patterns include lh_*_brz, lh_*_slv, lh_*_gld, and nb_*_dq_*.

ArtifactPrefix / PatternExampleUsage
Workspacews_<domain>_<env>ws_sales_prdDomain and environment boundary.
Lakehouselh_<domain>_<layer>lh_sales_brzBronze, Silver, and Gold storage.
Pipelinepl_<function>_<source>_<domain>_<layer>pl_ing_salesforce_sales_brzIngestion, transformation, orchestration.
Notebooknb_<purpose>_<domain>_<desc>nb_dq_sales_validationData quality, analytics, utility.
Warehousedw_<domain>_<layer>dw_sales_gldGold-layer SQL consumption.
Semantic Modelsm_<domain>_<purpose>sm_sales_performancePower BI model layer.
Reportrpt_<domain>_<purpose>rpt_sales_dashboardPublished analytical report.
Dataflowdf_<purpose>_<domain>_<layer>df_clean_sales_slvLow-code transformation artifact.
Environmentenv_<domain>_sparkenv_sales_sparkRuntime and library configuration.
Bronze: lh_sales_brz, pl_ing_erp_sales_brz, nb_dq_sales_brz Silver: lh_sales_slv, pl_tfm_sales_brz_slv, nb_dq_sales_slv Gold: lh_sales_gld, dw_sales_gld, sm_sales_performance, rpt_sales_dashboard

Enforcement at the PR Gate

Naming conventions work when they are checked before resources exist. The PR gate should validate IaC names with the Azure Naming Tool, run the Bicep linter, and fail the build when a resource cannot be traced to the expected pattern.

Azure Naming Tool callout: Use the Azure Naming Tool to standardize and automate name generation. Pair it with source-controlled naming rules so reviewers see the same result the pipeline enforces.
Pull request opens → bicep build / bicep linter → naming-rule validation → storage and key-vault special-case checks → policy-as-code and deployment preview → merge only when names are compliant

This is the operational lesson behind the SPA. The game rewards correct matches immediately; the platform should do the same by catching drift in code review rather than after deployment.