Mathieu Kerbel
All articles

AWS EC2: how it works and how to cut its cost

By Mathieu Kerbel
Share on LinkedIn

Key facts

Billing
Per second while the instance runs, with a 60-second minimum (On-Demand, Linux) [27]
Stopped instance
Compute not billed: EBS volumes and Elastic IP addresses still are [29]
Savings Plans
Up to 72% off On-Demand, for a one- or three-year commitment [37]
Spot Instances
Up to 90% off On-Demand; EC2 can interrupt them with two minutes of notice [44]
AWS Graviton
Up to 20% less than comparable x86-based instances [65]
Platform
Nitro: The AWS Nitro System, "the underlying platform for all modern EC2 instances" [2]

Amazon Elastic Compute Cloud (Amazon EC2) rents virtual servers, billed while they run. The instance is not the whole bill: AWS's own guide tells you to "include incidental costs such as snapshot storage for EBS volumes" when you estimate an environment. This article explains what runs under an instance, how EC2 pricing works (what you pay for, and when), and the ways AWS documents to reduce EC2 costs, priced with the list prices of the Paris Region (eu-west-3). Four architectures show what the levers do to whole monthly bills, and the cost section opens with an index of the levers, in the order to work through them.

Prices in this article are AWS list prices for the EU (Paris) Region, Linux, shared tenancy, in USD before tax, from the AWS Price List. Its offer files and their publication dates are listed in the Sources section, and each table repeats the dates of its own prices. Monthly amounts (730 hours), totals and percentages are computed from these prices.

What Amazon EC2 is

In AWS's words, Amazon EC2 "provides on-demand, scalable computing capacity in the Amazon Web Services (AWS) Cloud". An instance is a virtual server, and its instance type sets the hardware it gets: a balance of compute, memory, network and storage. You start it from an Amazon Machine Image (AMI), a template that packages the operating system and software, and give it storage: Amazon Elastic Block Store (Amazon EBS) volumes, which persist, or instance store volumes, whose data is deleted when the instance stops, hibernates or terminates. A security group acts as its virtual firewall.

The same guide lists the pricing options: the Free Tier, On-Demand Instances, Savings Plans, Reserved Instances, Spot Instances, Dedicated Hosts, On-Demand Capacity Reservations, and per-second billing. This article covers all of them except the Free Tier.

How EC2 works under the hood

The Nitro System

AWS's Nitro whitepaper calls the AWS Nitro System "the underlying platform for all modern EC2 instances": "a combination of purpose-built server designs, data processors, system management components, and specialized firmware". The EC2 documentation lists the instance types built on the Nitro System. A server has a main system board, with the host CPUs (Intel, AMD or Graviton) and memory, and one or more Nitro Cards (the components of the Nitro System). The main card, the Nitro Controller, is "the exclusive gateway between the physical server and the control planes for EC2, Amazon EBS, and Amazon Virtual Private Cloud (Amazon VPC)".

Inside an EC2 server: the AWS Nitro SystemAn EC2 server built on the Nitro System. The main system board runs the instances on the Nitro Hypervisor; the Nitro Cards handle network and storage over PCIe; the Nitro Controller is the only link to the control planes of Amazon EC2, Amazon EBS and Amazon VPC.EC2 server built on the AWS Nitro SystemMain system boardNitro CardsControl planesPCIeInstanceInstanceNitro HypervisorCPUs and memoryIntel, AMD, GravitonNitro Security ChipNitro Card for VPCNitro Card for EBSNitro Card forlocal NVMe storageNitro ControllerAmazon EC2Amazon EBSAmazon VPC1234
Inside an EC2 server: the AWS Nitro System
  1. The Nitro Hypervisor splits the host's CPUs and memory between the instances. By design it has no networking stack, no general-purpose file system and no shell.
  2. Network and storage traffic goes through the Nitro Cards over PCIe: the Elastic Network Adapter for the network, NVMe for EBS volumes and instance store. The cards "implement data encryption for networking and storage using hardware offload engines".
  3. The Nitro Controller is the only path between the server and the control planes of Amazon EC2, Amazon EBS and Amazon VPC.
  4. The Nitro Security Chip moderates every access to the server's firmware and, at boot, keeps the CPUs in reset until the Nitro Controller has verified the firmware.

Beyond the steps under the diagram:

  • The Nitro Cards also carry the interfaces EC2 uses to provision and manage the server.
  • The Nitro Hypervisor, "deliberately minimized and firmware-like", gives the instances the cards directly: each PCIe function of a card is split into virtual functions (SR-IOV) that the hypervisor assigns to the instances, which AWS says "minimizes the set of software and hardware components involved in the I/O, resulting in lower costs, higher performance, and greater security".
  • The Nitro Controller is also the hardware root of trust of the server.

AWS also states that the system has no operator access: no mechanism lets a system or a person log in to a Nitro host or read an instance's memory.

The point of the design is to run "nearly all the functionality of the virtualization system on the Nitro cards rather than on the host's system mainboard CPUs". AWS's Nitro page says this delivers "practically all of the compute and memory resources of the host hardware to your instances", and the EC2 documentation that the hypervisor "delivers performance that is indistinguishable from bare metal for most workloads". The same design offers bare metal instances, for workloads that need low-level hardware features or a non-virtualized environment for licensing or support.

Reading an instance name

An instance type is named after its family and size: the series, the generation, the options, then the size after the dot, such as small, 4xlarge, or metal for bare metal. In m7i.large, m is the general purpose series, 7 the seventh generation, i an Intel processor, and large the size. m7g.large is the same series, generation and size on an AWS Graviton processor.

m7i.large: m, the general purpose series; 7, the seventh generation; i, an Intel processor; large, the size.

What the letters of an instance type name mean

Letter Meaning
t (series) Burstable performance
m (series) General purpose
c (series) Compute optimized
r (series) Memory optimized
i (series) Storage optimized
g (option) AWS Graviton processor
i (option) Intel processor
a (option) AMD processor
d (option) Instance store volumes
flex (option) Flex instance

A vCPU is not the same unit on every instance. Many instances run multiple threads on each CPU core (simultaneous multithreading), and "each thread is represented as a virtual CPU (vCPU) on the instance". AWS's table of CPU options gives each type's default: m7i.large (Intel) has two vCPUs on one core, while m7g.large (Graviton) has two vCPUs on two cores, as do the AMD types m7a.large, c7a.large and r7a.large:

Two vCPUs each, on one core or on two
  • m7i.large Intel: 2 vCPUs on 1 core, 2 threads per core

  • m7g.large AWS Graviton: 2 vCPUs on 2 cores, 1 thread per core

  • m7a.large AMD: 2 vCPUs on 2 cores, 1 thread per core

Default CPU options. AWS, Supported CPU options for Amazon EC2 instance types

Two instances with the same vCPU count don't have the same number of cores, so measure before comparing them on price. Changing the CPU options doesn't lower the price either: except for license-included Windows and SQL Server, "you're charged the same as instances that are launched with the default CPU options". EC2 dedicates some resources of the host to an instance, "such as CPU, memory, and instance storage", and shares others, "such as the network and the disk subsystem", among instances (Amazon EC2 instance types).

Burstable, Flex and fixed performance

Burstable T instances run at a baseline and earn CPU credits to go above it; "1 CPU credit = 1 vCPU * 100% utilization * 1 minute". A t4g.small earns 24 credits an hour, a baseline of 20% of each of its two vCPUs (key concepts). T8i, T4g, T3a and T3 instances launch in Unlimited mode: when their average CPU over 24 hours is above the baseline, the extra is billed per vCPU-hour (Unlimited mode), $0.04 per vCPU-hour for T4g and $0.05 per vCPU-hour for T3 in Paris. In Standard mode, an instance that has spent its credits comes down to its baseline instead, and no surplus is billed.

Flex instances such as M7i-flex "deliver a baseline CPU performance of 40 percent" and can reach 100 percent for 95 percent of the time over 24 hours. For "consistently high CPU performance", AWS recommends fixed performance instances (Amazon EC2 instance types).

Storage: EBS and instance store

An EBS volume is block storage that persists "independently from the running life of an EC2 instance", in the same Availability Zone as its instance. With EBS, "you pay only for what you provision": a volume is billed on its provisioned size, attached or not, whether its instance runs or not. Instance store is disks attached to the host, for temporary data such as buffers, caches and scratch data; it is "included as part of the usage cost of the instance", and its data is lost when the instance stops, hibernates or terminates.

