Home / Azure

AzureChecklistBeginner

Azure naming, tagging and cost foundation: budgets that warn before the invoice

A naming convention, mandatory tags enforced by policy, budgets with alerts and a monthly cost review routine, so every resource has an owner and spend surprises are caught early.

Deepak Bhardwaj2 min read

Applies toAzure Cost Management, Azure Policy, all subscriptions

1. Naming convention

Pattern: <type>-<workload>-<env>-<region>-<instance>

Resource Example
Resource group rg-payments-prod-cin-001
Virtual machine vm-payapi-prod-cin-01 (Windows names max 15 chars)
Storage account stpaymentsprodcin001 (no dashes, 3–24 lowercase)
Key Vault kv-payments-prod-cin (globally unique, 3–24)
VNet vnet-payments-prod-cin

Use the Cloud Adoption Framework abbreviations and decide region short codes (cin = Central India, sin = South India).

2. Mandatory tags

Tag Example Why
owner payments-team@contoso.com Who to call
costCenter CC-4512 Chargeback
env prod / dr / dev Policy, alerting, shutdown schedules
app payments Grouping
dataClass confidential Security controls
drTier tier1 / tier2 / none Which DR runbook applies

Enforce with policy: Require a tag on resource groups (Deny) and Inherit a tag from the resource group if missing (Modify) for resources.

3. Budgets

az consumption budget create --budget-name payments-prod-monthly --amount 5000 \
  --category cost --time-grain monthly \
  --start-date 2026-11-01 --end-date 2027-10-31 \
  --resource-group rg-payments-prod-cin-001

Add notifications at 50%, 80% and 100% forecasted and actual spend (portal or API). Forecast alerts give days of warning instead of hours.

4. Quick savings checks (monthly)

  • Unattached managed disks and orphaned public IPs
  • VMs stopped but not deallocated (still billed for compute)
  • Azure Advisor cost recommendations reviewed
  • Dev/test VMs with auto-shutdown
  • Reservations / savings plans coverage for steady workloads
  • Log Analytics ingestion by table (Usage table) for noisy sources
az disk list --query "[?diskState=='Unattached'].{name:name, rg:resourceGroup, sizeGb:diskSizeGb}" -o table
az network public-ip list --query "[?ipConfiguration==null].{name:name, rg:resourceGroup}" -o table

5. DR cost visibility

Tag DR resources with env=dr so the customer can see what standby capacity costs. It makes the RTO/RPO conversation concrete: warm standby costs more than backup-and-restore, and the tags show by how much.