Explanation
Non-production Azure VMs are frequently left running during off-hours despite being used only during business hours. When these instances remain active overnight or on weekends, they generate unnecessary compute spend. Azure offers built-in auto-shutdown features that allow teams to define daily stop times, retaining disk data and configurations without paying for VM runtime. Implementing scheduled shutdowns in dev/test environments is a simple, low-risk optimization that can reduce compute costs by 30-60%.
Relevant Billing Model
Azure VMs are billed per second, with a minimum of one minute, based on:
- VM size and type
- Operating system and licensing
- Runtime duration
Note: Storage (managed disks) continues to incur charges even when the VM is stopped.
Detection
- Identify VMs labeled or tagged as dev/test/staging
- Use Azure Monitor or Cost Management to assess usage and uptime patterns
- Detect VMs with consistent business-hours usage but 24/7 runtime
- Review VM configuration to check whether auto-shutdown is enabled
Remediation
- Enable Azure's built-in auto-shutdown setting for applicable non-prod VMs
- Alternatively, configure shutdown/start schedules using Azure Automation or Logic Apps
- Preserve state using managed disks, snapshots, or generalized images
- Review schedules periodically to align with changing team usage