Two kinds of block storage for an instance
Lives
Independently of the instance, in its Availability Zone
Billed
On its provisioned size, attached or not, running or not
After a stop
Kept
Lives
On disks attached to the host
Billed
Included in the instance's usage cost
After a stop
Data lost (also on hibernate and terminate)

What differs: whether the data outlives the instance, and whether it is billed apart from it.

Regions and Availability Zones

A Region is a separate geographic area, and Availability Zones are "multiple, isolated locations within each Region". Running instances in several zones protects an application "from the failure of a single location in the Region" (Regions and Zones). Data sent between zones is billed (What else is on the EC2 bill): resilience has a price, and the levers below keep it in check rather than remove it.

What EC2 is used for

AWS matches workloads to instance families across its documentation: the instance types page, the pages of each family, such as M7g instances, M7i instances, C7g instances and R7g instances, and the guides to burstable instances, Spot Instances and Dedicated Hosts linked in this article:

Workloads and the instance families AWS matches to them

Workload Family
Low average CPU with peaks: web servers, small databases, development and test T (T4g, T3)
General purpose workloads that don't use all their CPU: web and application servers, microservices, databases M7i-flex
Application servers, microservices, gaming servers, mid-size data stores, caching fleets M7g
Batch processing, video encoding, scientific modeling, CPU-based machine learning inference C7g
Memory-intensive workloads: databases, in-memory caches, real-time big data analytics R7g
High-throughput databases, data processing, data streaming Storage optimized (I, D)
Floating point calculations, graphics processing, data pattern matching Accelerated computing (P, G, Inf, Trn, F)
Interruptible work: batch jobs, CI/CD, stateless web servers, rendering Any family, on Spot
Software licensed per socket, per core or per VM Dedicated Hosts

A common production setup is a web tier behind a load balancer, over two Availability Zones. In AWS's example of a VPC for production servers, the VPC has a public and a private subnet in each zone, and the public subnets route to the internet through an internet gateway. "Each public subnet contains a NAT gateway and a load balancer node", and the servers "run in the private subnets, are launched and terminated by using an Auto Scaling group, and receive traffic from the load balancer". The diagram leaves the NAT gateways out (their price is in What else is on the EC2 bill). Elastic Load Balancing "supports the following load balancers: Application Load Balancers, Network Load Balancers, Gateway Load Balancers, and Classic Load Balancers", and "Whenever instances are launched or terminated, Amazon EC2 Auto Scaling automatically registers and deregisters the instances from the load balancer":

A production web tier on EC2 in ParisUsers reach a VPC of the Paris Region through its internet gateway. An Application Load Balancer, with a node in the public subnet of each of two Availability Zones, sends their requests to an Auto Scaling group of EC2 instances in the private subnets; each instance has its own EBS gp3 volume in its zone.Region eu-west-3 (Paris)VPCAvailability Zone 1Availability Zone 2Public subnetPublic subnetPrivate subnetPrivate subnetAuto Scaling groupUsersInternet gatewayApplicationLoad BalancerVolume gp3InstanceInstanceVolume gp31234
A production web tier on EC2 in Paris
  1. Requests enter the VPC through its internet gateway and reach the Application Load Balancer, which has a node in the public subnet of each zone. It sends them to the instances of the Auto Scaling group, in the private subnets, and the group keeps the instances balanced across the two zones.
  2. With a scaling policy, such as target tracking, the group adds instances when the load rises and removes them when it falls. Each instance is billed per second while it runs: $0.0188 an hour for a t4g.small.
  3. Each instance has its own EBS volume, which must be in the same Availability Zone as the instance. A volume is billed on its provisioned size, attached or not: $0.0928 per GB-month for gp3.
  4. Data sent between instances in different zones is billed $0.01 per GB, in each direction.

Amazon EC2 Auto Scaling keeps the group between a minimum and a maximum number of instances, replaces unhealthy ones and balances them across zones. It has no fee of its own: you pay for the instances, volumes and alarms it uses.

How EC2 pricing works

On-Demand: per second, while it runs

"With On-Demand Instances, you pay for compute capacity by the second with no long-term commitments", "with a 60-second minimum" (Purchasing On-Demand Instances). Linux, Windows, RHEL and Ubuntu Pro instances are billed per second; SLES instances are billed by the full hour (EC2 On-Demand pricing).

EC2 On-Demand list prices in Paris (eu-west-3), Linux, by family

Instance typeList price, per hourA month, computed
T · burstable
t4g.smallGravitonGraviton2 · 2 vCPU · 2 GiB$0.0188$13.72
t3.smallIntel · 2 vCPU · 2 GiB$0.0236$17.23
M · general purpose
m7g.largeGravitonGraviton3 · 2 vCPU · 8 GiB$0.0952$69.50
m7i-flex.largeIntel · 2 vCPU · 8 GiB$0.11172$81.56
m7i.largeIntel · 2 vCPU · 8 GiB$0.1176$85.85
C · compute optimized
c7g.largeGravitonGraviton3 · 2 vCPU · 4 GiB$0.0859$62.71
c7i.largeIntel · 2 vCPU · 4 GiB$0.10605$77.42
R · memory optimized
r7g.largeGravitonGraviton3 · 2 vCPU · 16 GiB$0.1258$91.83
r7i.largeIntel · 2 vCPU · 16 GiB$0.1554$113.44

USD, before tax. AWS Price List, eu-west-3, offer file published October 12, 2026, fetched October 14, 2026.

What a stopped instance still costs

What is billed in each state of an instance (Amazon EC2 instance state changes). "Some AWS resources, such as Amazon EBS volumes and Elastic IP addresses, incur charges regardless of the instance's state":

What is billed in each state of an instance

StateInstance usageEBS volumesElastic IP address
pendingNot billedBilledBilled
runningBilledBilledBilled
stoppingIf hibernatingBilledBilled
stoppedNot billedBilledBilled
shutting-downNot billedBilledBilled
terminatedNot billedUntil deletedUntil released

Running instances are billed per second, with a one-minute minimum. After termination, the root volume is deleted by default and other volumes are kept (DeleteOnTermination); an Elastic IP address stays allocated to the account until it is released. A Reserved Instance that covered a terminated instance is billed until the end of its term.

A stopped instance still pays for its volumes, and for its Elastic IP address if it has one; a public IPv4 address assigned at launch is released when the instance stops, and a new one comes with the next start. AWS charges for every public IPv4 address, in use or idle, $0.005 per hour in Paris (Amazon VPC pricing):

Per public IPv4 address

$3.65 a month:An address billed every hour of the month, 730 hours, in use or idle, in Paris.

Computed from the AWS Price List · eu-west-3 · Sep 17, 2026

A stop and a start also open a new billing period, with its own one-minute minimum.

What else is on the EC2 bill

Other charges that come with EC2 in Paris (eu-west-3)

ItemList priceUnit
Storage (EBS)
gp3 storage$0.0928per GB-month
gp3 IOPSAbove 3,000$0.0058per IOPS-month
gp3 throughputAbove 125 MiB/s$0.0464per MiB/s-month
gp2 storage$0.116per GB-month
Snapshots
Standard tier$0.053per GB-month
Archive tier$0.01325per GB-month
Retrieval from the archive tier$0.0318per GB
Public IPv4 addresses
In use$0.005per hour
Idle$0.005per hour
CPU credits
T4g surplus creditsUnlimited mode$0.04per vCPU-hour
Data transfer
Between Availability ZonesEach direction$0.01per GB
From Paris to Frankfurt$0.02per GB
Out to the internetFirst 10 TB a month$0.09per GB
In from the internet$0.00per GB
NAT gateway
NAT gateway$0.05per hour
Data processed$0.05per GB

USD, before tax. AWS Price List, eu-west-3, offer files published September 16, 2026, September 17, 2026 and October 12, 2026, fetched October 14, 2026.

Within a Region, "you're charged for both inbound and outbound traffic" of a transfer between zones; between Regions, only the data out of the source Region is billed. The first 100 GB a month of data out to the internet are free, counted across all AWS services and Regions except China and GovCloud (EC2 On-Demand pricing). In Cost Explorer, "Instead of a single group for Amazon EC2 costs, Cost Explorer will group costs into EC2 - Instances and EC2 - Other" (Billing and Cost Explorer data): EC2 - Other holds the "ancillary cost, such as Amazon Elastic Block Store volumes or NAT gateways". Cost Explorer's usage type groups split these charges further, apart from "EC2: Running Hours": among them "EC2: EBS - SSD(gp2)", "EC2: EBS - Snapshots", "EC2: Data Transfer - Inter AZ" and "EC2: NAT Gateway - Data Processed". Public IPv4 addresses, in use or idle, are billed under Amazon VPC, not EC2, with the usage types PublicIPv4:InUseAddress and PublicIPv4:IdleAddress (billing codes for Amazon VPC).

