We read the production bill line by line. The database ran in a different virtual network from the application, so every byte between them was charged twice: once leaving one network and again entering the other. That came to 65 TB a month.
- monthly infrastructure bill
- −41%
- saved a year
- $21k
- a month in cross-network database charges, down from $1,280
- $0
- of database traffic a month no longer billed twice
- 65 TB
- Sector
- Consumer wellness app
- Platform
- Azure Kubernetes Service, MongoDB, PostgreSQL, Front Door
- Engagement
- Cloud cost and security review
- Measured
- Azure billing, July against October 2026
Where the money went.
We broke the bill down by resource and by meter, and matched every large line to the resource and the traffic behind it. In July 2026 the subscription cost $4,335. Four lines stood out.
Cross-network traffic: $1,280 a month
The database servers sat in an older virtual network, peered to the cluster’s. Azure bills peered traffic on both sides, so about 65 TB a month was charged once leaving and again arriving. That was almost three times what the database servers themselves cost.
Logs nobody read: $275 a month
One audit log category made up 60% of all log ingestion. No alert, dashboard or saved query used it.
An idle hosting plan: $101 a month
It still ran an old development-mode copy of the identity server.
A staging environment nobody used: $91 a month
61 resources. Every web app was already stopped, but networking and IP addresses still billed.
What we changed.
Database moved next to the application
A new three-node MongoDB replica set inside the cluster’s network, one node per availability zone. The old servers stayed available as a rollback until the new ones were proven. Traffic that used to cross the peering is now internal and free.
Audit logging trimmed, not removed
We switched off the category nobody read and kept the admin audit trail, so every create, update and delete is still recorded.
PostgreSQL right-sized
Moved to a smaller server in the same network as the application.
Dead weight removed
The idle plan was retired once a replacement identity server was validated end to end, and the unused staging environment was deleted.
Found along the way.
The database was open to the internet
The old network rules allowed the database port and two other service ports from anywhere. The new network has no internet rule at all.
A 42-hour gap in backups
The nightly backup job lived on one of the old servers and stopped silently when that server was shut down. We moved it to the new cluster and took a catch-up backup.
Production credentials in development
Development pipelines held production database connection strings. They no longer do.
Infrastructure code that could not be planned
The production Terraform could not produce a plan. It does now, so every infrastructure change can be reviewed before it is applied.
The result.
- July 2026$4,335before
- August 2026$3,656changes made mid-month
- September 2026$2,409
Figures are the client’s actual Azure costs, July 2026 against the October 2026 run-rate. They count infrastructure changes only: the bill fell further after an app release cut CDN traffic, and that saving is not included. One server was upsized for capacity in the same period, and its extra $79 a month is netted off.
Cloud security review
A read-only posture review of your AWS, Azure or Google Cloud accounts: identity, public exposure, encryption, logging and guardrails.
Want numbers like these for your own systems?
contact@araval.in · We reply within one working day.