AWS AWSのRI/SP 共有時の削減効果をSQLで確認

2024年12月16日掲載

governance


ソフトバンクアドベントカレンダー
 16日目の記事です

AWSのRI(Reserved Instances)やSP(Savings Plans)を組織全体で共有することで、どれだけのコスト削減効果を得られているかを確認する方法を解説します。
CUR(Cost and Usage Report)のデータを、Athenaに格納していることを前提に、どのようなSQLクエリを組み立てるのかを紹介します。

この内容は、以下のような方に特に役立つでしょう:

  • クラウドコストの可視化に課題を感じている方
  • RI/SPの割引効果を最大限に活用したい方
  • 組織全体のAWSコスト管理を効率化したい方

RIの例ですが、この青枠の効果を調べることが目的です。

※記事内では、RI/SPを購入して共有するアカウントを、組織内の管理アカウント(マネージメントアカウント、支払いアカウント、ペイヤーアカウントと同義)とし解説していきます。
※CURのフォーマットは、legacyバージョンを使います。CUR2.0、FOCUSではありません。

目次

RI/SPのおさらい

CURからの抽出方法を説明する前に、RI/SPについて簡単におさらいしてみましょう。

AWSのRIとSPは、クラウド利用コストを最適化するための長期割引プランです。

  • RI(Reserved Instances)
    特定のインスタンス(例: EC2)に対して、1年または3年の利用契約を結ぶことで割引が適用されます。利用するインスタンスのタイプ(例: t3.medium)、リージョン、プラットフォーム(Linux/Windows)などを固定する必要があります。前払い、部分前払い、後払いの選択肢があり、最大72%の割引を受けることができます。ただし、契約したインスタンスタイプから変更する柔軟性は制限されています。
  • SP(Savings Plans)
    より広範なサービス(EC2、Fargate、Lambdaなど)に適用可能な柔軟な割引プランです。1時間あたりの利用金額を、1年または3年契約でコミットすることで、最大66%の割引が提供されます。インスタンスサイズやリージョン、プラットフォームをまたいだ利用にも対応可能で、利用パターンが多様な環境に適しています。

RIは特定のリソースを計画的に利用する場合に最適で、確定的な割引が得られます。一方、SPはリソースの利用パターンが流動的な場合や、多数のサービスを利用する環境に向いています。
まだ適用をしたことがない方は、ぜひ利用を検討してみるのがよいでしょう。

ただし、各アカウントのみに運用を任せると課題が生じるかもしれません。

RI/SPの共有メリット

RIやSPを共有する運用がなぜ効果的なのかを確認してみましょう。

まず、各メンバーアカウントが、独自にRIやSPを購入すること自体は問題ありません。それに加えて、RI/SPを組織的にも購入し適用していきます。組織内で共有するメリットとして以下あたりがあげられるでしょう。

  • 割引効果の最大化
     管理アカウント側で集中運用することで、余剰分を他のアカウントに適用でき、割引を最大限に活用できる。
  • 運用負担の軽減
     各アカウントで個別にRI/SPを管理する手間を省き、運用コストを削減できる。
  • リスク回避
     個別購入時に発生しがちな過剰購入や不足による損失を回避しやすくなる。

CURを使ったデータ分析

CURのデータはAthenaに格納しているとします。

以下のAWSアカウントIDを例示として使っています。

  • 管理アカウント:bill/PayerAccountId: 11111
  • メンバカウント:lineItem/UsageAccountId: 22222

RIの場合

SELECT
  "bill/PayerAccountId",
  "lineItem/UsageAccountId",
  ROUND(COALESCE(SUM("pricing/publicOnDemandCost"), 0), 6) AS "TotalPublicOnDemandCost",
  ROUND(COALESCE(SUM("lineItem/UnblendedCost"), 0), 6) AS "UnblendedCost",
  ROUND(COALESCE(SUM("reservation/EffectiveCost"), 0), 6) AS "EffectiveCost",
  ROUND(COALESCE(SUM("pricing/publicOnDemandCost"), 0) - COALESCE(SUM("reservation/EffectiveCost"), 0), 6) AS "TotalSavings",
  "lineItem/LineItemType"
FROM cur
WHERE
  dt = '2024-11'
  AND regexp_extract("reservation/EffectiveCost", 'arn:aws:[^:]+:[^:]*:(\\d+):') = "bill/PayerAccountId"