Put together, a single instance's month looks like this, before any data transfer:

One m7g.large running all month in Paris, with a 50 GB gp3 volume and a public IPv4 address Illustrative

Where the month goes: compute $69.50, storage $4.64, network $3.65, total $77.79 a month.

LineA month
Compute
m7g.large, On-Demand730 h × $0.0952 /h$69.50
Storage
gp3 storage50 GB × $0.0928 /GB-mo$4.64
Network
Public IPv4 address730 h × $0.005 /h$3.65
Not counted
Data transfer—
A month, computed$77.79

USD before tax, 730 h a month. AWS Price List, eu-west-3, offer files published September 17, 2026 and October 12, 2026, fetched October 14, 2026. Illustrative configuration, not a client case.

Savings Plans and Reserved Instances

Savings Plans "provide savings beyond On-Demand rates in exchange for a commitment of using a specified amount of compute power (measured per hour) for a one or three year period", up to 72%. EC2 has two kinds, one wider and one deeper:

The two kinds of Savings Plans for EC2
Discount
Up to 66% off On-Demand
Applies to
Any instance family, size, Region, operating system or tenancy, and AWS Fargate and AWS Lambda too
Discount
Up to 72% off On-Demand
Applies to
One instance family in one Region

What differs: a deeper discount against the freedom to change family, Region or service.

The commitment is hourly: "each hour's commitment can only be used within that hour and cannot be carried over", and usage above it is billed On-Demand. The terms can't be changed or cancelled after purchase, with one exception: a plan with an hourly commitment of 100 US dollars or less can be returned within seven days of its purchase, in the same calendar month, up to a return limit (Returning a purchased Savings Plan). Reserved Instances are "a billing discount applied to the use of On-Demand Instances", for one or three years, Standard or Convertible. AWS's advice is short:

We recommend Savings Plans over Reserved Instances.

AWS, Reserved Instances for Amazon EC2 overview

One instance type, every way to pay for it by the hour, from On-Demand to the deepest discount:

m7g.large in Paris: On-Demand and each commitment, No Upfront

m7g.large, how it is paidPer hourA month, computedAgainst On-Demand, computed
No commitmentOn-Demand$0.0952$69.50—
1 yearCompute Savings Plan= Convertible Reserved InstanceSame rate$0.0722$52.7124.2% less
1 yearEC2 Instance Savings Plan= Standard Reserved InstanceSame rate$0.0628$45.8434.0% less
3 yearsCompute Savings Plan$0.05$36.5047.5% less
3 yearsEC2 Instance Savings PlanDeepest discount$0.0434$31.6854.4% less

m7i.large, at the same terms: the same percentages to one decimal (24.2%, 34.0%, 47.5%, 54.4% less) and the same equal rates, computed from its own rates.

No Upfront rates; the other payment options and Spot are not shown.

USD, before tax. AWS Price List, eu-west-3, offer files published October 12, 2026 and October 13, 2026, fetched October 14, 2026.

Both are also sold Partial Upfront and All Upfront (What are Savings Plans?), and AWS notes that "you can save more money making a higher upfront payment" for Reserved Instances. This article shows No Upfront rates only.

At one year, the EC2 Instance Savings Plan rate is the Standard Reserved Instance rate, and the Compute Savings Plan rate is the Convertible Reserved Instance rate. AWS describes the pairs the same way: Compute Savings Plans are similar to Convertible Reserved Instances, and EC2 Instance Savings Plans to Standard ones.

In short: For m7i.large and m7g.large in Paris, at one year No Upfront, a Savings Plan costs what the matching Reserved Instance costs: choose on flexibility, not on price.

Spot Instances

"A Spot Instance is an instance that uses spare EC2 capacity that is available for less than the On-Demand price." Its price is set by EC2 for each instance type and zone, and moves with supply and demand (Spot Instances). It is not in the AWS Price List, so this article shows none. The savings reach up to 90%, and EC2 can interrupt the instance "with two minutes of notice" (Spot best practices). Savings Plans do not apply to Spot usage.

Dedicated Hosts and Capacity Reservations

Dedicated Hosts, physical servers for your use alone, serve software licensed per socket, per core or per VM. On-Demand Capacity Reservations reserve capacity in a zone and are "charged at the equivalent On-Demand rate whether you run instances in reserved capacity or not"; Savings Plans and regional Reserved Instances can lower that rate.

Putting the options together

The AWS Well-Architected Framework asks the question for each resource: "Determine if the component and resources will be running for extended periods (for commitment discounts) or dynamic and short-running (for spot or on-demand)". The options of this section, side by side:

The ways to pay for EC2: what each suits and what you pay for

Option Suits You pay for
On-Demand Dynamic, short-running use Each second it runs, with a 60-second minimum (Linux)
Savings Plans Long-running use An hourly commitment for one or three years, used or not
Reserved Instances Long-running use; AWS recommends Savings Plans instead Every hour of the term, used or not (No Upfront)
Spot Instances Interruptible work Spare capacity, at the Spot price EC2 sets
Dedicated Hosts Software licensed per socket, core or VM A physical server for your use alone
On-Demand Capacity Reservations Capacity held in one zone The On-Demand rate, whether instances run in it or not

Architecture patterns around EC2 and what they cost

Four illustrative configurations in Paris, each priced before and after the levers of the next section, line by line from the AWS Price List. They cover the main shapes of an EC2 bill: a steady load that runs all the time, interruptible work that comes in batches through an Amazon Simple Queue Service (Amazon SQS) queue, resources a team uses only part of the week, and a small load that rarely uses its CPU. None is a client case; every amount is computed, and each card lists its assumptions and what it leaves out.

Pattern 1 of 4 · Illustrative configuration

Always-on web tier

An Application Load Balancer in front of an Auto Scaling group of two to four instances, over two Availability Zones in Paris.

Its architecture is the web tier drawn under What EC2 is used for: a load balancer over two zones, an Auto Scaling group in the private subnets.

Before · Sized for the peak: compute $343.39, storage $23.20, network $38.88, total $405.47 a month.

With the levers · Graviton, baseline committed, peak scaled: compute $141.19, storage $12.59, network $38.88, total $192.66 a month.

With the levers: $212.81 a month less (52.5% less), computed.

Always-on web tier, one lever at a time: the bill a month, computed

StepA month, computedChange
Sized for the peakBefore the levers$405.47—
gp3 volumesLever: Move gp2 volumes to gp3$400.83−$4.64
Graviton (m7g.large)Lever: Move to Graviton$335.42−$65.41
Scaled with demandLever: Scale with demand$239.96−$95.46
1-year EC2 Instance Savings PlanLever: Commit to the steady baseline$192.66−$47.30

USD, before tax. AWS Price List, eu-west-3, offer files published September 11, 2026, September 17, 2026, October 12, 2026 and October 13, 2026, fetched October 14, 2026.

The bills line by line, the assumptions and the sources

Always-on web tier, before: Sized for the peak Illustrative

Four m7i.large On-Demand instances running all month, with gp2 volumes.

LineA month
Compute
m7i.large, On-Demand4 instances × 730 h × $0.1176 /h$343.39
Storage
gp2 volumes, 50 GB each200 GB × $0.116 /GB-mo$23.20
Network$38.88
Application Load Balancer1 load balancer × 730 h × $0.02646 /h$19.32
Load balancer capacity units (2 on average)2 LCU × 730 h × $0.0084 /LCU-h$12.26
Public IPv4 addresses of the load balancer2 addresses × 730 h × $0.005 /h$7.30
A month, computed$405.47

Always-on web tier, with the levers: Graviton, baseline committed, peak scaled Illustrative

Two m7g.large on a one-year No Upfront EC2 Instance Savings Plan run all month; the group adds two On-Demand m7g.large for the peak hours; gp3 volumes.

