Data transfer is priced per network boundary crossed, not per application: bytes that leave a region for the internet, cross regions or availability zones, or pass through a gateway each produce a line item with its own price per gigabyte, while inbound traffic is almost always free. The same bytes therefore cost nothing, a cent or several times that depending on their path, and the path is decided in the architecture, not in the code.

How it works

All three providers meter traffic at the same boundaries: out of the region to the internet (egress), between two regions, between two availability zones of one region, through a gateway or private endpoint, and to a CDN. Inbound traffic from the internet is free everywhere, as is traffic inside one zone over private addresses; everything else carries a price, and the providers differ in what they charge and how they tier it.

AWS

Internet egress is tiered by monthly volume across all services; the first 100 GB per month are free, once per account across all regions, not per region. Transfer between regions is charged to the source region; arrival in the destination region is free. Inside a region AWS charges traffic between availability zones in both directions, while traffic between EC2 and S3 in the same region is free. A NAT gateway costs per hour and per gigabyte processed, with data transfer on top. Interface endpoints (PrivateLink) cost per hour and zone plus per gigabyte processed; gateway endpoints for S3 and DynamoDB cost nothing. In the Cost and Usage Report the charges are usage types with a region prefix: USE2-DataTransfer-Out-Bytes for internet egress from Ohio, USE2-DataTransfer-Regional-Bytes for traffic between zones (one line per direction), USE2-APS3-AWS-Out-Bytes for transfer to another region, the only line of that pair with a price; no prefix means US East (N. Virginia).

Azure

Microsoft bills internet egress as bandwidth, tiered by monthly volume and by zone, a billing grouping of regions; North America and Europe form Zone 1. The first 100 GB per month are free, and routing over transit ISPs instead of the Microsoft network has its own, lower tier. Transfer between regions is priced per gigabyte by whether source and destination share a continent. For availability zones Microsoft documents today that transfer between zones of the same region is not charged, with private or public addressing; the pricing page itself names only transfer within one zone explicitly as free. VPN Gateway and ExpressRoute carry their own hourly and data charges, ExpressRoute metered per gigabyte or unlimited for a fixed monthly fee. Azure Front Door and Azure CDN are separate meters: origin to edge is free, edge to user follows the CDN service's own tiers. In cost details, transfer is identified by MeterCategory, MeterRegion and MeterName, which name the kind of transfer and its region.

Google Cloud

Google offers two network service tiers: Premium Tier, the default, carries traffic over Google's own network until close to the user; Standard Tier hands over to the public internet earlier, costs less and serves regional resources only. Premium Tier internet egress is tiered by destination and volume, Standard Tier by source region, with 200 GiB per month free on Standard Tier per billing account across all regions. Transfer between regions is priced per GiB by continent pair. Inside a region, traffic between zones is charged over internal and external addresses alike, while traffic inside one zone over internal addresses is free; traffic over external IPv4 addresses always leaves the zone. Cloud NAT costs per hour, scaled by the VMs behind the gateway up to a cap, plus per GiB processed, with egress on top. In the billing export each transfer line carries its sku.description and location.region.

Switching has its own rules: AWS and Google Cloud grant free transfer out to the internet on request, within a documented window, when a customer moves all data off a service; Microsoft documents free egress for customers leaving Azure and at-cost transfer for organisations billed in the EEA, EFTA or the United Kingdom that run several providers in parallel. The planning side is covered in EU Data Act: plan cloud switching costs before 2027.

What it means for your cost

The path sets the price, not the application. A backend reading objects from a bucket pays nothing through a gateway endpoint in the same region, the NAT price per gigabyte through a NAT gateway, and internet egress if the bucket sits in another region behind public addresses. Same bytes, three prices.

In billing data, transfer sits on its own line with its own usage type, meter or SKU, never with the service that caused it and often without a resource ID: AWS leaves line_item_resource_id empty for data transfer, and Azure bills network bandwidth as a charge of its own, priced on the bandwidth pricing page rather than with the service that moved the data. A cost report by service therefore shows networking as a separate block; only the split by usage type and region says which boundary costs the money. Tags help little, because the transfer line hangs on the path, not on the tagged resource.

The lever is architecture: zones, regions, endpoints and CDN. Whether replicas sit in one zone or across three, whether a service is reached through a private endpoint or NAT, whether users are served from the cache or the origin, whether a second region is needed at all: each decision sets the price per gigabyte, and no discount replaces it afterwards.

Where it goes wrong

  • Cross-zone chatter from a database replica. Symptom: DataTransfer-Regional-Bytes or the inter-zone SKU grows with load, not with users. Cause: primary and replica sit in different zones, and AWS and Google charge each direction.
  • NAT gateway for S3 traffic. Symptom: the NAT line per gigabyte exceeds the bucket's storage cost. Cause: private subnets reach S3 through the NAT gateway instead of a gateway endpoint, which costs nothing.
  • Inter-region replication nobody budgeted. Symptom: AWS-Out-Bytes or an inter-region meter appears for the first time. Cause: bucket replication, a backup target or a database replica in a second region was switched on and its price per gigabyte entered no budget.
  • The free allowance counted per region. Symptom: egress charges despite "100 GB free" in every region. Cause: AWS counts the allowance once per account across all regions; Azure grants it across all regions, Google's 200 GiB of Standard Tier likewise.
  • A CDN without caching. Symptom: the CDN line grows in step with origin egress instead of replacing it. Cause: missing cache headers or responses marked uncacheable, so each request reaches the origin and both layers bill.
  • Ingress billed at the other end. Symptom: a "free" data import still shows up on an invoice. Cause: inbound is free for the receiver, but the source, another account, region or provider, pays the egress.

Example

List prices in USD, read on 2026-10-15: AWS NAT gateway in US East (Ohio) USD 0.045 per hour plus USD 0.045 per GB processed; Azure internet egress from Europe (Zone 1) over the Microsoft network USD 0.087 per GB for the 10 TB after the free 100 GB per month; Google Cloud traffic between two zones of one region USD 0.01 per GiB.

Sources

Read on 2026-10-15. Amazon EC2 On-Demand pricing, data transfer section, Amazon VPC pricing, AWS PrivateLink pricing, Understanding data transfer charges in the Cost and Usage Report, Line item columns, Free data transfer out to internet when moving out of AWS, Azure bandwidth pricing, ExpressRoute pricing, VPN Gateway pricing, Azure availability zones, Azure data transfer fees in Europe, Cancel your Azure subscription, Understand usage details fields, Plan and manage costs for Azure Blob Storage, Google Cloud network pricing, Cloud NAT pricing, Google Cloud exit free data transfer.