EC2 pricing is a price per instance-second by family, size, operating system and tenancy, plus the EBS volumes, the public IPv4 addresses, data transfer and, depending on the instance, EBS optimisation, CPU credits and capacity reservations, each of which AWS meters under a usage type of its own. On the bill, the instance hours of machines that run around the clock almost always dominate; the second largest line in most accounts is not EC2 itself but what Cost Explorer sums up as EC2-Other.
Pricing dimensions
AWS does not price an instance as a whole but as a bundle of compute time and several side items, each carrying its own usage type. Compute time is the only item that ends with the instance's state; everything else keeps running as long as the resource exists.
| Dimension | Unit | What drives it | Optional |
|---|---|---|---|
| On-demand compute | Second per instance type, operating system and region, 60 seconds minimum per start | Family and size (vCPU, memory), operating system, time in the running state | No; ends with stop or terminate |
| Operating system and licence | Included in the instance type's hourly price | Linux, Windows, Windows with SQL Server, RHEL, SUSE, Ubuntu Pro; SUSE by full hours | Yes, through Linux or licences you bring |
| Tenancy | Hour per instance plus USD 2 per region and hour (Dedicated Instances); hour per host (Dedicated Hosts) | Single-tenant hardware; for a host, the hardware size, not the number of instances | Yes |
| Spot | Second per instance type at the variable spot price | Spare capacity in the zone and type; interruption with two minutes' notice | Yes (spot capacity) |
| Capacity reservation | Second per reserved instance type at the on-demand price, used or not | Capacity held in one availability zone; unused time appears as its own line | Yes |
| EBS optimisation | Hour per instance type | Only on older types where it has to be switched on; current types include it | Yes, by type |
| CPU credits | vCPU-hour at a flat rate | T instances in unlimited mode whose average load over 24 hours exceeds the baseline | Yes, through standard mode |
| EBS volumes | GB-month per volume type, plus IOPS and throughput | Every attached and every orphaned volume, also while the instance is stopped | Not for the root volume (EBS pricing) |
| Public IPv4 address | Hour per address, in use or not | Every public and every Elastic IP, also on stopped instances | Yes (load balancing and IPv4) |
| Data transfer | GB per direction and destination | Traffic to the internet, between regions and between availability zones | Yes (data transfer pricing) |
| Purchase option | Savings Plan or Reserved Instance instead of the list price | One- or three-year term, scope, payment option | Yes (AWS Savings Plans, AWS Reserved Instances) |
Compute time is billed per second according to the pricing page, with a minimum of 60 seconds per start, for Linux, Windows, Windows with SQL Server, RHEL and Ubuntu Pro; only SUSE Linux Enterprise Server is billed by the full hour. The clock runs from launch until the instance is stopped or terminated. A stopped instance produces no compute time, but its EBS volumes and its public IPv4 address keep billing, and an instance in the stopping or pending state does not count.
The instance type names family, generation, features and size: m7i.large is the m family (general purpose), the seventh generation, Intel processors and the large size with 2 vCPU. The letters after the generation distinguish processors and equipment, such as g for Graviton, a for AMD, d for local NVMe disks and n for more network bandwidth; within a family the price doubles with every size step. A newer generation is not automatically dearer: m7g.large costs less in Frankfurt than m6i.large. What each size costs in each European region is in the instance overview; the dimensions across all three providers are in virtual machines and instance families.
The operating system sits inside the instance type's price, not on a line of its own: the same m7i.large costs considerably more with Windows than with Linux, and the difference is the licence share. Whoever brings Windows or SQL Server licences uses them through Dedicated Hosts, which licences in the cloud describes. Dedicated Instances cost the instance price plus a fee of USD 2 per hour and region as soon as at least one Dedicated Instance runs there, whatever their number; a Dedicated Host is paid per host hour, and the instances on it appear at a price of 0.
A capacity reservation is charged at the on-demand price of the reserved type whether an instance runs in it or not, per second from the moment it is provisioned. While a matching instance runs you pay only the instance; the unused time appears as a line of its own. Savings Plans and regional Reserved Instances apply to the reservation too. That makes the reservation a capacity reservation without a discount, not a purchase option.
How it appears in your billing data
In the Cost and Usage Report every EC2 line carries the product code AmazonEC2, and the usage type says which dimension it is. Compute time appears as EUC1-BoxUsage:m7i.large for on-demand, EUC1-SpotUsage:m7i.large for spot, EUC1-DedicatedUsage:m7i.large for Dedicated Instances and EUC1-HostBoxUsage:m7i.large for instances on a Dedicated Host, whose own time appears as EUC1-HostUsage:m7i; the prefix is the region code, EUC1 for Frankfurt. Beside them stand EUC1-EBSOptimized:m5.large for EBS optimisation switched on, EUC1-Reservation:m7i.large for used and EUC1-UnusedBox:m7i.large for unused time of a capacity reservation, and EUC1-CPUCredits:t3 for the credits of a T instance in unlimited mode. The unit is the hour in every case, even though the metering is per second; lineItem/UsageAmount then holds fractions of an hour.
lineItem/Operation names the operation and the platform: RunInstances for Linux, with a suffix for the other operating systems, so the licence share is read from the operation, not from the usage type. lineItem/LineItemType separates Usage at the on-demand price, DiscountedUsage for hours under a Reserved Instance and SavingsPlanCoveredUsage for hours under a Savings Plan; the fees of the purchase options themselves stand on their own lines as RIFee, Fee and SavingsPlanRecurringFee. lineItem/ResourceId holds the instance ID, and product/instanceType, product/operatingSystem and product/tenancy the properties the price list is sorted by.
Under the product code AmazonEC2, however, there are also lines that are not an instance: the EBS volumes and snapshots (EUC1-EBS:VolumeUsage.gp3, EUC1-EBS:SnapshotUsage), the NAT gateway (EUC1-NatGateway-Hours, EUC1-NatGateway-Bytes), the public IPv4 addresses (EUC1-PublicIPv4:InUseAddress, EUC1-PublicIPv4:IdleAddress) and data transfer (EUC1-DataTransfer-Out-Bytes, EUC1-DataTransfer-Regional-Bytes). Cost Explorer separates them from the instance hours and shows them as the service EC2-Other; in the report they are the same lines with other usage types. To see an instance's full cost, group by lineItem/ResourceId or by tags, not by product code; to explain EC2-Other, group by usage type. The report's structure is described in the AWS Cost and Usage Report.
In the FOCUS export of Data Exports, Usage, DiscountedUsage and SavingsPlanCoveredUsage become ChargeCategory Usage, and the fees of the purchase options Purchase; PricingCategory separates Standard for on-demand, Dynamic for spot and Committed for hours under a commitment. ServiceName carries the product name Amazon Elastic Compute Cloud and the AWS column x_ServiceCode the code AmazonEC2; the usage type survives as x_UsageType and the operation as x_Operation, so the split between instance hours and side items works in the FOCUS export too (FOCUS columns).
Levers
Configuration: size is the largest lever, because the price within a family doubles with every step; rightsizing to the next smaller size halves the compute line. Generation is the second: a current generation is usually cheaper per vCPU than the one two steps before it and includes EBS optimisation at no extra charge. Graviton types (suffix g) sit below the Intel and AMD types of the same size in Frankfurt and run on ARM, which calls for a check of images and packages. Stopping instead of leaving an instance running ends the compute time; fixed running hours for development and test instances are covered in scheduling and auto-scaling. On T instances, standard mode keeps the cost at the hourly price, while unlimited mode turns sustained high load into a line of its own.
Purchase option: for a steady baseline, a Savings Plan lowers the hourly price across families, sizes and regions, and a Reserved Instance the price of one type in one region; which form fits is the subject of commitment strategy, and how much of it is actually used of commitment coverage and utilisation. Spot capacity is the option for interruptible batch and test load. A capacity reservation is not a discount; it pays off only where the capacity has to be there at a given moment, and is best combined with a Savings Plan.
Architecture: auto-scaling replaces permanent instances sized for the peak; containers on Fargate or functions on Lambda take workloads with long idle periods off the instance entirely (EKS, ECS and Fargate, Lambda pricing). Dedicated Hosts pay off only where licensing rules or isolation require them, because the host is paid in full even when half empty.
Where it goes wrong
- The instance is stopped, the bill barely drops. A stopped instance produces no compute time, but its volumes, snapshots and public IPv4 address keep billing. Look for lines with
EBS:VolumeUsageandPublicIPv4:IdleAddresswhose instance has been stopped for weeks (idle and orphaned resources). - EC2-Other grows faster than EC2. Cost Explorer shows volumes, NAT, IPv4 and data transfer under EC2-Other. Group by usage type; usually
NatGateway-BytesandDataTransfer-Regional-Byteslead, not the instances. - The reservation costs although nothing runs. A capacity reservation is charged at the on-demand price whether it is used or not. Lines with
UnusedBoxshow the unused time; a reservation without instances is cancelled or reduced. - The dedicated fee appears without warning. A single Dedicated Instance in a region triggers the fee of USD 2 per hour for that region, however small it is. Check whether the tenancy really has to be dedicated.
- T instances cost more than their hourly price. In unlimited mode, permanently busy T instances produce lines with
CPUCredits. An instance that constantly runs above the baseline is cheaper in an M or C family. - The Windows instance costs twice what was planned. The licence share sits inside the hourly price and stands on no line of its own. It can only be read from
lineItem/Operationand from the comparison with the Linux price of the same size. - The Savings Plan has no effect. Hours under a commitment appear as
SavingsPlanCoveredUsageorDiscountedUsage. If every line stays onUsage, the region, family or account does not match the commitment.
Example
On-demand list prices in USD for Frankfurt (eu-central-1), read on 2026-10-21 from the price list AWS publishes, dated 2026-10-15: an m7i.large (2 vCPU, 8 GiB) costs USD 0.12075 per hour with Linux, USD 88.15 for a month of 730 hours; the m7i.xlarge (4 vCPU, 16 GiB) USD 0.2415 and the m7i.2xlarge (8 vCPU, 32 GiB) USD 0.483 per hour, USD 176.30 and USD 352.59 a month. The same m7i.large costs USD 0.21275 per hour with Windows, USD 155.31 a month; the difference of USD 0.092 per hour is the licence share. The m7g.large on Graviton costs USD 0.0978 per hour with Linux, USD 71.39 a month, and the t3.medium (2 vCPU, 4 GiB) USD 0.048 per hour. A public IPv4 address costs USD 0.005 per hour in Frankfurt, USD 3.65 a month, in use or not. The figures show that the price within the family doubles exactly with every size step, that the Windows share of this size comes to about three quarters of the Linux price, and that the ARM variant sits just under a fifth below the Intel price.
Sources
Read on 2026-10-21. Prices: Amazon EC2 on-demand pricing, AWS Price List, offer AmazonEC2 for eu-central-1, AWS Price List, offer AmazonVPC for eu-central-1, Dedicated Instance pricing. Billing data: codes for Amazon EC2 in billing and usage reports, codes for Amazon EBS, codes for Amazon VPC, AWS Region billing codes, Cost and Usage Report columns: lineItem, FOCUS 1.0 with AWS columns and its columns. Service: Amazon EC2 billing and purchasing options, On-Demand Instances, Capacity Reservation pricing and billing, Dedicated Instances, EBS-optimized instances, CPU credits of burstable instances.