LineA month
Compute$141.19
m7g.large, EC2 Instance Savings Plan (1 year, No Upfront)2 instances × 730 h × $0.0628 /h$91.69
m7g.large, On-Demand, peak hours only2 instances × 260 h × $0.0952 /h$49.50
Storage$12.59
gp3 volumes of the baseline instances, 50 GB each100 GB × $0.0928 /GB-mo$9.28
gp3 volumes of the peak instances, 50 GB each100 GB × 260 h / 730 h × $0.0928 /GB-mo$3.31
Network$38.88
Application Load Balancer1 load balancer × 730 h × $0.02646 /h$19.32
Load balancer capacity units (2 on average)2 LCU × 730 h × $0.0084 /LCU-h$12.26
Public IPv4 addresses of the load balancer2 addresses × 730 h × $0.005 /h$7.30
A month, computed$192.66

Same, with a one-year No Upfront Compute Savings Plan: $206.38 a month, 49.1% less than before, computed.

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • Peak: 12 hours a day, 5 days a week: 12 × 5 × 52 / 12 = 260 hours a month. The load needs four instances at the peak and two the rest of the time.
  • The same number of m7g.large instances carries the load as of m7i.large instances (to verify with a load test before the move).
  • Each instance has one 50 GB root volume, which the group deletes with the instance when it scales in (DeleteOnTermination), so a peak instance's volume is billed only while it exists.
  • The instances run in private subnets, with no public IPv4 address of their own.
  • The load balancer uses 2 load balancer capacity units (LCU) on average every hour, the same in every step.
  • The load balancer has one public IPv4 address per enabled Availability Zone: 2 addresses, billed as in-use public IPv4 addresses. A load balancer that scales out can use more.
  • The Savings Plan is sized to the two baseline instances: a commitment of 0.1256 USD an hour (2 × the plan's m7g.large rate), billed every hour of the one-year term whether used or not. Usage above it is billed On-Demand.
  • m7g (AWS Graviton) runs Linux only and needs an arm64 build of the application.

Not counted

  • Data transfer out to the internet and between Availability Zones.
  • CloudWatch, snapshots and DNS.
  • Two NAT gateways, one in each public subnet as in AWS's example, for the instances' way out to the internet: + $73.00 a month on both sides (2 NAT gateways × 730 h × $0.05 /h, computed), so $478.47 before and $265.66 with the levers, 44.5% less. Their data processing charge is not counted either.

Sources

USD before tax, 730 h a month. AWS Price List, eu-west-3, offer files published September 11, 2026, September 17, 2026, October 12, 2026 and October 13, 2026, fetched October 14, 2026. Illustrative configuration, not a client case.

Pattern 2 of 4 · Illustrative configuration

Queue-driven batch workers

Producers put jobs in an Amazon SQS queue; an Auto Scaling group of workers scales on the backlog per instance, out to ten instances while there is work and back to zero once the queue is drained.

Queue-driven workers: an On-Demand base, Spot above itProducers send jobs to an Amazon SQS queue. An Auto Scaling group across two Availability Zones takes the jobs from the queue and scales on the backlog per instance: one On-Demand instance as its base, Spot Instances above it.Region eu-west-3 (Paris)VPCAvailability Zone 1Availability Zone 2Auto Scaling groupJobsProducersAmazon SQSqueueInstanceOn-DemandSpotInstanceSpotInstanceSpotInstance1234
Queue-driven workers: an On-Demand base, Spot above it Illustrative configuration in Paris, not a client case.
  1. Producers send jobs to the queue. Every Amazon SQS action is a billed request, and each 64 KB of a message counts as one request.
  2. The group scales on the backlog per instance (the messages waiting, divided by the instances in service): out to ten instances while there is work, back to zero once the queue is drained.
  3. One On-Demand instance is the group's base capacity, so work goes on when Spot capacity is short: $0.0859 an hour for a c7g.large.
  4. Above the base, the group's mixed instances policy launches Spot Instances, from several instance types and both zones, with the price-capacity-optimized allocation strategy. Spot prices are not in the AWS Price List: AWS states savings of up to 90% compared to On-Demand prices. A job left unfinished by an interrupted instance returns to the queue.

Before · On-Demand only: compute $209.02, storage $6.19, other $2.40, total $217.61 a month.

With the levers · Spot above an On-Demand base: compute $20.90, storage $6.19, other $2.40, priced lines $29.49 a month, plus 2,190 Spot instance-hours, not priced.

No difference is computed: the Spot hours have no list price (AWS: up to 90% less than On-Demand).

The bills line by line, the assumptions and the sources

Queue-driven batch workers, before: On-Demand only Illustrative

The same Auto Scaling group with one instance type, c7g.large, all On-Demand.

LineA month
Compute
c7g.large, On-Demand10 instances × 243⅓ h × $0.0859 /h$209.02
Storage
gp3 root volumes, 20 GB each, while the workers run200 GB × 243⅓ h / 730 h × $0.0928 /GB-mo$6.19
Other
Amazon SQS standard requests6 million requests × $0.40 /M req$2.40
A month, computed$217.61

Queue-driven batch workers, with the levers: Spot above an On-Demand base Illustrative

A mixed instances policy: one On-Demand c7g.large as base capacity, the nine others on Spot, across many instance types (AWS recommends at least 10) and both zones, with the price-capacity-optimized allocation strategy and no Spot maximum price.

LineA month
Compute$20.90
c7g.large, On-Demand base capacity1 instance × 243⅓ h × $0.0859 /h$20.90
Spot Instances (c7g.large and similar types)2,190 instance-hours · On-Demand equivalent, as c7g.large: $188.12, computedNot priced
Storage
gp3 root volumes, 20 GB each, while the workers run200 GB × 243⅓ h / 730 h × $0.0928 /GB-mo$6.19
Other
Amazon SQS standard requests6 million requests × $0.40 /M req$2.40
Priced lines, a month, computed$29.49
+ 2,190 Spot instance-hours, not priced (AWS: up to 90% less than On-Demand)

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • The backlog arrives every night: the group runs 10 instances for 8 hours, then scales in to zero. 8 × 730 / 24 = 243.33 hours per instance a month.
  • 2,000,000 jobs a month; each job is three Amazon SQS requests (send, receive, delete), each with one message under 64 KB: 6,000,000 requests.
  • Each worker has one 20 GB gp3 root volume, deleted with the instance.
  • The jobs can be interrupted: a message a worker has not finished processing returns to the queue for another worker.
  • Spot prices are not in the AWS Price List, so the Spot hours are not priced and no saving is computed for them. Their On-Demand equivalent is computed as c7g.large hours; a mixed instances group also launches other types, each against its own On-Demand price.
  • The SQS free tier (1 million requests a month, counted per account across Regions) is not deducted.

Not counted

  • Empty receives: a worker that polls an empty queue makes billed SQS requests too.
  • How the workers reach Amazon SQS from private subnets (NAT gateways or an interface VPC endpoint, both billed).
  • CloudWatch metrics and alarms of the scaling policy.
  • Data transfer and where the jobs' results are stored.

Sources

USD before tax, 730 h a month. AWS Price List, eu-west-3, offer files published September 11, 2026 and October 12, 2026, fetched October 14, 2026. Illustrative configuration, not a client case.

Pattern 3 of 4 · Illustrative configuration

Development and test environment

Four instances that a team uses during working hours, with one Elastic IP address to reach the environment.

Instance Scheduler on AWS runs on an Amazon EventBridge rule, AWS Lambda functions and Amazon DynamoDB tables, which start and stop the instances by tag.

Development environment: running in working hours onlyInstance Scheduler on AWS, an Amazon EventBridge rule, an AWS Lambda function and an Amazon DynamoDB table of schedules, starts four instances in the morning and stops them in the evening. Their gp3 volumes and the Elastic IP address of the first instance stay, and keep billing, while they are stopped.Region eu-west-3 (Paris)Instance Scheduler on AWSVPCStart and stopEventBridgeruleLambdafunctionDynamoDBtableElastic IPaddressInstanceInstanceInstanceInstanceVolume gp3Volume gp3Volume gp3Volume gp31234
Development environment: running in working hours only Illustrative configuration in Paris, not a client case.
  1. Every five minutes by default, an Amazon EventBridge rule invokes the scheduler's AWS Lambda functions, which read the schedules from Amazon DynamoDB and start or stop the instances tagged for a schedule.
  2. The instances run 8 hours a day, five days a week, and are billed per second only while they run: $0.1176 an hour each for an m7i.large.
  3. Volumes are billed on their size whether the instance runs or not: $0.0928 per GB-month for gp3.
  4. The Elastic IP address stays allocated while its instance is stopped, billed as idle: $0.005 an hour, as when in use. The other instances have no public IPv4 address.

Before · Always on: compute $343.39, storage $37.12, network $3.65, total $384.16 a month.

With the levers · Working hours only: compute $81.54, storage $37.12, network $3.65, total $122.31 a month.

With the levers: $261.85 a month less (68.2% less), computed.

The bills line by line, the assumptions and the sources

Development and test environment, before: Always on Illustrative

Four m7i.large running all month.

LineA month
Compute
m7i.large, On-Demand4 instances × 730 h × $0.1176 /h$343.39
Storage
gp3 volumes, 100 GB each, billed while stopped too400 GB × $0.0928 /GB-mo$37.12
Network
Elastic IP address, in use1 address × 730 h × $0.005 /h$3.65
A month, computed$384.16

Development and test environment, with the levers: Working hours only Illustrative

The same instances, started in the morning and stopped 8 hours later, five days a week, by Instance Scheduler on AWS.

LineA month
Compute
m7i.large, On-Demand, working hours4 instances × 173⅓ h × $0.1176 /h$81.54
Storage
gp3 volumes, 100 GB each, billed while stopped too400 GB × $0.0928 /GB-mo$37.12
Network$3.65
Elastic IP address, in use (instance running)1 address × 173⅓ h × $0.005 /h$0.87
Elastic IP address, idle (instance stopped)1 address × 556⅔ h × $0.005 /h$2.78
A month, computed$122.31

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • Working hours: 8 hours a day, 5 days a week, as AWS's Well-Architected Framework describes development and test environments: 8 × 5 × 52 / 12 = 173.33 hours a month.
  • Each instance has a 100 GB gp3 volume. A stopped instance still pays for its EBS volumes.
  • One Elastic IP address, associated with one of the instances: billed as in use while that instance runs and as idle while it is stopped, at the same rate in Paris.
  • The other instances have no public IPv4 address (one assigned at launch is released when the instance stops).
  • No commitment covers these instances: a Savings Plan bills every hour of its term, and a stopped instance does not use it.

Not counted

  • The scheduler's own resources (Instance Scheduler on AWS deploys AWS Lambda functions, Amazon DynamoDB tables and an Amazon EventBridge rule; its implementation guide gives AWS's own cost estimate).
  • Data transfer and snapshots.

