The numbers
GCP egress to internet: $0.12/GB. AWS egress to internet: $0.09/GB. Cross-region within the same cloud: $0.02-$0.05/GB. Cross-cloud (GCP → AWS or vice versa): $0.09-$0.12/GB.
Within-region intra-VPC: free.
These look small per GB. They aren’t small at scale.
The math that breaks plans
A customer ships 100 GB/day of logs to a SIEM that lives in a different cloud. That’s 3 TB/month of egress. At $0.10/GB, $300/month. Manageable.
A customer pipes their data warehouse exports to a partner analytics system in another cloud. 50 TB/month. $5,000/month. Significant.
A customer’s LLM pipeline calls Bedrock from GKE (cross-cloud). Per request: maybe 4 KB prompt + 1 KB response → 5 KB egress. 10M requests/day: 50 GB/day → 1.5 TB/month → $150/month.
Add up the line items and a “multi-cloud for resilience” architecture becomes “multi-cloud at $20K/month for egress alone.”
What the slides don’t tell you
The cloud-arbitrage pitch: “Use the best service from each cloud. AWS for compute, BigQuery for analytics, Azure for AI.”
Reality: every join between data in different clouds costs egress. The data warehouse query that joins AWS logs against BigQuery customer data either egresses the logs to GCP or egresses the customer data to AWS. Either way, billed per GB.
For a serious multi-cloud architecture, model the egress in the design. Diagram every data movement; annotate the volume; multiply by the rate. Add it to the TCO. The “best from each cloud” pitch usually loses to “consolidate in one cloud” once egress is in the model.
When multi-cloud still wins
Three cases where the egress cost is acceptable:
- Regulatory diversity. Different regions / countries require different data residency. Multi-cloud isn’t a choice; it’s a constraint. The egress is in the cost of doing business.
- Provider-specific service value. BigQuery’s analytics differ from Athena and Synapse in ways that matter for a specific workload. The egress to get data into BigQuery is justified by what BigQuery does that the others don’t.
- Resilience against provider outage. A multi-cloud failover that the business genuinely needs. Validate “genuinely” — most teams who think they need this don’t.
Mitigations
When you do have cross-cloud data movement:
- Compress before transmit. Egress is billed on uncompressed bytes. A 5× compression ratio cuts the bill 5×.
- Aggregate at source. Don’t send raw events; send hourly summaries. Per-byte cost dominates per-event count.
- Use private interconnect for sustained flows. AWS Direct Connect, GCP Interconnect, Azure ExpressRoute. Flat-rate pricing for committed volumes; cheaper than egress beyond a few TB/month.
- Reverse-direction. If service A in cloud A is calling service B in cloud B 10× more than the reverse, consider moving B to cloud A. The direction of dependency drives the egress direction.
What I’ve seen go wrong
For one client, a multi-cloud data lake architecture looked great on the design doc. In production, egress costs hit ~$45K/month within six months. The fix was a partial consolidation — the high-volume joins moved into one cloud; cross-cloud was reserved for low-volume final outputs.
The lesson: model egress in design. The bill is the first thing that gets noticed; the architecture is the slowest to change. Get it right at design time.