Quick Links

S3 is Amazon's primary storage service for hosting media files and other large objects. Like most AWS services, the pricing model is quite complicated, so we're here to explain how it works.

The exact prices of AWS services may vary by region, and may change over time. The prices in this article are for 

        us-east-1
    

 (Northern Virginia), which is the cheapest AWS region. We'll link to the pricing resources, so you can check for yourself if the prices are different for your region.

S3 Has Multiple Tiers

The first thing to note about S3 is that it has multiple different tiers of storage, each with their own perks.

There's the Standard storage tier, which is the default for most items uploaded into buckets. This tier costs $0.023 per GB, or about $23 per TB. It's cheap compared to EBS, the most expensive of the S3 tiers. However, it has the benefit of being very fast and having low read costs. For example, if you had media files in S3 Standard Tier being served by CloudFront, you would pay $0.0007 per GB ($0.70 per TB) to read from S3 for every request. This is extremely minimal compared to the $0.085 per GB ($85 per TB) that you will also have to pay for CloudFront data out to the Internet, and even less when you consider that CloudFront can cache your content anyway.

For most use cases, AWS claims that 80% of objects in buckets are rarely accessed frequently. For that, they created the S3 Infrequent Access Tier (IA). This tier costs only $0.0125 per GB ($12 per TB), an 83% cost savings over the Standard Tier. Infrequent Access is just as fast and available as Standard Tier storage. However, the cost savings are offset by making the read costs 13 times higher---$0.01 per GB ($10 per TB). You obviously only want to use this for objects that aren't accessed very often.

To automate this process, S3 provides the Intelligent Tiering storage class, which automatically move data from Infrequent Access and Standard Access tiers as usage changes. All you have to do to enable it is upload objects under the "Intelligent Tiering" class, and that object will be monitored. There's a small fee for it---$0.0025 per 1,000 objects---but because Intelligent Tiering will save you a lot of money anyway, the fee is mostly negligible.

Use S3 Glacier for Archival

glacier hero image

AWS has two more tiers that are cheaper than IA, but come with a heavy downside for retrieving data. These tiers shouldn't be used for user-facing content, but if you have a need to store large amounts of files, S3 Glacier can be used to cut costs.

Glacier costs only $0.004 per GB ($4 per TB), which is three times cheaper than IA. It makes it an effective service for storing large amounts of data. However, accessing that data is much harder and much more expensive.

If you need data retrieved as fast as possible, you can use Expedited Retrieval, which is very expensive but returns data in about 1-5 minutes.

If it's not that urgent, you can use Standard Retrieval, which takes about 5-12 hours and isn't much more expensive than general IA. And, if you can really wait, Bulk Retrieval is four times cheaper, but it takes around 12-48 hours. The prices are as follows:

  • $0.01 per GB of Standard Retrieval Data, plus $0.05 per 1,000 requests
  • $0.03 per GB of Expedited Retrieval Data, plus $10.00 per 1,000 requests
  • $0.0025 per GB of Bulk Retrieval Data, plus $0.025 per 1,000 requests

Glacier also has a second tier, called Glacier Deep Archive, which is intended for data that is rarely, if ever, accessed in a given year. It's the cheapest storage price you'll find on AWS, $0.00099 per GB ($1 per TB). However, there's no Expedited Retrieval option and standard retrieval costs twice as much:

  • $0.02 per GB of Standard Retrieval Data, plus $0.10 per 1,000 requests
  • $0.0025 per GB of Bulk Retrieval Data, plus $0.025 per 1,000 requests

However, the bulk retrieval price is the same as Glacier, so if you know you'll be able to wait a few hours for retrieval, you can use Deep Archive instead.

Additional Costs

S3 has a replication feature that enables you to store copies of your data in different regions. It's only useful for reducing latency to access data without relying on a CloudFront cache, because S3 is already effectively 100% durable, as it's replicated across three physically separated data centers. But if you're paranoid and want to be prepared for the giant asteroid scenario, you can use it as an extra safeguard for important data. You're charged for each copy; e.g., enabling replication across two regions would double your storage costs.

You'll also be charged for data transfer out of S3, just like any AWS service. If you're transferring out to the internet (e.g., linking to an item in a bucket directly), you'll be charged $0.09 per GB, a touch above CloudFront pricing. If you're transferring data between AWS regions, you'll be charged $0.02 per GB, unless you're transferring to

        us-east-1
    

, in which case it will only be $0.01 per GB.

Note, there's no charge for transferring data from S3 to CloudFront---you'll still be charged for CloudFront data out, but you won't be charged twice.

You're also charged a small amount for different requests, such as PUT, POST, and GET, and changing the storage classes of different objects. These are all fairly low, and are likely here to prevent abuse. Unless you're making millions of requests, these probably won't even show up on your bill.


All in all, S3 costs:

  • $0.023 per GB stored in Standard Tier
  • $0.0007 per GB of data read from Standard Tier
  • $0.0125 per GB stored in Infrequent Access Tier
  • $0.01 per GB of data read from Infrequent Access Tier
  • $0.004 per GB stored in Glacier
  • $0.01 per GB of Standard Retrieval Data, plus $0.05 per 1,000 requests
  • $0.03 per GB of Expedited Retrieval Data, plus $10.00 per 1,000 requests
  •  $0.0025 per GB of Bulk Retrieval Data, plus $0.025 per 1,000 requests
  • $0.00099 per GB stored in Glacier Deep Archive
  • $0.02 per GB of Standard Retrieval Data, plus $0.10 per 1,000 requests
  • $0.0025 per GB of Bulk Retrieval Data, plus $0.025 per 1,000 requests
  • $0.09 per GB of data transferred out to the Internet
  • $0.02 per GB of data transferred into most AWS regions
  • Discounted to $0.01 per GB if transferring into 
            us-east-1
        
     (Northern Virginia)
  • Data transfer to CloudWatch is free, but you're still charged for the read costs based on the tier.