AWS Data Transfer: a simple guide to understanding and monitoring those fees
Master AWS Data Transfer fees with our guide on understanding and monitoring those costs.
Welcome to our deep dive into AWS Data Transfer fees! Think of this as your all-access guide to understanding the often puzzling world of data movement within AWS. In two digestible parts, we'll unpack everything from the basics of data transfer charges to how you can smartly monitor and manage these costs without losing your mind—or blowing your budget. We tried to remain as simple as we could, but it’s not an easy task!
Part 1 - Decoding AWS Data Transfer fees: understanding costs and labels
What do we mean by AWS Data Transfer fees?
AWS data transfer fees refer to the fees associated with moving data within and between AWS services, as well as in and out of the AWS infrastructure. These costs are based on the volume of data transferred and the journey—either to or from an AWS resource.
Double Charging for Data: The Egress and Ingress Costs
To simplify, you pay for each byte entering one of your resources (ingress) and each byte leaving one of your resources (egress). Thus, if a byte moves from your resource A to your resource B, you incur costs twice: the egress fee as the byte departs A, and the ingress fee as the same byte enters B.
Ok, assessing the total costs shouldn’t be too complicated, right? I just need to count my bytes leaving my resources and bytes entering in my resources. Indeed, that would be ideal…
But now, let's tackle why this topic is so complicated: the pricing of each byte.
From complexity to complexity: how to price the transfer of one byte
Let's consider our byte as a truck and our resources as warehouses. What would the cost be to transport the truck from warehouse A to warehouse B? It depends on the distance between them, of course. This analogy applies to our bytes—the farther your resources are from each other, the more you'll pay. What complicates matters is assessing the "distance" between two resources in AWS or with internet, which involves several factors.
Basically, there are 3 “types” of locations in AWS:
- Availability Zone (AZ)
- Regions
- The internet
And here are the rules:
- if you transfer one byte within the same AZ, you pay 0
- if you transfer one byte between two AZs within the same region, you incur a cost, but it is not significant.
- if you transfer one byte between two regions, you pay
- if you transfer one byte to the internet, you pay
- if you receive one byte from the internet, it's free because the byte is then stuck in one of your resources, and moving it around will incur additional costs
(actually, it’s a little bit more complicated than that as there are exceptions for certain services like Cloudfront.. but let’s try to remain “simple”, for now).
Now let’s discuss AWS nomenclature.
When you delve into these costs, whether through AWS Cost Explorer, the CUR, or a third-party solution, you encounter AWS's specific nomenclature for these costs. Here’s a breakdown to help you understand what appears in your monitoring tool:
1 - Transfer within the same region but different AZs
Here, no distinction is made between ingress and egress fees.
Region
-DataTransfer-Regional-Bytes
For example, if you transfer bytes from one AZ to another within the EU-West-3 region, the cost will be labeled 'EUW3-DataTransfer-Regional-Bytes’.
2 - Transfer between two regions
Here, there are two distinct labels: one for ingress and one for egress.
- Ingress:
SourceRegion
-
DestinationRegion
-DataTransfer-AWS-IN-Bytes
- Egress:
SourceRegion
-
DestinationRegion
-DataTransfer-AWS-OUT-Bytes
Let's consider another example. Let’s imagine you have one byte leaving eu-west-3 and entering in eu-central-1. Basically, you will see two costs:
- EUW3-EUC1-DataTransfer-AWS-IN-Bytes for when the byte is entering in eu-central-1
- EUW3-EUC1-DataTransfer-AWS-OUT-Bytes for when the byte is leaving eu-west-3
3 - Transfer with the internet
Although the cost is typically zero, there is still a specific nomenclature for traffic from the internet to your cloud infrastructure: SourceRegion
-AWS-IN-Bytes
However, you'll likely want to monitor the traffic leaving your infrastructure to the internet, labeled as SourceRegion
-AWS-OUT-Bytes
To sum up, AWS Data Transfer fees are calculated based on the sum of bytes entering and leaving your resources, each priced according to its source and destination. Ok it’s not that complicated in the end.
Additional data transfer fees
Unfortunately, it’s not that simple - there are many services where the distance & the price per byte differs. It would be too long to list all of them here, but you can find the exhaustive list in this page page. Most common source of fees here are Cloudfront, Transit Gateway or NAT Gateway.
Overall, if there is a line in your CUR or cost explorer labelled Something-Bytes
, it means it’s a AWS Data Transfer fee.
I’m sorry, it’s not a mistake .. there’s really even more about AWS Data Transfer.
The never ending complexity
I lied previously - data transfer fees are not only made with bytes moving around. Sometimes, it’s a pricing per hours. There are two exceptions here.
NAT Gateway
Pricing per GB processed (labelled Region
-NatGateway-Bytes
or NatGateway-Bytes
) & per hour (labelled Region
-NatGateway-Hours
or NatGateway-Hours
)
Transit Gateway
Pricing per GB processed (labelled Region
-TransitGateway-Bytes
) & per hour per VPC attached (labelled Region
-TransitGateway-Hours
)
Now that we have a clearer understanding of where these data transfer fees come from and how they're categorized, you might be wondering how to apply this knowledge practically. How do we actually see and manage these costs effectively? Let's dive into that next.
Part 2 - Unveiling real costs: tracking data transfer fees
Using AWS Cost Explorer
I'm not going to lie—monitoring AWS Data Transfer costs isn't straightforward, and there are even traps.
You might have seen when you group by service a cost labelled “AWS Data Transfer”. Sounds great right? Firstly, it cannot be used as a filter, and more importantly, not all AWS Data Transfer fees are included under this service.
Indeed, there are data transfer fees nested in other services (e.g. in EC2-Other, you will have some part of the data transfer fees).
So how do you track those fees with AWS Cost Explorer? The simplest method is to group and filter by 'Usage Type,' as demonstrated in the video below:
And the output? A straightforward, easy-to-read table…
There are many limitations with AWS Cost Explorer:
- you cannot group by 2 dimensions (e.g. group by service then usage type). This is a major issue as it prevents easy tracking of the service or resource responsible for high AWS Data Transfer fees.
- you cannot filter easily on AWS Data Transfer fee
- you cannot create custom report for each potential source of data transfer fee
- They show you ALL costs, even those which are 0$
But don't worry, we have a solution for you—Tailwarden easily overcomes these limitations. Tailwarden is a cloud management platform allowing you to take back the control of your cloud infrastructure.
With Tailwarden, you can delve deeply into AWS Data Transfer fees and identify which services or resources are driving those costs. An example of dashboard you can create to monitor AWS Data Transfer fees:
There are many ways to deep dive into AWS Data Transfer fees with Tailwarden, here are a few examples:
Track total AWS Data transfer costs
Track most expensive services (or resources) incuring AWS Data Transfer fees
You can find additional examples here.
Conclusion
Now that we've unraveled the mystery of AWS Data Transfer fees and explored tools like AWS Cost Explorer, it's clear that staying on top of these costs doesn't have to be a Herculean task. Enter Tailwarden, your secret weapon for taming the wild world of cloud expenses. With Tailwarden's intuitive platform, you can not only track but also strategize around these costs, ensuring your cloud infrastructure remains both powerful and cost-effective.