AWS has many services for storing data, enough to fit most use cases, all of which have different pricing models. We’ll explain each one, what you would use them for, and how much they’ll cost you.
Before we dive in, it should be noted that exact prices for each tier may be slightly different depending on the region you’re in. This guide was written for us-east-1 (Northern Virginia), which is the biggest (and therefore cheapest) AWS region. We’ll link to the pricing resources for each service, so you can check if it’s different for your region.
S3—$0.023 per GB, General Storage
S3 is 99.999999999% durable, which is an absurdly dumb number conceived by their marketing department as a fancy way of saying your data is replicated and stored in very durable RAID arrays. In the event of an (inevitable) drive failure, the array can be rebuilt quickly and given a new drive. Your data is effectively 100% safe in S3, with exceptions given to simultaneous data center fires and giant meteors. Really, the most likely way your data gets deleted will be user error, or a billing problem that leads to account deletion.
S3 buckets can be massive, so they’re an extremely scalable solution for storing lots of objects. For example, if your application enables users to upload photos, storing them in S3 is a much better option than using standard EBS storage that EC2 runs on. You can serve S3 content using AWS’s CloudFront CDN, making it ideal for media storage. You may also want to automatically compress uploaded images or videos using Lambda first, to save storage space.
S3’s standard tier costs $0.023 per GB, making it fairly cheap compared to EBS and EFS. If you store more than 50 TB per month, the next 450 TB will be charged at $0.022, saving you a dollar per TB. Anything over 500 TB is charged at $0.021, saving another dollar per TB.
S3 also charges for use as well. Reading data is charged at $0.70 per TB, and data transferred out of S3 to the internet is charged with the standard $0.09 per GB. If you’re just transferring within AWS, that cost is $0.02 per GB, and is discounted to $0.01 per GB if you’re transferring data to us-east-1 (Northern Virginia).
Tiered Storage Saves Money
S3 is a tiered storage system; certain objects in your bucket can be marked as “infrequent access,” and will cost only $0.0125 per GB to store, an 83% cost savings over standard storage. However, to offset this savings, data read from infrequent storage costs 13 times more than standard storage, at $10 per TB. It’s intended to be used for, well, infrequently accessed data.
S3 has a service called “Intelligent Tiering” that will automatically move your objects between tiers. This can save you a lot of money if you have many objects that aren’t being accessed that much. Intelligent tiering is a paid service, costing $0.0025 per 1,000 objects monitored by the service per month. However, if you’ve got a large bucket, you’ll likely be saving a lot with it on, so the cost is negligible.
Additionally, S3 has a separate feature called Glacier, intended for long-term archival, discussed below.
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. 0100 per GB of data read from Infrequent Access Tier $0. 09 per GB of data transferred out to the Internet $0. 02 per GB of data transferred out to most AWS regions Discounted to $0. 01 per GB if transferring to us-east-1 (Northern Virginia)
S3 Glacier—$0.004 per GB, Archival with Slow Retrievals
$0. 0007 per GB of data read from Standard Tier
$0. 0100 per GB of data read from Infrequent Access Tier
Discounted to $0. 01 per GB if transferring to us-east-1 (Northern Virginia)
Glacier is a subset of S3, intended for archiving data for long-term storage. It costs only $0.004 per GB, which is over twice as cheap as S3 Infrequent Access. However, the cost savings come with a catch. Retrieving data is slow, taking multiple hours unless you’re willing to pay extra to speed up the process.
If you really need your data quickly, you can use Expedited Retrieval, which returns data in only a few minutes for a hefty fee. This is the fastest option, which makes it clear what Glacier is used for—you can’t serve user-facing content from it (unless you’re AOL).
If it’s not as urgent, you can use Standard Retrieval, which returns data in 5-12 hours. If you’re retrieving a lot of data, don’t care when it’s retrieved, and just want the cost to be as low as possible, you can use Bulk Retrieval, which takes 12-48 hours.
The costs for each retrieval tier are:
$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
Additionally, if you really need to speed up the process of Expedited Retrieval, you can provision capacity at $110.00 per “Provisioned Capacity Unit.”
Glacier also has a second tier called Glacier Deep Archive. This tier is intended for data that is rarely accessed in a given year. Like S3’s Infrequent Access, it comes with a cost savings per GB stored, but an increase in retrieval costs. Deep Archive costs $0.00099 per GB, the cheapest of any AWS service, and the retrieval costs are:
$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
You’re also charged for inputing data into Glacier, at a rate of $0.05 per 1,000 requests for both Glacier and Deep Archive.
EBS—$0.100 per GB, for Use as a Boot Volume
EBS is the backbone of EC2. It’s primarily used as the boot volume for EC2 instances. Because you’re not supposed to be storing a lot of data this way, EBS costs a lot more than S3. The price comes in at $0.100 per GB for the general purpose tier, over four times more than S3, and eight times more than S3 Infrequent Access.
It’s clear you’re not supposed to use this for storing a lot of media, but it won’t kill your wallet to run a simple database on EC2.
EBS has a few different types, which change the type of disk attached to the instance, and have different costs:
General Purpose SSD (gp2)—$0. 100 per GB. The default for all new instances. Nothing special about it, just general SSD storage. Provisioned IOPS SSD (io1)—$0. 125 per GB. If you need very fast NVME storage, io1 is an option. It costs a bit more than gp2 per GB, but you must also pay to reserve the fast connection. This is dependant on the speed you provision, at a rate of “$0. 065 per provisioned IOPS” per month. Throughput Optimized HDD (st1)—$0. 045 per GB. Standard hard drive storage. The speed of these is static: 250 MB/s for a 1 TB volume, up to 500 MB/s for a 2 TB volume. Cold HDD (sc1)—$0. 025 per GB. A slower hard drive option. Static speed at 80 MB/s per TB, up to 250
For both hard drive volumes, there’s a minimum size of 500 GB. All of the EBS volume types have a maximum size of 16 TB, though you can attach additional volumes to each instance past the boot volume, each of which are charged at the same rate. If a volume isn’t attached to a running instance, you’re still charged for data stored on it.
The speed of gp2 and io1 is way more complicated than we have space for here, but if you’d like to learn more, you can read our guide to how it works.
Additionally, EBS volumes can be backed up as snapshots to S3. This feature is charged at $0.05 per GB, more than standard S3 would usually cost.
EFS—per GB, A NAS for Your EC2 Instances
EFS is a special service. It enables you to have a block-level volume like EBS, but attaches it to multiple instances and access it from other services. In a sense, it’s like a fusion between S3 and EBS; you’re storing a whole filesystem, not just objects, but it’s highly available and accessible from everywhere. It’s very similar to having a NAS for your AWS account.
EFS is pricier than EBS, at $0.30 per GB. There is an Infrequent Access tier though, which only costs 10 times less at $0.025 per GB, plus $0.01 per GB of requested data. This pricing model prioritizes Infrequent Access, so you should definitely enable it for your EFS volume.
AWS states that 80% of customer data is in Infrequent Access, which puts the effective price at $0.08 per GB, cheaper than gp2, though your mileage will certainly vary.