Sources

USD before tax, 730 h a month. AWS Price List, eu-west-3, offer files published September 17, 2026 and October 12, 2026, fetched October 14, 2026. Illustrative configuration, not a client case.

Pattern 4 of 4 · Illustrative configuration

Small service: burstable or fixed performance

One instance with 2 vCPUs and 8 GiB that serves a light load, with a 50 GB gp3 volume and a public IPv4 address.

Fixed or burstable performance, for the same 2 vCPUs and 8 GiB: which one costs less depends on the average CPU use.

Before · Fixed performance: compute $69.50, storage $4.64, network $3.65, total $77.79 a month.

With the levers · Burstable: compute $54.90, storage $4.64, network $3.65, total $63.19 a month.

With the levers: $14.60 a month less (18.8% less), computed.

The monthly cost of each instance by average CPU use, computed

The chart at five points: the instance and its surplus credits a month, computed

Average CPUt4g.largem7g.larget4g.large against m7g.large
0%$54.90$69.5021.0% less
10%This pattern$54.90$69.5021.0% less
30%Baseline$54.90$69.5021.0% less
55%Break-even$69.50$69.50The same
100%$95.78$69.5037.8% more
Every point of the chart, 5% apart

The monthly cost of each instance by average CPU use, computed, every point

Average CPUt4g.largem7g.large
0%$54.90$69.50
5%$54.90$69.50
10%$54.90$69.50
15%$54.90$69.50
20%$54.90$69.50
25%$54.90$69.50
30%$54.90$69.50
35%$57.82$69.50
40%$60.74$69.50
45%$63.66$69.50
50%$66.58$69.50
55%$69.50$69.50
60%$72.42$69.50
65%$75.34$69.50
70%$78.26$69.50
75%$81.18$69.50
80%$84.10$69.50
85%$87.02$69.50
90%$89.94$69.50
95%$92.86$69.50
100%$95.78$69.50

USD before tax, 730 h a month; the volume and the address are left out (the same in both). AWS Price List, eu-west-3, offer files published September 17, 2026 and October 12, 2026, fetched October 14, 2026.

The bills line by line, the assumptions and the sources

Before: the worked month of What else is on the EC2 bill, $77.79 a month.

Small service: burstable or fixed performance, with the levers: Burstable Illustrative

A t4g.large in unlimited mode: billed for surplus CPU credits only when its average use exceeds its baseline.

LineA month
Compute$54.90
t4g.large, On-Demand1 instance × 730 h × $0.0752 /h$54.90
Surplus CPU credits (unlimited mode)0 vCPU-hours × $0.04 /vCPU-h$0.00
Storage
gp3 volume, 50 GB50 GB × $0.0928 /GB-mo$4.64
Network
Public IPv4 address1 address × 730 h × $0.005 /h$3.65
A month, computed$63.19

Assumptions

  • Illustrative configuration in Paris (eu-west-3), not a client case.
  • Average CPU use: 10% of both vCPUs, steady through the day.
  • The service needs 8 GiB of memory, so a smaller size is not an option (rightsizing comes first).
  • t4g.large: 2 vCPUs and 8 GiB, like m7g.large. It earns 36 CPU credits an hour, a baseline of 30% per vCPU (one CPU credit is one vCPU at 100% for one minute).
  • The CPU use is measured on the t4g.large: its vCPUs are AWS Graviton2 cores, the m7g.large's Graviton3 cores, so the same work may not use the same percentage on both.
  • Unlimited mode, the default for T4g: when the average CPU use over 24 hours exceeds the baseline, the instance is billed for the surplus at a flat rate per vCPU-hour. For a steady load, the surplus is (average − 30%) × 2 vCPUs × 730 hours.
  • The break-even point is the average CPU use at which the t4g.large's hourly price plus its surplus credits equals the m7g.large's hourly price. The volume and the address are the same in both variants and leave it unchanged.

Not counted

  • Data transfer, snapshots and CloudWatch.

Sources

USD before tax, 730 h a month. AWS Price List, eu-west-3, offer files published September 17, 2026 and October 12, 2026, fetched October 14, 2026. Illustrative configuration, not a client case.

Want the same levers on your own bill?

Get a free audit

How to reduce EC2 costs

Each lever below comes from AWS documentation; their order is this article's. A Savings Plan's hourly commitment "cannot be carried over" to another hour, and a No Upfront Reserved Instance is billed "for every hour within the term, regardless of whether the Reserved Instance is being used". So a commitment comes last, once the usage it covers is as small as it will get: see the bill first, remove what is billed but used by nothing, then lower and reshape the instance hours, and commit to what remains, so that the commitment doesn't lock in waste. The levers, in that order:

  1. Lever 01,SeeSee the bill as AWS splits itAlways, and first
  2. Lever 02,TrimDelete unattached volumes and old snapshotsAccounts that have run instances for a while
  3. Lever 03,TrimRelease idle public IPv4 addressesAddresses that nothing needs
  4. Lever 04,TrimMove gp2 volumes to gp3Every gp2 volume
  5. Lever 05,ReshapeStop what nobody usesDevelopment and test, idle hours
  6. Lever 06,ReshapeRightsize with dataEvery running instance, before a commitment
  7. Lever 07,ReshapeMove to GravitonLinux software that runs on 64-bit Arm
  8. Lever 08,ReshapeCompare generations on price-performance, not on priceBefore an upgrade
  9. Lever 09,ReshapePick burstable, Flex or fixed performanceLow average CPU, with peaks
  10. Lever 10,ReshapeScale with demandStateless tiers and workers
  11. Lever 11,ReshapeRun interruptible work on SpotStateless, fault-tolerant, flexible work
  12. Lever 12,RouteKeep traffic within a zone where the design allows itChatty services over several zones
  13. Lever 13,CommitCommit to the steady baselineUsage present every hour, once the rest is done
  14. Lever 14,ReviewReview on a cadenceEvery workload

Lever 01 · See

See the bill as AWS splits it

When it applies
Always, and first.
Watch out
Public IPv4 addresses are billed under Amazon VPC, not EC2.
Tools
Cost ExplorerCost Optimization HubTrusted Advisor

