// billing

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.

ServiceUsage type on your billBilled by
RDS & Aurora, years 1–2USE2-ExtendedSupport:Yr1-Yr2:MySQL8.0
also e.g. …:PostgreSQL13, …:AuroraMySQL2
vCPU-hour, per instance
RDS & Aurora, year 3USE2-ExtendedSupport:Yr3:MySQL5.7vCPU-hour, per instance (double the year 1–2 rate)
EKSAmazonEKS-Hours:extendedSupport
usually with a region prefix
cluster-hour
OpenSearch Servicea usage type containing ExtendedSupportper 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 ExtendedSupportpremium 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)

  1. Open Billing and Cost Management → Cost Explorer.
  2. Under Filters → Usage type, type ExtendedSupport and select every match.
  3. Under Charge type, keep only Usage so credits and refunds don't hide the cost.
  4. Set Group by to Usage type, then Linked account or Region to see where it comes from.
  5. 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.

Sources

Get warned before the next version starts costing more

Every Monday: each AWS version (EKS, RDS, Aurora, Lambda and more) leaving standard support in the next 90 days, and the extended-support fee AWS starts charging. Enough lead time to upgrade first. Free.

Free weekly email, Mondays. Unsubscribe anytime.