フォーム読み込み中
ソフトバンクアドベントカレンダー 16日目の記事です
AWSのRI(Reserved Instances)やSP(Savings Plans)を組織全体で共有することで、どれだけのコスト削減効果を得られているかを確認する方法を解説します。
CUR(Cost and Usage Report)のデータを、Athenaに格納していることを前提に、どのようなSQLクエリを組み立てるのかを紹介します。
この内容は、以下のような方に特に役立つでしょう:
RIの例ですが、この青枠の効果を調べることが目的です。
※記事内では、RI/SPを購入して共有するアカウントを、組織内の管理アカウント(マネージメントアカウント、支払いアカウント、ペイヤーアカウントと同義)とし解説していきます。
※CURのフォーマットは、legacyバージョンを使います。CUR2.0、FOCUSではありません。
CURからの抽出方法を説明する前に、RI/SPについて簡単におさらいしてみましょう。
AWSのRIとSPは、クラウド利用コストを最適化するための長期割引プランです。
RIは特定のリソースを計画的に利用する場合に最適で、確定的な割引が得られます。一方、SPはリソースの利用パターンが流動的な場合や、多数のサービスを利用する環境に向いています。
まだ適用をしたことがない方は、ぜひ利用を検討してみるのがよいでしょう。
ただし、各アカウントのみに運用を任せると課題が生じるかもしれません。
RIやSPを共有する運用がなぜ効果的なのかを確認してみましょう。
まず、各メンバーアカウントが、独自にRIやSPを購入すること自体は問題ありません。それに加えて、RI/SPを組織的にも購入し適用していきます。組織内で共有するメリットとして以下あたりがあげられるでしょう。
CURのデータはAthenaに格納しているとします。
以下のAWSアカウントIDを例示として使っています。
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"
bill/PayerAccountId | lineItem/UsageAccountId | PublicOnDemandCost | UnblendedCost |
---|---|---|---|
11111 | 22222 | 20.0 | 0.0 |
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の場合です。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が自動で管理します。
条件に該当するページがございません