# Azure Naming Convention (2-3 Character Region Codes) **Last Updated**: 2025-01-27 **Status**: Active - Legacy/Alternative Convention **Purpose**: Azure resource naming with 2-3 character region codes ## Overview This document defines the standardized naming convention for all Azure resources in the DeFi Oracle Meta Mainnet (ChainID 138) deployment using **2-3 character region codes**. The convention ensures uniformity, clarity, and compliance with Azure naming restrictions. > **Note**: This document uses 2-3 character region codes (e.g., `we`, `ne`, `fc`). > **Alternative**: See [Azure Naming Convention (3 Character Region Codes)](AZURE_NAMING_CONVENTION_3CHAR.md) for the 3-character standard. > **Related Documentation**: > - [Azure Naming Convention (3 Character)](AZURE_NAMING_CONVENTION_3CHAR.md) - Standard 3-character region code convention ## Table of Contents - [Overview](#overview) - [Naming Pattern](#naming-pattern) - [Pattern Components](#pattern-components) - [Region Codes](#region-codes) - [Resource Type Abbreviations](#resource-type-abbreviations) - [Core Infrastructure](#core-infrastructure) - [Compute](#compute) - [Storage](#storage) - [Security & Identity](#security--identity) - [Monitoring & Logging](#monitoring--logging) - [Database](#database) - [Networking](#networking) - [Naming Examples](#naming-examples) - [Resource Groups](#resource-groups) - [AKS Resources](#aks-resources) - [Networking](#networking-1) - [Storage](#storage-1) - [Security](#security) - [Monitoring](#monitoring) - [Special Cases](#special-cases) - [Terraform Backend](#terraform-backend) - [Multi-Region](#multi-region) - [Node Pools](#node-pools) - [Azure Naming Restrictions](#azure-naming-restrictions) - [General Rules](#general-rules) - [Resource-Specific Limits](#resource-specific-limits) - [Implementation](#implementation) - [Terraform Variables](#terraform-variables) - [Naming Locals](#naming-locals) - [Validation](#validation) - [Naming Validation Script](#naming-validation-script) - [Manual Validation Checklist](#manual-validation-checklist) - [Migration Guide](#migration-guide) - [Updating Existing Resources](#updating-existing-resources) - [Example Migration](#example-migration) - [Best Practices](#best-practices) - [References](#references) ## Naming Pattern ``` {cloud}-{env}-{region}-{resource}-{instance} ``` ### Pattern Components | Component | Abbreviation | Length | Description | Examples | |-----------|-------------|--------|-------------|----------| | **Cloud** | `az` | 2 | Cloud provider identifier | `az` (Azure) | | **Environment** | `p`, `d`, `t`, `s` | 1 | Environment code | `p` (prod), `d` (dev), `t` (test), `s` (staging) | | **Region** | `we`, `ne`, `fc` | 2-3 | Azure region code | `we` (westeurope), `ne` (northeurope), `fc` (francecentral) | | **Resource** | `rg`, `aks`, `kv` | 2-6 | Resource type abbreviation | See resource abbreviations below | | **Instance** | `001`, `main`, `sys` | 2-4 | Instance identifier | Sequential number or descriptive name | ## Region Codes | Full Name | Code | Full Name | Code | |-----------|------|-----------|------| | westeurope | `we` | northeurope | `ne` | | francecentral | `fc` | francesouth | `fs` | | germanywestcentral | `gw` | germanynorth | `gn` | | uksouth | `uk` | ukwest | `uw` | | swedencentral | `sc` | norwayeast | `ne` | | switzerlandnorth | `sn` | polandcentral | `pc` | | italynorth | `in` | spaincentral | `sp` | ## Resource Type Abbreviations ### Core Infrastructure | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | Resource Group | `rg` | `az-p-we-rg-net-001` | | Virtual Network | `vnet` | `az-p-we-vnet-main` | | Subnet | `snet` | `az-p-we-snet-aks` | | Network Security Group | `nsg` | `az-p-we-nsg-valid` | | Public IP | `pip` | `az-p-we-pip-gw` | | Load Balancer | `lb` | `az-p-we-lb-main` | | Application Gateway | `agw` | `az-p-we-agw-main` | ### Compute | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | AKS Cluster | `aks` | `az-p-we-aks-main` | | VM | `vm` | `az-p-we-vm-valid-001` | | VM Scale Set | `vmss` | `az-p-we-vmss-rpc` | | Container Instance | `aci` | `az-p-we-aci-oracle` | ### Storage | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | Storage Account | `st` | `az-p-we-st-backup-001` | | Storage Container | `cnt` | `az-p-we-cnt-chaindata` | | Disk | `disk` | `az-p-we-disk-valid-001` | | File Share | `share` | `az-p-we-share-config` | ### Security & Identity | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | Key Vault | `kv` | `az-p-we-kv-secrets-001` | | Managed Identity | `id` | `az-p-we-id-aks` | | Service Principal | `sp` | `az-p-we-sp-deploy` | ### Monitoring & Logging | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | Log Analytics Workspace | `law` | `az-p-we-law-main` | | Application Insights | `appi` | `az-p-we-appi-main` | | Action Group | `ag` | `az-p-we-ag-alerts` | | Alert Rule | `alert` | `az-p-we-alert-cpu` | ### Database | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | SQL Database | `sql` | `az-p-we-sql-blockscout` | | PostgreSQL | `psql` | `az-p-we-psql-main` | | Cosmos DB | `cosmos` | `az-p-we-cosmos-main` | ### Networking | Resource Type | Abbreviation | Example | |--------------|--------------|---------| | Route Table | `rt` | `az-p-we-rt-main` | | NAT Gateway | `nat` | `az-p-we-nat-main` | | VPN Gateway | `vpngw` | `az-p-we-vpngw-main` | | ExpressRoute | `er` | `az-p-we-er-main` | ## Naming Examples ### Resource Groups ``` az-p-we-rg-net-001 # Network resource group (prod, westeurope) az-p-we-rg-comp-001 # Compute resource group az-p-we-rg-stor-001 # Storage resource group az-p-we-rg-sec-001 # Security resource group az-d-we-rg-net-001 # Development environment ``` ### AKS Resources ``` az-p-we-aks-main # Main AKS cluster az-p-we-aks-node-sys # System node pool az-p-we-aks-node-valid # Validator node pool az-p-we-aks-node-sent # Sentry node pool az-p-we-aks-node-rpc # RPC node pool ``` ### Networking ``` az-p-we-vnet-main # Main virtual network az-p-we-snet-aks # AKS subnet az-p-we-snet-valid # Validator subnet az-p-we-snet-sent # Sentry subnet az-p-we-snet-rpc # RPC subnet az-p-we-snet-agw # Application Gateway subnet az-p-we-nsg-valid # Validator NSG az-p-we-pip-agw # Application Gateway public IP az-p-we-agw-main # Application Gateway ``` ### Storage ``` az-p-we-st-backup-001 # Backup storage account az-p-we-st-shared-001 # Shared storage account az-p-we-st-tfstate-001 # Terraform state storage az-p-we-cnt-chaindata # Chaindata container az-p-we-cnt-config # Configuration container ``` ### Security ``` az-p-we-kv-secrets-001 # Key Vault for secrets az-p-we-id-aks # AKS managed identity az-p-we-id-oracle # Oracle service identity ``` ### Monitoring ``` az-p-we-law-main # Log Analytics workspace az-p-we-appi-main # Application Insights az-p-we-ag-alerts # Alert action group ``` ## Special Cases ### Terraform Backend ``` az-p-we-st-tfstate-001 # Terraform state storage account az-p-we-rg-tfstate-001 # Terraform state resource group ``` ### Multi-Region ``` az-p-we-aks-main # Primary region (westeurope) az-p-ne-aks-main # Secondary region (northeurope) az-p-fc-aks-main # Tertiary region (francecentral) ``` ### Node Pools ``` az-p-we-aks-node-sys # System node pool az-p-we-aks-node-valid # Validator node pool (4 nodes) az-p-we-aks-node-sent # Sentry node pool (3 nodes) az-p-we-aks-node-rpc # RPC node pool (3 nodes) ``` ## Azure Naming Restrictions ### General Rules - **Length**: Varies by resource (see table below) - **Characters**: Alphanumeric, hyphens, underscores (varies by resource) - **Case**: Lowercase only - **Uniqueness**: Must be globally unique for some resources (storage accounts, Key Vaults) ### Resource-Specific Limits | Resource | Min | Max | Allowed Characters | Notes | |----------|-----|-----|-------------------|-------| | Resource Group | 1 | 90 | Alphanumeric, hyphens, underscores, periods, parentheses | | | Storage Account | 3 | 24 | Lowercase letters and numbers | Globally unique | | Key Vault | 3 | 24 | Alphanumeric and hyphens | Globally unique | | AKS Cluster | 1 | 63 | Alphanumeric, hyphens, underscores | | | Virtual Network | 2 | 64 | Alphanumeric, hyphens, underscores, periods | | | Subnet | 1 | 80 | Alphanumeric, hyphens, underscores, periods | | | NSG | 1 | 80 | Alphanumeric, hyphens, underscores, periods | | | Public IP | 1 | 80 | Alphanumeric, hyphens, underscores, periods | | ## Implementation ### Terraform Variables ```hcl # Naming convention variables variable "cloud_provider" { description = "Cloud provider code" type = string default = "az" } variable "environment" { description = "Environment code (p=prod, d=dev, t=test, s=staging)" type = string default = "p" } variable "region_code" { description = "Azure region code (we=westeurope, ne=northeurope)" type = string default = "we" } variable "project_code" { description = "Project code" type = string default = "dbis" # DeFi Oracle Meta Mainnet } ``` ### Naming Locals ```hcl locals { # Region mapping region_codes = { westeurope = "we" northeurope = "ne" francecentral = "fc" uksouth = "uk" } # Current region code region_code = local.region_codes[var.location] # Naming prefix name_prefix = "${var.cloud_provider}-${var.environment}-${local.region_code}" # Resource names rg_network = "${local.name_prefix}-rg-net-001" rg_compute = "${local.name_prefix}-rg-comp-001" rg_storage = "${local.name_prefix}-rg-stor-001" rg_security = "${local.name_prefix}-rg-sec-001" aks_cluster = "${local.name_prefix}-aks-main" key_vault = "${local.name_prefix}-kv-secrets-001" vnet_main = "${local.name_prefix}-vnet-main" } ``` ## Validation ### Naming Validation Script Use the provided script to validate naming: ```bash ./scripts/azure/validate-naming.sh ``` ### Manual Validation Checklist - [ ] Follows pattern: `{cloud}-{env}-{region}-{resource}-{instance}` - [ ] All segments are lowercase - [ ] Uses hyphens as separators - [ ] Within Azure length limits - [ ] Globally unique if required (storage, Key Vault) - [ ] No special characters except hyphens - [ ] Region code matches actual region ## Migration Guide ### Updating Existing Resources 1. **Review current names**: Identify resources using old naming 2. **Plan migration**: Create new names following convention 3. **Update Terraform**: Modify resource names in code 4. **Apply changes**: Use Terraform to rename (may require destroy/create) 5. **Update references**: Update all scripts and documentation ### Example Migration **Old Name**: `defi-oracle-mainnet-rg` **New Name**: `az-p-we-rg-comp-001` ## Best Practices 1. **Consistency**: Always use the same pattern across all resources 2. **Short Segments**: Keep abbreviations concise but clear 3. **Environment Prefix**: Always include environment code 4. **Region Code**: Include region for multi-region deployments 5. **Sequential Numbers**: Use `001`, `002` for multiple instances 6. **Documentation**: Document any custom abbreviations 7. **Validation**: Validate names before deployment 8. **Tags**: Use tags for additional metadata (don't rely on names alone) ## References - [Azure Naming Conventions](https://docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging) - [Azure Resource Naming Rules](https://docs.microsoft.com/azure/azure-resource-manager/management/resource-name-rules)