azurevnetnetworkingdata-transfercost-optimization

Azure VNet peering cost: the per-GB charge that bills both ways

VNet peering has no hourly fee but charges ~$0.01/GB each direction (more for global). It bills on both sides. Here's where the cost hides in hub-and-spoke and chatty services, and how to cut it.

The C3X Team··6 min read

Quick answer

Azure VNet peering has no hourly or per-peering fee — you pay per GB of data crossing it, ~$0.01/GB each direction (so ~$0.02/GB round trip) for same-region peering, more for global (cross-region). It bills on both sides. The cost shows up with chatty cross-VNet traffic and hub-and-spoke topologies; co-locating coupled services in one VNet avoids it.

VNet peering looks free at first glance — there's no setup fee and no hourly charge — which is exactly why its cost sneaks up on people. The meter is data, billed in both directions, and a busy hub-and-spoke network can move a lot of GB across peerings without anyone watching the line item.

The meter: data, both ways

Peering charges only for traffic that crosses it: ~$0.01/GB outbound from the sending VNet and ~$0.01/GB inbound at the receiving VNet, for same-region peering. So a GB sent across a peering effectively costs ~$0.02 round trip, split across the two sides. Global VNet peering (different regions) is billed at higher per-GB rates.

Where the cost shows up

  • Chatty cross-VNet services. Microservices split across VNets that call each other constantly pay peering on every hop.
  • Hub-and-spoke funnels. Architectures where spoke traffic routes through a hub VNet cross peerings twice — into the hub and out again.
  • Cross-region over global peering. Replication or services spanning regions pay the higher global rate, continuously.

How to reduce it

  1. Co-locate coupled services in the same VNet. Traffic within a VNet isn't charged; splitting tightly-coupled components across VNets converts free traffic into ~$0.02/GB traffic.
  2. Keep chatty flows in-region. Reserve global peering for traffic that genuinely must cross regions.
  3. Design hub-and-spoke deliberately so high-volume flows don't all transit the hub if a direct path exists.

This is Azure's version of the egress trap covered in GCP egress and AWS data transfer — the cost of moving data sideways, not just out.

FAQ

How much does Azure VNet peering cost?

Peering charges for data in both directions: roughly $0.01/GB inbound and $0.01/GB outbound for traffic between peered VNets in the same region — so effectively ~$0.02/GB round trip. Global (cross-region) VNet peering costs more per GB. There's no hourly or per-peering fee; you pay only for data that crosses the peering.

Is VNet peering charged on both sides?

Yes. Both the sending and receiving VNet incur a charge — the sender pays egress and the receiver pays ingress, each around $0.01/GB for same-region peering. A common surprise is forgetting that a chatty service calling across a peering pays at both ends.

Why is my VNet peering bill higher than expected?

Usually a hub-and-spoke topology where lots of traffic crosses peerings, or chatty microservices split across VNets. Every GB between peered VNets bills both ways, so high inter-VNet traffic adds up. Co-locating tightly-coupled services in one VNet avoids the charge entirely.

Does global VNet peering cost more?

Yes. Peering VNets in different regions (global peering) is billed at higher per-GB rates than same-region peering, reflecting cross-region transport. Cross-region replication or chatty services spanning regions over global peering can become a significant line item.

How do I reduce VNet peering costs?

Co-locate tightly-coupled services in the same VNet, keep chatty traffic within a region rather than over global peering, use private endpoints or service endpoints where they avoid peered hops, and design hub-and-spoke so high-volume flows don't all funnel through peerings. Minimizing inter-VNet data is the lever.

How does C3X account for peering cost?

Peering cost is data-driven, so C3X models it from expected inter-VNet GB in c3x-usage.yml and prices the VNets and connected resources, helping you attribute cross-VNet transfer to the architecture that generates it.

What to do next

Peering cost tracks inter-VNet data, so attribute it to the architecture and model the volume. C3X prices your azurerm_virtual_network and connected resources and takes peering volume from c3x-usage.yml, so a chatty cross-VNet design shows its data cost before it ships. The quickstart runs it in minutes.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.