How to find extended support charges on your AWS bill
AWS enrolls old versions in paid extended support automatically, so the fee often turns up on the bill before anyone notices. Here is how to find it.
What the line items look like
The prefix is the region code (USE1 is N. Virginia, USE2 is Ohio, EUW1 is Ireland). The engine and major version come at the end. Note that EKS writes extendedSupport with a lowercase e, so match it without case sensitivity.
| Service | Usage type on your bill | Billed by |
|---|---|---|
| RDS & Aurora, years 1–2 | USE2-ExtendedSupport:Yr1-Yr2:MySQL8.0 also e.g. …:PostgreSQL13, …:AuroraMySQL2 | vCPU-hour, per instance |
| RDS & Aurora, year 3 | USE2-ExtendedSupport:Yr3:MySQL5.7 | vCPU-hour, per instance (double the year 1–2 rate) |
| EKS | AmazonEKS-Hours:extendedSupport usually with a region prefix | cluster-hour |
| OpenSearch Service | a usage type containing ExtendedSupport | per normalized instance hour; from Nov 7, 2026, OpenSearch 1.0–1.2, 2.3–2.9 and Elasticsearch 1.5–7.8 (except 5.6) are billed at 100% of the instance price instead |
| ElastiCache (Redis OSS) | a usage type containing ExtendedSupport | premium on the node on-demand price (80% in years 1–2, higher in year 3) |
We couldn't confirm the exact OpenSearch and ElastiCache usage-type names in AWS docs, so we only say they contain "ExtendedSupport". The filters below catch them either way.
Read replicas and Multi-AZ standbys are billed too. RDS extended support is charged per vCPU on every instance running the old version, so one 4-vCPU primary with a Multi-AZ standby and two read replicas costs 4× the single-instance fee. Aurora bills each instance in the cluster.
Cost Explorer (2 minutes)
- Open Billing and Cost Management → Cost Explorer.
- Under Filters → Usage type, type ExtendedSupport and select every match.
- Under Charge type, keep only Usage so credits and refunds don't hide the cost.
- Set Group by to Usage type, then Linked account or Region to see where it comes from.
- Set the range to the last 3–6 months so you can see when it started.
Cost Explorer shows totals, not which instance or cluster. Use the Athena query to get resource IDs.
Athena query on your Cost and Usage Report
Works on CUR 2.0. It matches case-insensitively and also checks the line item description. It lists every resource paying extended support this month:
-- CUR 2.0 in Athena. Replace cur2 with your table name.
SELECT
line_item_usage_account_id AS account,
product_region_code AS region,
line_item_product_code AS service,
line_item_usage_type AS usage_type,
line_item_resource_id AS resource,
ROUND(SUM(line_item_unblended_cost), 2) AS cost_usd
FROM cur2
WHERE line_item_product_code IN
('AmazonRDS','AmazonEKS','AmazonES','AmazonOpenSearchService','AmazonElastiCache')
AND line_item_line_item_type IN ('Usage','DiscountedUsage')
AND (LOWER(line_item_usage_type) LIKE '%extendedsupport%'
OR LOWER(line_item_line_item_description) LIKE '%extended support%')
AND line_item_usage_start_date >= DATE_TRUNC('month', current_date)
GROUP BY 1,2,3,4,5
ORDER BY cost_usd DESC;CLI one-liners
Extended support charges by usage type for last month and this month so far (run from your payer account to see all accounts):
aws ce get-cost-and-usage \ --time-period Start=$(date -d "$(date +%Y-%m-01) -1 month" +%F 2>/dev/null || date -v1d -v-1m +%F),End=$(date +%F) \ --granularity MONTHLY --metrics UnblendedCost \ --group-by Type=DIMENSION,Key=USAGE_TYPE \ --query "ResultsByTime[].Groups[?contains(Keys[0],'ExtendedSupport') || contains(Keys[0],'extendedSupport')].[Keys[0],Metrics.UnblendedCost.Amount]" \ --output text
Then find which resources are on old versions (run per region):
# RDS & Aurora: engine and version of every instance (replicas included) aws rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier,Engine,EngineVersion,DBInstanceClass,MultiAZ]" --output table
# EKS: version of every cluster for c in $(aws eks list-clusters --query clusters --output text); do echo "$c $(aws eks describe-cluster --name $c --query cluster.version --output text)"; done
# OpenSearch: engine version of every domain for d in $(aws opensearch list-domain-names --query "DomainNames[].DomainName" --output text); do aws opensearch describe-domain --domain-name $d --query "DomainStatus.[DomainName,EngineVersion]" --output text; done
# ElastiCache: engine and version of every cluster aws elasticache describe-cache-clusters --query "CacheClusters[].[CacheClusterId,Engine,EngineVersion,CacheNodeType,NumCacheNodes]" --output table
Or paste that output into the checker to see which versions are past standard support. To see what a fix saves, use the calculator or the estimate box on each version page.