AWS has data centers located all over the world. To complicate their pricing further, each region has different prices for certain products. Which region is the cheapest? Which one should you build your network architecture in?
US East Is Usually The Cheapest
Taking a look at this pricing chart from Concurrency Labs, it’s clear that both US East regions, us-east-1 (Northern Virginia) and us-east-2 (Ohio), are priced very low compared to the others.
us-west-2 (Oregon) is also very low, but us-west-1 suffers from Silicon Valley pricing and is much more expensive. Mumbai (India) is also surprisingly quite cheap when compared to the rest of the world.
As for all the other regions, they’re all more expensive than these four. The European regions are generally around 10% more expensive, with Stockholm being the cheapest of them all—only 6% more expensive than the cheapest U.S. regions. The Asia market is about 20-25% more expensive, with Seoul being the cheapest on that side of the world at only 10% more than US East.
Data pricing is a large part of AWS, and something that changes based on region. CloudFront’s pricing page provides a good overview of it:
Data out from CloudFront to North America and Europe is the cheapest and priced the same. For the rest of the world, it’s a bit more expensive, with South America again topping the list. With CloudFront though, you pay for this data anyway as long as you have South American visitors, so there isn’t much you can change about it.
For internal data transfer, most regions are the same. Looking at S3’s pricing, data out from S3 to any region is $0.02 per GB. However, if you’re transferring from us-east-1 to us-east-2 or vice-versa, the charge is only $0.01. This doesn’t apply, however, if you’re transferring within the same region, so it only really matters if you have servers in both Ohio and Northern Virginia.
If you’re picking a region based on pricing alone, Northern Virginia and Ohio should be your first picks on the East coast, with Oregon for the West. Avoid Northern California if you can, as it’s about 20% more expensive.
If you need servers around the world, Stockholm and Seoul are the cheapest options for the European and Asian markets respectively, and you can cover most of the globe with those two points alone.
Whichever region you choose, stick to that region and also always use the same Availability Zone, as there are fees for transferring data across them. Even though they’re part of the same region, Availability Zones are physically separated data centers, and data between them still must travel over the general internet pipes.
Choose Other Regions for Better Latency
With how expensive some of the AWS regions are, the only real reason to choose a more expensive region is if the location matters more than the price.
For example, if you’re a startup working out of Silicon Valley and you really want low latency, you may be okay with paying a 20% premium. For services like Uber that depend on lowest latency possible to major metropolitan areas, paying for location in Northern California is just the cost of doing business.
For many applications though, latency doesn’t matter too much unless your site or service is extremely optimized. Taking a look at this map of AWS’s regions, many places don’t have data centers in their backyard. There’s no us-central region (yet), because more people live closer to the coasts, and the latency isn’t really over 50ms to either coast or Ohio anyway.
If you want to cover most of the world with relatively low latency overall while minimizing costs, you should build your infrastructure in four or five locations:
Ohio, as it’s closer to central United States than Virginia and equidistant from most of the East coast. Virginia would also be a good option here. Oregon to cover the west coast. Stockholm (Sweden) to cover Europe. Seoul (South Korea) to cover the Pacific and Asia region. Mumbai (India) is nearly as cheap as the United States, so having servers here would be a better idea for the South Pacific region compared to Singapore or the Bahrain (Middle East) regions.
Really, if you care a lot about latency, you should use a CDN like AWS’s CloudFront anyway. A CDN caches your website on servers around the world, and serves your site from that cache instead of making the trip to it. This relieves some stress from your primary web servers, and also gives you the benefit of having your network’s edge physically closer to any given user. This speeds up loading times and reduces the time spent in TCP handshakes.
CDNs can’t cache everything though, so for some pages (particularly when a user is signed in and browsing authenticated content), they’ll have to ping your server’s origin to fetch updated content. This is where having servers around the globe really helps with overall latency.
If you have a lot of servers around the globe, you can benefit from DNS-level geographic routing with AWS’s Route 53 DNS service. Route 53 can dynamically route users to the lowest latency endpoint available, so you get the full benefit of having closer origin servers.