Separate the instance hours from the rest with Cost Explorer's usage type groups: "EC2: Running Hours" on one side; volumes, snapshots, data transfer and NAT gateways in groups of their own; public IPv4 addresses under the Amazon VPC service. Cost Optimization Hub gathers AWS's recommendations ("resource rightsizing, idle resource deletion, Savings Plans, and Reserved Instances") and accounts for the discounts you already have. With a Business Support+, Enterprise Support or Unified Operations plan, Trusted Advisor's cost checks include Amazon EC2 cost optimization recommendations for instances (which replaces the legacy low-utilization check), unassociated Elastic IP addresses and underutilized EBS volumes. On Basic Support, Trusted Advisor offers only the service limit checks and selected security and fault tolerance checks.

Lever 02 · Trim

Delete unattached volumes and old snapshots

When it applies
Any account that has run instances for a while.
Watch out
Snapshots are incremental: deleting one may not lower the bill.
Tools
Amazon Data Lifecycle ManagerRecycle Bin

AWS's checklist of unexpected charges says: "Check the Volumes pane in the Amazon EC2 console for volumes that you don't need anymore." Volumes outlive their instances and snapshots outlive their volumes, so a deletion can leave billed storage behind:

What a deletion leaves behind, still billed

You delete Still billed after it
An instance (terminated) Its volumes other than the root volume, which termination keeps by default
A volume Its snapshots: "Deleting a volume doesn't automatically delete the associated snapshots"
An AMI (deregistered) Its snapshots, unless you delete them with it
A snapshot The data other snapshots still use: snapshots are incremental, so deleting one "might not reduce your data storage costs"
A volume or snapshot that a Recycle Bin rule retains The volume or snapshot itself, "billed at the same rate" as the others until its retention period ends

Amazon Data Lifecycle Manager creates, keeps and deletes snapshots and EBS-backed AMIs for you. Recycle Bin can restore volumes, snapshots and EBS-backed AMIs deleted by mistake, if a retention rule protected them when they were deleted; their saving starts only when that retention period ends.

For the snapshots you keep 90 days or more and rarely read, the archive tier is cheaper per GB, with a retrieval fee and a 90-day minimum, and an archived snapshot is stored in full, not as an increment:

Archive tier against standard tier

75.0% lessper GB-month of snapshot storage in Paris.

Computed from the AWS Price List · eu-west-3 · Oct 12, 2026

Lever 03 · Trim

Release idle public IPv4 addresses

When it applies
Elastic IP addresses associated with nothing, and public addresses that nothing needs.
Watch out
Every public IPv4 address is billed, in use or idle.
Tools
EC2 Instance Connect Endpoint

Each public IPv4 address costs $3.65 a month in Paris, and AWS charges for "all public IPv4 addresses, including public IPv4 addresses associated with running instances and Elastic IP addresses". For an Elastic IP address you no longer use, AWS's advice is short: "If you don't need that IP address anymore, release it to avoid additional charges". For the addresses of running instances, AWS's list of public IPv4 optimizations suggests serving traffic through a load balancer and turning off "Auto-assign public IP" on the instances and on their subnets, and reaching instances for maintenance through EC2 Instance Connect Endpoint, which connects to an instance "without requiring the instance to have a public IPv4 address".

Lever 04 · Trim

Move gp2 volumes to gp3

When it applies
Every gp2 volume; check the throughput of those above 170 GiB and the IOPS of those of 1,000 GiB or more.
Watch out
Above 170 GiB, check the throughput; from 1,000 GiB, add IOPS.

gp3 volumes "offer a 20 percent lower price per GiB than General Purpose SSD (gp2) volumes", include 3,000 IOPS and 125 MiB/s at any size, and the change is made in place "without interrupting your Amazon EC2 instances". The console picks gp3 by default only in some cases (the EBS guide: "In other cases, gp2 is the default selection"), so check new volumes too. A gp2 volume's performance grows with its size: 3 IOPS per GiB, and a throughput of at most 128 MiB/s up to 170 GiB, bursts to 250 MiB/s above, and a steady 250 MiB/s from 334 GiB. So a volume under 1,000 GiB gets more baseline IOPS on gp3, for less, but one above 170 GiB can lose throughput: check its throughput before moving it as is, and buy throughput on gp3 where it needs it. A volume of 1,000 GiB or more needs extra IOPS too, which narrows the gap:

A 2,000 GiB volume with 6,000 IOPS and 250 MiB/s, in Paris

The volume on gp2 Illustrative

LineA month
Storage
gp2 storage2,000 GiB × $0.116 /GB-mo$232.00
A month, computed$232.00

The volume on gp3, with the same performance Illustrative

LineA month
Storage$208.80
gp3 storage2,000 GiB × $0.0928 /GB-mo$185.60
IOPS above 3,0003,000 IOPS × $0.0058 /IOPS-mo$17.40
Throughput above 125 MiB/s125 MiB/s × $0.0464 /MiB/s-mo$5.80
A month, computed$208.80

gp3 with the same performance costs $23.20 a month less than gp2 (10.0% less), computed.

USD before tax, 730 h a month. AWS Price List, eu-west-3, offer file published October 12, 2026, fetched October 14, 2026. Illustrative configuration, not a client case.

Lever 05 · Reshape

Stop what nobody uses

When it applies
Development and test environments, and anything idle outside working hours.
Watch out
Volumes and Elastic IP addresses still bill while stopped.
Tools
Instance Scheduler on AWS

The Well-Architected Framework notes that development and test environments "are typically only used for eight hours a day during the work week", and can be stopped the rest of the time. The Instance Scheduler on AWS starts and stops instances on a schedule, by tag. A stopped instance still pays for its EBS volumes, and for its Elastic IP address if it has one (a public IPv4 address assigned at launch is released when the instance stops); each start has a one-minute minimum.

The development and test environment above prices this schedule for four instances, with their volumes and an Elastic IP address that keep billing while the instances are stopped. An instance stopped most of the week is a poor candidate for a commitment.

Lever 06 · Reshape

Rightsize with data

When it applies
Every running instance, before any commitment.
Watch out
Without memory metrics, a recommendation ignores memory.
Tools
AWS Compute Optimizer

AWS Compute Optimizer analyzes the configuration and utilization of your resources and recommends sizes, flagging each instance as under-provisioned, over-provisioned or optimized. You opt in; it reads 14 days of metrics by default, 32 at no extra cost and 93 with the paid enhanced metrics (preferences), and it only sees memory if the CloudWatch agent, or one of the observability products it can read (Datadog, Dynatrace, Instana, New Relic), sends it (EC2 metrics): without memory, a recommendation ignores it. "There is no additional charge for AWS Compute Optimizer" beyond the CloudWatch fees.

In the M7i family in Paris, each size up doubles the hourly price, so one size down halves the cost of an M7i instance:

Three sizes of M7i in Paris, On-Demand, Linux

SizeList price, per hourA month, computed
m7i.large2 vCPU · 8 GiB$0.1176$85.85
m7i.xlarge4 vCPU · 16 GiB$0.2352$171.70
m7i.2xlarge8 vCPU · 32 GiB$0.4704$343.39

USD, before tax. AWS Price List, eu-west-3, offer file published October 12, 2026, fetched October 14, 2026.

Check your own family's prices before counting on the same ratio.

Lever 07 · Reshape

Move to Graviton

When it applies
Linux workloads whose software runs on 64-bit Arm.
Watch out
Needs an arm64 AMI; an EC2 Instance Savings Plan does not follow the move.
Tools
AWS Compute Optimizer

AWS states that Graviton-based instances "cost up to 20% less than comparable x86-based Amazon EC2 instances". At the same size in Paris, On-Demand, m7g.large costs 19.0% less than m7i.large, c7g.large 19.0% less than c7i.large, r7g.large 19.0% less than r7i.large, and t4g.small 20.3% less than t3.small:

Graviton against Intel at the same size in Paris, On-Demand: each pair drawn against its Intel price

PairIntel, per hourGraviton, per hourChange, computed
t3.small → t4g.small$0.0236$0.018820.3% less
m7i.large → m7g.large$0.1176$0.095219.0% less
c7i.large → c7g.large$0.10605$0.085919.0% less
r7i.large → r7g.large$0.1554$0.125819.0% less
m8i.large → m8g.large$0.12348$0.1047215.2% less

USD, before tax. AWS Price List, eu-west-3, offer file published October 12, 2026, fetched October 14, 2026.

The same size means the same vCPU count and memory, not the same cores: m7g.large has two cores where m7i.large has one (Reading an instance name).

