Matty Serapio← Back to work
Project · FinOps analytics

AMD and Graviton adoption

How far each business unit has moved its EC2 spend off Intel and onto AMD and Graviton, and what finishing the move could save. This is the same analysis I ran with large AWS customers, rebuilt on a synthetic Cost and Usage Report so it can be public.

AMD and Graviton adoption by business unit

Every level of the business unit mapping at once: level 1 organizations contain level 2 business units, which contain level 3 teams. Each team is sized by its share of EC2 spend and shaded by how much of its compute already runs on AMD or Graviton. The deeper the blue, the further along. Light tiles are where the opportunity is. Hover a team for its accounts.

AMD + Graviton adoption
0–20%20–40%40–60%60–80%80–100%

Processor mix by business unit

Share of non-GPU compute cost, sorted by how much still runs on Intel. The number on the right is the Intel share.

Biggest Graviton opportunities

Intel and AMD families with a Graviton equivalent, ranked by estimated monthly savings.

How it's built

Raw CUR rows are modeled in SQL in layers, tested, and published as marts that feed this page. The models use dbt-style ref() so they run in dbt unchanged.

Sourcecur_ec2.csv
(31,950 line items)
Stagingstg_cur__ec2
Intermediateint_ec2_compute
int_shared_cost_allocated
Martsmart_processor_mix
mart_bu_summary
mart_graviton_opportunities
-- Reallocate shared networking cost to level 3 teams in proportion to each
-- team's EC2 compute spend that day (compute proportional reallocation).
-- Allocating at the lowest level lets every level above roll up exactly.
with shared as (
    select c.usage_date, sum(c.cost) as shared_cost
    from {{ ref('stg_cur__ec2') }} c
    join {{ ref('account_business_units') }} a on c.account_id = a.account_id
    where a.bu_level_1 = 'Shared'
    group by 1
),
compute as (
    select usage_date, bu_level_1, bu_level_2, bu_level_3, sum(cost) as compute_cost
    from {{ ref('int_ec2_compute') }}
    group by all
),
weights as (
    select *, compute_cost / sum(compute_cost) over (partition by usage_date) as share
    from compute
)
select
    w.usage_date,
    w.bu_level_1,
    w.bu_level_2,
    w.bu_level_3,
    w.bu_level_2              as business_unit,
    w.share                   as allocation_share,
    s.shared_cost * w.share   as allocated_shared_cost
from weights w
join shared s using (usage_date)