AWS charges you based on what you actually use, with no upfront contracts required. But the specifics vary widely by service type, and understanding the pricing layers can save you hundreds or thousands of dollars a month. The core principle is simple: you pay for compute by the hour, storage by the gigabyte, and data transfer by the gigabyte. Beyond that, AWS offers discounts for committing to longer terms or using higher volumes.
The Three Pricing Principles
Every AWS service builds on three basic ideas that determine what you’ll pay.
Pay as you go. You launch a resource, you start paying. You shut it down, you stop. For compute services like EC2 (virtual servers), you’re billed by the hour or by the second. For storage and data transfer, you pay per gigabyte. There are no minimum commitments and no long-term contracts unless you choose one.
Pay less when you reserve. If you know you’ll need a server running for a year or more, you can commit to reserved capacity and get discounts of up to 60% compared to the standard on-demand rate. The trade-off is straightforward: you’re locking in usage in exchange for a lower price.
Pay less per unit as you use more. Storage and data transfer use tiered pricing, meaning the per-gigabyte cost drops as your volume increases. For compute, reserving more capacity can unlock volume discounts of up to 10%.
How Compute Pricing Works
Compute is usually the biggest line item on an AWS bill. EC2, the core virtual server service, offers several ways to pay for the same underlying hardware.
On-Demand Instances are the default. You pick a server size, launch it, and pay by the hour (or by the second for Linux instances). No commitment, no discount. This is what you use for unpredictable workloads or short-term projects.
Reserved Instances lock you into a specific instance type at a discounted rate for one or three years. You’re committing to use a particular server configuration at a set price for the entire term. This works well when you know exactly what you’ll need, like a database server that runs around the clock.
Savings Plans offer a more flexible alternative to Reserved Instances. Instead of committing to a specific instance type, you commit to spending a certain dollar amount per hour over one or three years. If your needs change and you switch to a different instance type or even a different compute service, the discount still applies as long as you’re spending at or above your committed amount. For most users, Savings Plans are easier to manage than Reserved Instances because they don’t tie you to one exact configuration.
Spot Instances let you bid on unused EC2 capacity at steep discounts, often 60% to 90% off the on-demand price. The catch is that AWS can reclaim these instances with short notice when demand rises. They’re ideal for batch processing, data analysis, or any workload that can tolerate interruptions.
How Storage Pricing Works
Amazon S3, the main storage service, charges based on three factors: how much data you store, how often you access it, and which storage class you choose. Picking the right class for your access pattern is the single biggest lever for controlling storage costs.
S3 Standard is designed for data you access frequently. It has no retrieval fees, so you pay only for the amount stored and the requests you make. This is the default for most active applications.
S3 Intelligent-Tiering automatically moves your data between access tiers based on usage patterns. It also charges no retrieval fees. If you’re unsure how often your data will be accessed, this class handles the optimization for you in exchange for a small monthly monitoring fee per object.
S3 Standard-Infrequent Access costs less per gigabyte to store but adds a retrieval fee of $0.01 per GB every time you read the data. It also has a 30-day minimum storage charge, meaning you’ll pay for at least 30 days even if you delete the file after a week. This class makes sense for data you need occasionally but want available instantly.
S3 Glacier classes are built for archival storage. Glacier Instant Retrieval charges $0.03 per GB for retrieval but still delivers data in milliseconds, with a 90-day minimum storage duration. Glacier Flexible Retrieval offers cheaper storage but retrieval takes anywhere from one minute to 12 hours depending on the speed you select. Glacier Deep Archive is the cheapest option, designed for data you might access once or twice a year. It has a 180-day minimum storage duration, and standard retrieval takes up to 12 hours.
The pattern across all these classes is consistent: the less frequently you need to access data, the less you pay to store it, but the more you pay (in fees and wait time) when you do need it back.
Data Transfer Fees
Data transfer is the part of AWS pricing that catches many people off guard. Sending data into AWS is free. Sending data out to the internet is not.
AWS provides 100 GB of free data transfer out to the internet each month, aggregated across all services and regions. Beyond that, outbound transfer from a US region costs $0.09 per GB for the first 10 TB per month. Rates drop at higher volumes: $0.07 per GB for the next 100 TB, and $0.05 per GB above 150 TB per month.
Transferring data between availability zones within the same region costs about $0.02 per GB. Transfers between different AWS regions cost more. If your application sends a lot of data between services in different zones or regions, these charges add up quickly. Keeping related resources in the same availability zone is one of the simplest ways to reduce your bill.
The Free Tier
AWS offers a free tier that lets you experiment with many services at no cost, but it comes in three flavors with different rules.
12 months free gives new accounts access to a set of services for the first year. This includes a small EC2 instance, a limited amount of S3 storage, and several other services. These credits expire 12 months from the date you create your account, regardless of when you start using them.
Always free services remain available at no charge indefinitely, as long as you stay under specified usage limits. AWS Lambda, for example, includes a generous free tier of compute requests each month that never expires.
Short-term trials give you free access to specific services for a limited period or up to a one-time usage cap, whichever comes first.
If you exceed free tier limits, AWS charges standard rates for the overage without warning you beforehand. Setting up billing alerts in the AWS console is worth doing before you launch anything.
What Actually Drives Your Bill
Your total AWS bill is the sum of charges across every service you use, and each service has its own pricing dimensions. EC2 charges for instance hours and attached storage. S3 charges for storage volume, requests, and retrievals. A database service like RDS charges for instance hours, storage, and I/O operations. Lambda charges per request and per millisecond of compute time.
The dimensions that matter most for a typical workload are compute hours, storage volume, and data transfer out. Within compute, the choice between on-demand, Savings Plans, and Reserved Instances is usually the biggest cost decision. Within storage, picking the right S3 class for your access pattern can cut storage costs by 50% to 90%. And for data transfer, architecting your application to minimize cross-region and outbound traffic keeps that line item under control.
AWS provides a pricing calculator on its website where you can model costs before committing. You enter the services you plan to use, the instance sizes, the expected storage and transfer volumes, and it estimates your monthly bill. For anything beyond simple experimentation, running those numbers first is the difference between a manageable bill and an unpleasant surprise.