Graviton runs Linux only and needs an arm64 AMI (Nitro instances); Compute Optimizer rates the migration effort of each Graviton recommendation. Plan the move before a commitment: an EC2 Instance Savings Plan is tied to one family, so a plan bought for m7i does not follow the instances to m7g, while a Compute Savings Plan does.

Lever 08 · Reshape

Compare generations on price-performance, not on price

When it applies
Before an upgrade, or when Compute Optimizer suggests a newer type.
Watch out
Newer can cost more per hour.
Tools
AWS Compute Optimizer

AWS recommends current-generation types over previous-generation ones "for the best performance"; among current generations, compare price-performance. Newer is not cheaper per hour: in Paris, m7i.large costs 5.0% more than m6i.large, and m8g.large 10.0% more than m7g.large.

One generation to the next in Paris, On-Demand: the newer type costs more per hour

PairOlder generation, per hourNewer generation, per hourChange, computed
m6i.large → m7i.largeIntel$0.112$0.11765.0% more
m7g.large → m8g.largeGraviton$0.0952$0.1047210.0% more

USD, before tax. AWS Price List, eu-west-3, offer file published October 12, 2026, fetched October 14, 2026.

AWS's claim for M7i instances is "up to 15% better price performance compared to M6i", and for M8g instances "up to 30% better performance ... than the seventh-generation AWS Graviton3-based M7g instances". The saving comes only if the workload then needs fewer or smaller instances: measure it before and after.

Lever 09 · Reshape

Pick burstable, Flex or fixed performance

When it applies
Workloads whose CPU is low on average, with peaks.
Watch out
A T instance that always bursts costs more.
Tools
CloudWatch CPUSurplusCreditsCharged

T instances "can save you up to 15% in costs when compared to M instances" for that profile. They stop being cheap when they burst all the time, in AWS's own example:

If a T3 instance continuously bursts at 100% CPU, you end up paying approximately 1.5 times the price of an equivalently-sized M5 instance

AWS, Unlimited mode concepts for burstable instances

The CloudWatch metric CPUSurplusCreditsCharged shows it, and the small service above finds the break-even point of a t4g.large against an m7g.large. For a steady load that doesn't use all its CPU, m7i-flex.large costs 5.0% less than m7i.large in Paris.

Lever 10 · Reshape

Scale with demand

When it applies
Applications that can add and remove instances: stateless web tiers, workers.
Watch out
Set the target high, with a buffer.
Tools
Amazon EC2 Auto Scaling

EC2 Auto Scaling can "reduce costs by adding capacity to handle peak loads and removing capacity when demand is lower". With a target tracking policy, AWS advises: "set the target value as high as possible with a reasonable buffer for unexpected traffic increases".

Lever 11 · Reshape

Run interruptible work on Spot

When it applies
Stateless, fault-tolerant, flexible work: batch jobs, CI/CD, stateless web servers, rendering.
Watch out
Two minutes of notice; not for stateful work.
Tools
Auto Scaling groupsEC2 Fleet

AWS's Spot best practices: be flexible across at least 10 instance types and every zone, launch through Auto Scaling groups or EC2 Fleet with the price-capacity-optimized allocation strategy, and act on the two-minute notice. Spot is "not suitable for workloads that are inflexible, stateful, fault-intolerant, or tightly coupled between instance nodes". What an interrupted instance costs depends on who ends it, and when (Billing for interrupted Spot Instances):

How an interrupted Spot Instance's usage is billed, Linux and Windows

Who ends itIn its first hourAfter its first hour
Amazon EC2 interrupts itNot billedBilled
You stop or terminate itBilledBilled

Billed: for the seconds used. SUSE Linux instances follow hourly rules instead. While an interrupted Spot Instance is stopped, only its EBS volumes are billed.

Lever 12 · Route

Keep traffic within a zone where the design allows it

When it applies
Chatty services spread over several zones.
Watch out
Several zones are how an application survives the loss of one.
Tools
Cluster placement groups

Data between instances in one zone is free: "Data transferred between Amazon EC2, Amazon RDS, Amazon Redshift, Amazon ElastiCache instances, and Elastic Network Interfaces in the same Availability Zone is free". Between zones, it costs $0.01 per GB in each direction in Paris. Several zones are how an application survives the loss of one, so the lever is to avoid needless traffic across zones, not to give up on them.

Traffic between two instances: within one zone or across two
Data between the instances
Free
If the zone fails
Both instances go with it
Data between the instances
$0.01 per GB, billed out of one zone and into the other
If a zone fails
The other keeps serving

The trade: resilience against a price per GB. Keep the zones, cut the traffic between them that the design does not need.

For tightly coupled jobs, a cluster placement group keeps the instances in one zone, with the low-latency network they need.

Lever 13 · Commit

Commit to the steady baseline

When it applies
Usage present every hour for a year or more, once the levers above are done.
Watch out
Billed every hour of the term, used or not.
Tools
Cost ExplorerPurchase Analyzer

Cover the usage present every hour, once rightsized (see the start of this section). Cost Explorer gives Savings Plans and Reserved Instance purchase recommendations (COST07-BP01), and Purchase Analyzer shows what a given amount does to "savings, coverage, and utilization" before you buy. Once bought, follow the plan with the utilization and coverage reports, and set budgets on its utilization and coverage.

Discounts are not the same for every family: in Paris, a one-year No Upfront Compute Savings Plan costs 18.6% less than On-Demand for a t4g.small, but 27.7% less for an r7g.large:

The one-year No Upfront Compute Savings Plan against On-Demand in Paris, by family

Instance typeDiscount, computedOn-Demand, per hourPlan, per hour
t4g.smallT · burstable18.6% less$0.0188$0.0153
c7g.largeC · compute optimized21.0% less$0.0859$0.0679
m7g.largeM · general purpose24.2% less$0.0952$0.0722
r7g.largeR · memory optimized27.7% less$0.1258$0.091

USD, before tax. AWS Price List, eu-west-3, offer files published October 12, 2026 and October 13, 2026, fetched October 14, 2026.

A three-year term goes further: an m7g.large on a three-year No Upfront EC2 Instance Savings Plan costs 54.4% less than On-Demand. And the levers add up:

Two levers together: Graviton and a commitment

46.6% lessper hour: an m7g.large on a one-year No Upfront EC2 Instance Savings Plan against an m7i.large On-Demand, in Paris.

Computed from the AWS Price List · eu-west-3 · Oct 12 and Oct 13, 2026

Between the two plans, the trade is depth against freedom: an EC2 Instance Savings Plan gives the larger discount but stays with one family in one Region, while a Compute Savings Plan follows a move to Graviton, to another Region, or to AWS Fargate and AWS Lambda.

Lever 14 · Review

Review on a cadence

When it applies
Every workload; the largest ones more often.
Watch out
The largest every three to six months.

"The review effort should reflect potential benefit", in AWS's words, and its example sets the cadence by each workload's share of the bill (COST10-BP01, workload review process):

How often AWS suggests reviewing a workload

Workload Reviewed
Core workloads, or workloads over ten percent of the bill Quarterly or every six months
Workloads below ten percent of the bill Annually

The same page adjusts the cadence: more often for a workload whose market is expected to change, less often for one whose changes cost a lot to test and validate.

In short: Commit last: see the bill, delete what nothing uses, reshape the instance hours, and only then cover with a commitment the usage that is left every hour.

FAQ

Is EC2 billed per second?

On-Demand Linux, Windows, RHEL and Ubuntu Pro instances are, with a 60-second minimum; SLES instances are billed by the full hour (On-Demand: per second, while it runs).

Does a stopped instance cost money?

Its compute is not billed, but its EBS volumes are, and so is its Elastic IP address if it has one (What a stopped instance still costs).

How much does an Elastic IP address cost?

Every public IPv4 address, Elastic IP addresses included, costs $0.005 per hour in Paris, in use or idle (What a stopped instance still costs).

What is EC2-Other in Cost Explorer?

It is the group where Cost Explorer puts the costs that come with EC2 instances, "such as Amazon Elastic Block Store volumes or NAT gateways", apart from EC2 - Instances (What else is on the EC2 bill).

Savings Plans or Reserved Instances?

AWS recommends Savings Plans. For m7i.large and m7g.large in Paris, at one year No Upfront, a plan and the matching reservation cost the same per hour, so the choice is about flexibility (Savings Plans and Reserved Instances).