GROUP BY
  "bill/PayerAccountId",
  "lineItem/UsageAccountId",
  "lineItem/LineItemType"

EffectiveCost

Savings

LineItemType

11.0

9.0

DiscountedUsage

reservation/EffectiveCost列に注目してください。この列の値に、regexp_extractで正規表現を用います。RI購入元のアカウント(ここでは管理アカウント)のIDを抽出して判定条件にしています。

該当列の具体値を見ると正規表現の意味が分かると思います。
 例)arn:aws:ec2:ap-northeast-1:11111:reserved-instances/xxx

通常のオンデマンド料金20.0に対し、RI適用後は11.0に削減されています。総額で9.0の割引効果が得られたことがわかります。

(注意点)
UnblendedCostが0となっています。LineItemTypeがDiscountedUsage、つまりRI適用があった場合、UnblendedCostは必ず0になります。

UnblendedCostとして実コストの数字は、LineItemTypeの値がRIFeeの行に出ています。利用額の計算をする場合はそちらを使います。

SPの場合

続いてSPの場合です。RIと同じようにできればいいのですが、若干の相違点があります。SELECT文と結果をまずは見てみましょう。

SELECT
  "bill/PayerAccountId",
  "lineItem/UsageAccountId",
  ROUND(COALESCE(SUM("pricing/publicOnDemandCost"), 0), 6) AS "TotalPublicOnDemandCost",
  ROUND(COALESCE(SUM("lineItem/UnblendedCost"), 0), 6) AS "TotalUnblendedCost",
  ROUND(COALESCE(SUM("savingsPlan/SavingsPlanEffectiveCost"), 0), 6) AS "TotalSavingsPlanEffectiveCost",
  ROUND(
    COALESCE(SUM("pricing/publicOnDemandCost"), 0) - COALESCE(SUM("savingsPlan/SavingsPlanEffectiveCost"), 0),
    6
  ) AS "TotalSavings",
  "lineItem/LineItemType"
FROM cur`
WHERE
  dt = '2024-11'
  AND regexp_extract("savingsPlan/SavingsPlanARN", r'arn:aws:[^:]+:[^:]*:(\d+):') = 'bill/PayerAccountId"
GROUP BY
  "bill/PayerAccountId",
  "lineItem/UsageAccountId",
  "lineItem/LineItemType"

bill/PayerAccountId

lineItem/UsageAccountId

PublicOnDemandCost

UnblendedCost

11111

22222

20.0

20.0

11111

22222

0

-20.0

11111

22222

0

11.0

EffectiveCost

Savings

LineItemType

11.0

0

SavingsPlanCoveredUsage

NULL

20.0

SavingsPlanNegation

NULL

-11.0

SavingsPlanRecurringFee

SPの場合も正規表現を活用します。savingsPlan/SavingsPlanARNの具体値を見てみましょう。
 例)arn:aws:savingsplans:ap-northeast-1:11111:savingsplan/xxx

実コストと、削減額を同時に見る場合、LineItemTypeでグルーピングしないで1行に集約してもよさそうです。

bill_PayerAccountId

lineItem_UsageAccountId

PublicOnDemandCost

UnblendedCost

11111

22222

20.0

11.0

SavingsPlanEffectiveCost

TotalSavings

11.0

9

まとめ

RIやSPを組織内で共有することで得られるコスト削減効果を、CURのデータから把握する方法について解説しました。

次のステップとして、RI/SPの適用の効率的な運用を検討してみるのもいいかもしれません。私たちの場合は、クラウドのコスト管理のエキスパートが常に目を光らせているわけではありません。完全に自動化した仕組みを導入しています。RI/SPの誤った購入やキャンセルリスクを避ける運用も実現できています。

ソフトバンクアドベントカレンダー 17日目もおたのしみに!

関連サービス

ソフトバンクはAWS アドバンストティアサービスパートナーです。「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。

「Spot by NetApp」はパブリッククラウドの利用状況を分析・可視化し、クラウド利用コストを最適化するFinOpsソリューションです。お客さまの利用状況にあわせて、Amazon Web Services(AWS)のリザーブドインスタンスなどの割引プランをAIが自動で管理します。

おすすめの記事

条件に該当するページがございません