メンバーズ CUR でやってみよう!Savings Plans 使用率(Utilization)&カバー率(Coverage)編

メンバーズ CUR でやってみよう!Savings Plans 使用率(Utilization)&カバー率(Coverage)編

2025.07.29

今回は以下の環境で Savings Plans(SP)の使用率とカバー率をクラスメソッドが提供するレガシー CUR の仕様に則ったメンバーズ CUR で算出していきます。

検証環境情報:

  • メンバーアカウントで複数の EC2 インスタンス(t4g.nano)が稼働
  • EC2 Instance Savings Plans(前払いなし)と Compute Savings Plans(全額前払い)を購入
  • 一括請求(管理アカウント x1、メンバーアカウント x2)

事前準備

メンバーズ CUR と Athena での分析環境準備します。詳細な手順は下記をご確認ください。

  • メンバーズ CUR

https://guide.members.classmethod.net/ja/mcur/

  • Athena 分析環境

https://dev.classmethod.jp/articles/how-to-create-athena-analysis-environment-with-mcur/

https://dev.classmethod.jp/articles/cost-and-usage-report-csv-athena/

CUR でやってみよう

メンバーズ CUR 及び Athena での分析環境が準備できたら、早速やっていきましょう。

今回 CUR から取得した値の妥当性は AWS マネジメントコンソールで表示される値と比べることで確認していきます。

SP 使用率(Utilization)

以下のレポートの内訳に表示される内容を CUR から指定した期間での SP 使用率を取得します。

https://docs.aws.amazon.com/ja_jp/savingsplans/latest/userguide/ce-sp-usingPR.html

SELECT
  SPLIT_PART(savings_plan_savings_plan_a_r_n, '/', 2) AS "Savings Plan ID",
  savings_plan_offering_type as Type,
  savings_plan_instance_type_family as "Instance family",
  savings_plan_region as Region,
  TRY_CAST(((SUM(TRY_CAST(savings_plan_used_commitment AS DECIMAL(16, 8))) / SUM(TRY_CAST(savings_plan_total_commitment_to_date AS DECIMAL(16, 8)))) * 100) AS DECIMAL(3, 0)) AS Utilization,
  SUM(TRY_CAST(savings_plan_total_commitment_to_date AS DECIMAL(16, 4))) as "Total commitment",
  SUM(TRY_CAST(savings_plan_used_commitment AS DECIMAL(16, 4))) as "Used commitment",
  SUM(TRY_CAST(line_item_unblended_cost - savings_plan_savings_plan_effective_cost AS DECIMAL(16, 4))) AS "Net savings"
FROM 
  ${table_name} 
WHERE 
  ${date_filter}  
  AND savings_plan_savings_plan_a_r_n <> ''
  AND line_item_line_item_type  IN ('Usage', 'SavingsPlanCoveredUsage', 'SavingsPlanRecurringFee', 'SavingsPlanUpfrontFee')
GROUP BY
  1,2,3,4
ORDER BY
  1;
  • 管理アカウント - CUR から取得(7/1 - 7/26)
    スクリーンショット 2025-07-28 22.48.07
    スクリーンショット 2025-07-28 22.48.47

  • 管理アカウント - マネジメントコンソール(7/1 - 7/26)
    スクリーンショット 2025-07-28 23.09.25
    スクリーンショット 2025-07-28 22.47.16

  • メンバーアカウント - CUR から取得(7/1 - 7/26)
    スクリーンショット 2025-07-28 23.06.36
    スクリーンショット 2025-07-28 22.56.17

  • メンバーアカウント - マネジメントコンソール(7/1 - 7/26)
    スクリーンショット 2025-07-28 22.58.14

取得出来ました。

SP カバー率(Coverage)

続いては、以下のレポートの内訳に表示される内容を CUR から指定した期間での EC2 に対するカバー率を取得します。

https://docs.aws.amazon.com/ja_jp/savingsplans/latest/userguide/ce-sp-usingCR.html

with sp as 
(Select line_item_product_code as Service, product_instance_type_family as "Instance family", product_region as Region,
  SUM(CASE
    WHEN line_item_line_item_type = 'SavingsPlanCoveredUsage' THEN TRY_CAST(line_item_unblended_cost AS DECIMAL(16, 8))
    ELSE 0 
  END) AS "Spend covered by Savings Plan",
  SUM(CASE
    WHEN line_item_line_item_type = 'Usage' THEN TRY_CAST(line_item_unblended_cost AS DECIMAL(16, 8))
    ELSE 0 
  END) AS "On-Demand spend"
FROM 
  ${table_name} 
WHERE 
  ${date_filter}  
  AND line_item_line_item_type in ('SavingsPlanCoveredUsage', 'Usage') and line_item_product_code LIKE '%AmazonEC2%' and line_item_usage_type LIKE '%BoxUsage%'
 group by
  1,2,3)

 select *,
   TRY_CAST(("Spend covered by Savings Plan" / ("Spend covered by Savings Plan" + "On-Demand spend"))*100 AS DECIMAL(3, 0)) as Coverage
 from sp;
  • 管理アカウント - CUR から取得(7/1 - 7/26)
    スクリーンショット 2025-07-28 17.57.52

  • 管理アカウント - マネジメントコンソール(7/1 - 7/26)
    スクリーンショット 2025-07-28 23.13.05

  • メンバーアカウント - CUR から取得(7/1 - 7/26)
    スクリーンショット 2025-07-28 23.17.24

  • メンバーアカウント - マネジメントコンソール(7/1 - 7/26)
    スクリーンショット 2025-07-28 23.16.28

ほぼ等しい値を取得することが出来ました。

SP インベントリ

せっかくなのでインベントリ情報も CUR で取得してみます。

SELECT
  SPLIT_PART(savings_plan_savings_plan_a_r_n, '/', 2) AS "Savings Plan ID",
  savings_plan_offering_type as Type,
  savings_plan_instance_type_family as "Instance family",
  savings_plan_region as Region,
  savings_plan_total_commitment_to_date as "Commitment ($ per hour)",
  DATE_FORMAT(FROM_ISO8601_TIMESTAMP(savings_plan_start_time),'%Y-%m-%d %H:%i:%s') AS Start_date,
  DATE_FORMAT(FROM_ISO8601_TIMESTAMP(savings_plan_end_time),'%Y-%m-%d %H:%i:%s') AS End_date
FROM 
  ${table_name} 
WHERE 
  ${date_filter}  
  AND savings_plan_savings_plan_a_r_n <> ''
  AND line_item_line_item_type = 'SavingsPlanRecurringFee'
GROUP BY
  1,2,3,4,5,6,7
ORDER BY
  1;
  • 管理アカウント - CUR から取得
    スクリーンショット 2025-07-28 18.22.44

  • 管理アカウント - マネジメントコンソール
    スクリーンショット 2025-07-28 18.37.10

  • メンバーアカウント - CUR から取得
    スクリーンショット 2025-07-28 18.32.32

  • メンバーアカウント - マネジメントコンソール
    スクリーンショット 2025-07-28 18.30.43

こちらも良い感じの値が取得出来ました。

さいごに

今回、普段はマネジメントコンソールから確認することが多い SP 使用率とカバレッジに関する情報をメンバーズ CUR から取得しました。

冒頭にも記載した通り手元にある環境の特定パターンでの確認ではありますが、ほぼ再現出来たといっても良さそうです。マネジメントコンソールが利用できない場合や CUR をベースにした別ツールで可視化したい場合等では利用出来そうです。

参考情報

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.