Sources

  1. What is Amazon EC2? AWS, documentation, accessed October 14, 2026.
  2. The Security Design of the AWS Nitro System AWS, whitepaper, accessed October 14, 2026.
  3. Instances built on the AWS Nitro System AWS, documentation, accessed October 14, 2026.
  4. The components of the Nitro System AWS, whitepaper, accessed October 14, 2026.
  5. No AWS operator access AWS, whitepaper, accessed October 14, 2026.
  6. AWS Nitro System AWS, product page, accessed October 14, 2026.
  7. Amazon EC2 instance type naming conventions AWS, documentation, accessed October 14, 2026.
  8. Key concepts for burstable performance instances AWS, documentation, accessed October 14, 2026.
  9. CPU options for Amazon EC2 instances AWS, documentation, accessed October 14, 2026.
  10. Supported CPU options for Amazon EC2 instance types AWS, documentation, accessed October 14, 2026.
  11. Amazon EC2 instance types AWS, documentation, accessed October 14, 2026.
  12. Burstable performance instances AWS, documentation, accessed October 14, 2026.
  13. Unlimited mode concepts for burstable instances AWS, documentation, accessed October 14, 2026.
  14. Amazon EBS volumes AWS, documentation, accessed October 14, 2026.
  15. What is Amazon Elastic Block Store? AWS, documentation, accessed October 14, 2026.
  16. Instance store temporary block storage for EC2 instances AWS, documentation, accessed October 14, 2026.
  17. Regions and Zones AWS, documentation, accessed October 14, 2026.
  18. Amazon EC2 Instance types AWS, product page, accessed October 14, 2026.
  19. Amazon EC2 M7g instances AWS, product page, accessed October 14, 2026.
  20. Amazon EC2 M7i instances AWS, product page, accessed October 14, 2026.
  21. Amazon EC2 M8g instances AWS, product page, accessed October 14, 2026.
  22. Amazon EC2 C7g instances AWS, product page, accessed October 14, 2026.
  23. Amazon EC2 R7g instances AWS, product page, accessed October 14, 2026.
  24. What is an Application Load Balancer? AWS, documentation, accessed October 14, 2026.
  25. Example: VPC with servers in private subnets and NAT AWS, documentation, accessed October 14, 2026.
  26. What is Amazon EC2 Auto Scaling? AWS, documentation, accessed October 14, 2026.
  27. Purchasing On-Demand Instances AWS, documentation, accessed October 14, 2026.
  28. Amazon EC2 On-Demand Pricing AWS, pricing page, accessed October 14, 2026.
  29. Amazon EC2 instance state changes AWS, documentation, accessed October 14, 2026.
  30. Elastic IP addresses AWS, documentation, accessed October 14, 2026.
  31. Amazon EC2 instance IP addressing AWS, documentation, accessed October 14, 2026.
  32. Amazon VPC pricing AWS, pricing page, accessed October 14, 2026.
  33. Understanding data transfer charges AWS, documentation, accessed October 14, 2026.
  34. Filtering the data that you want to view (Cost Explorer) AWS, documentation, accessed October 14, 2026.
  35. Knowing the differences between Billing and Cost Explorer data AWS, documentation, accessed October 14, 2026.
  36. Understand codes for Amazon VPC in billing and usage reports AWS, documentation, accessed October 14, 2026.
  37. What are Savings Plans? AWS, documentation, accessed October 14, 2026.
  38. Savings Plans types AWS, documentation, accessed October 14, 2026.
  39. Understanding how Savings Plans apply to your usage AWS, documentation, accessed October 14, 2026.
  40. Returning a purchased Savings Plan AWS, documentation, accessed October 14, 2026.
  41. Reserved Instances for Amazon EC2 overview AWS, documentation, accessed October 14, 2026.
  42. Compute Savings Plans and Reserved Instances AWS, documentation, accessed October 14, 2026.
  43. Spot Instances AWS, documentation, accessed October 14, 2026.
  44. Best practices for Amazon EC2 Spot AWS, documentation, accessed October 14, 2026.
  45. Amazon EC2 Dedicated Hosts AWS, documentation, accessed October 14, 2026.
  46. Capacity Reservation pricing and billing AWS, documentation, accessed October 14, 2026.
  47. COST07-BP01 Perform pricing model analysis AWS, whitepaper, accessed October 14, 2026.
  48. Identifying opportunities with Cost Optimization Hub AWS, documentation, accessed October 14, 2026.
  49. AWS Trusted Advisor AWS, documentation, accessed October 14, 2026.
  50. Cost optimization checks (AWS Trusted Advisor) AWS, documentation, accessed October 14, 2026.
  51. Understanding unexpected charges AWS, documentation, accessed October 14, 2026.
  52. Deregister an Amazon EC2 AMI AWS, documentation, accessed October 14, 2026.
  53. Amazon EBS snapshots AWS, documentation, accessed October 14, 2026.
  54. Recover deleted EBS volumes, EBS snapshots, and EBS-backed AMIs with Recycle Bin AWS, documentation, accessed October 14, 2026.
  55. How does Recycle Bin work? AWS, documentation, accessed October 14, 2026.
  56. Archive Amazon EBS snapshots AWS, documentation, accessed October 14, 2026.
  57. Amazon EBS General Purpose SSD volumes AWS, documentation, accessed October 14, 2026.
  58. Cost Optimization Pillar: Design principles AWS, whitepaper, accessed October 14, 2026.
  59. Instance Scheduler on AWS AWS, documentation, accessed October 14, 2026.
  60. What is AWS Compute Optimizer? AWS, documentation, accessed October 14, 2026.
  61. Viewing EC2 instance recommendations AWS, documentation, accessed October 14, 2026.
  62. Rightsizing recommendation preferences AWS, documentation, accessed October 14, 2026.
  63. EC2 instance metrics AWS, documentation, accessed October 14, 2026.
  64. AWS Compute Optimizer pricing AWS, pricing page, accessed October 14, 2026.
  65. AWS Graviton Processor AWS, product page, accessed October 14, 2026.
  66. Deciding which Savings Plans to purchase AWS, documentation, accessed October 14, 2026.
  67. Monitoring your Savings Plans AWS, documentation, accessed October 14, 2026.
  68. Target tracking scaling policies AWS, documentation, accessed October 14, 2026.
  69. Billing for interrupted Spot Instances AWS, documentation, accessed October 14, 2026.
  70. Placement groups for your Amazon EC2 instances AWS, documentation, accessed October 14, 2026.
  71. COST10-BP01 Develop a workload review process AWS, whitepaper, accessed October 14, 2026.
  72. Application Load Balancers AWS, documentation, accessed October 14, 2026.
  73. Elastic Load Balancing pricing AWS, pricing page, accessed October 14, 2026.
  74. Scaling policy based on Amazon SQS AWS, documentation, accessed October 14, 2026.
  75. Auto Scaling groups with multiple instance types and purchase options AWS, documentation, accessed October 14, 2026.
  76. Allocation strategies for multiple instance types AWS, documentation, accessed October 14, 2026.
  77. Amazon SQS pricing AWS, pricing page, accessed October 14, 2026.
  78. AWS Price List: Amazon EC2, eu-west-3 (offer file of October 12, 2026) AWS, price list, accessed October 14, 2026.
  79. AWS Price List: Savings Plans, eu-west-3 (offer file of October 13, 2026) AWS, price list, accessed October 14, 2026.
  80. AWS Price List: Amazon VPC, eu-west-3 (offer file of September 17, 2026) AWS, price list, accessed October 14, 2026.
  81. AWS Price List: AWS Data Transfer, eu-west-3 (offer file of September 16, 2026) AWS, price list, accessed October 14, 2026.
  82. AWS Price List: Elastic Load Balancing, eu-west-3 (offer file of September 11, 2026) AWS, price list, accessed October 14, 2026.
  83. AWS Price List: Amazon Simple Queue Service, eu-west-3 (offer file of September 11, 2026) AWS, price list, accessed October 14, 2026.

Quotations from AWS documentation are used under CC BY-SA 4.0.

Amazon Web Services, AWS and the names of AWS services are trademarks of Amazon.com, Inc. or its affiliates. Diagrams use the AWS Architecture Icons, unaltered.

More articles

AWS · AI

Amazon Bedrock pricing: how to cut the bill

Read
AWS · Databases

Amazon DynamoDB pricing and how to cut it

Read
AWS · Storage

Amazon S3: storage classes, pricing and how to cut the bill

Read