Since publishing this post, AWS reached out to us about the RR pricing. See bottom of the post for the update.
When storing data in S3, at some point everyone asks the question about storage classes. At first glance it looks more or less simple - if you’re accessing your data less often, or it’s not very important, you can pay less. Until you look into details, find all the asterisks and compare the actual numbers.
Let’s start from the beginning: when storing data in S3 you pay for two things: how much data you store and how much data you transfer out of S3 (transfer into S3 is free). Data transfer cost varies depending on where your transfer the data to (the same region, other region, etc.), but you don’t have much impact on those numbers directly. What you have impact on is the cost of actual storage - by choosing a storage class for your data.
There are 4 storage classes for data in S3:
- Standard - Infrequent access
- Reduced redundancy
Standard class is the default way of storing data in S3 - you get the best durability, availability and quickest access to your data. Because of that, it’s supposed to be the most expensive one.
Standard - Infrequent access is a kind of backup option. You can store data for less, but you pay more if you want to access this data.
Reduced redundancy is advertised by AWS as a cheaper option than Standard, for files that you want to be able to access often and quickly (like Standard), but you don’t really care all that much about their durability - so if they get “lost”, you can reproduce them easily and it won’t have much impact on your business.
Glacier - is simply a “gateway” into Glacier product, for backups. Things that you need to have, but you never really access them. You pay pennies for storage, but more for access, depending on how quickly you want to get the data back.
From the descriptions above, you should be able to easily choose which storage class to use for your data in order to decrease the costs, right? Well, no. Like everything in AWS, asterisks are all over the place.
AWS forgot to reduce the price on Reduced redundancy class
At least I hope they forgot. With the latest price reduction in November, S3 Standard class became cheaper. But Reduced redundancy did not. In fact, Reduced redundancy is now more expensive than Standard class, which kind of defeats the whole point of its existence.
The comparison is simple, but you have to take into account that Standard has now less “tiers” than RR. Also, AWS places the RR pricing on a different page than all other classes, so there’s no simple table where you can see all the numbers. So here’s such a table, based on Ireland region (the amounts are very similar in other regions, and RR is always more pricey than Standard), prices per 1GB:
|Amount of data||Standard class||Reduced Redundancy|
|First 1 TB / month||$0.0230||$0.0240|
|Next 49 TB / montn||$0.0230||$0.0236|
|Next 450 TB / month||$0.0220||$0.0232|
|Next 500 TB / month||$0.0210||$0.0228|
|Next 4000 TB / month||$0.0210||$0.0224|
|Over 5000 TB / month||$0.0210||$0.0220|
If you think this may just be a typo on the pricing pages, there’s a snapshot from a bill for November: Standard class:
Infrequent access has minimum object size and storage duration
When storing data under Infrequent access class, there’s a minimum object size requirement that’s applied for billing: 128KB. That means that whatever size is your file, you always pay for at least 128KB of storage per file. So if you store 100 files with 1KB each (=100KB of storage), you’ll actually pay for storing 100 files with 128KB each (=12 800KB of storage).
Also, there’s a minimal storage duration of 30 days for all objects - means you always pay for at least 30 days of storage for each file. Even if you delete the files after 10 days, you’ll still pay for 30 days.
That’s why infrequent access should be thought of more as a backup alternative (since backups are usually quite large and stored for long periods of time), rather than “storage for all files we don’t access all that often”. That’s something you have to be aware of when comparing the costs and making the decision.
In case you’re wondering, for Glacier the minimal storage duration is 90 days. There used to be a minimal object size as well, but it’s no longer listed on the pricing pages.
Update from AWS
Since this post was published, AWS support team reached out to me and advised that the Reduced Redundancy class is being phased out, that’s why they’re trying to deter people from using it by having a higher price. The advice is to use Standard class or Infrequent Access/Glacier where needed.
I advised them that this information should be published on the S3 product page (or RR class page), since I’m sure many people are still putting new objects into RR without consulting the pricing page.
Full update from AWS:
I reached out to the S3 team to make sure the pricing was up to date. The team explained the pricing, S3’s goal is to eventually deprecate the RRS storage class, hence Standard currently being cheaper ($0.023 vs $0.024). We advise to switch any data under the RRS storage class to either Standard or one of the archive classes.