💲

Savings Plans 購入後に個別アカウントのコストを把握しようとしたら沼だった

2022/12/25に公開

TL; DR(概要)

Savings Plans 購入後に個別アカウントのコストを把握しようとしたら沼だったのでまとめました。

やりたいこと

AWS を複数カウント運用をしているが、Savings Plans 適用時でも各アカウントのコストを正しく把握したい。

想定しているユースケース

AWS Organizations を利用して複数アカウントのコスト管理を行っている。AWS の長期利用割引(Reserved Instance / Savings Plans)を購入したが、最近経理から内容について回答を求められた。

解説

AWS で出てくるコストの種類

AWS Cost Explorer で出てくるコストの集計方法は大きく分けて3種類あります。

名称 英語表記 概要 会計ベース SP/RI購入時の表示
非ブレンドコスト UnblendedCost 請求された期間のコスト 現金主義 請求された日に表示
償却コスト AmortizedCost 請求期間全体における実効コスト 発生主義 請求期間全体でコスト償却
ブレンドコスト BlendedCost SP/RI適用を含めた平均時間単価から算出したコスト 参考値 参考値

簡単にまとめると、以下となります。

名称 概要
非ブレンドコスト 実際に支払う請求書の金額
償却コスト 決算書に乗せる金額
ブレンドコスト 将来へのコストを予想する際に利用する

経理・財務担当者から「AWS のコスト」と言われたら

前後の文脈もありますが、概ね以下になることが多いです。

Reserved Instance / Savings Plans を利用していない場合や、単純に支払金額について求められたら、非ブレンドコスト(UnblendedCost)を
Reserved Instance / Savings Plans を購入している場合、償却コスト(AmortizedCost)を利用したほうが正しくなることが多いです。

※ブレンドコスト(BlendedCost)を出して、ドヤってしないように。。。。あくまでもブレンドコスト(BlendedCost)は参考値です。。。。。。

注意点

償却コスト(AmortizedCost)を利用しても、Reserved Instance / Savings Plans 購入時の消費税(Tax)は按分されない。(その月に一括計上される)
Savings Plans が適用されたリソースの確認は、Cost Explorer でも確認可能です。しかし、多数のアカウントがある場合、AWS コストと使用状況レポート (AWS CUR) からCSVファイルを追って確認することを検討する必要がある。

ユースケース:Savings Plans 購入時コスト集計方法の比較

12/14 に Reserved Instance / Savings Plans 1年を購入した場合、AWS Cost Explorer ではどのように表示されるか比較しましょう。

ご覧のとおり、同じタイミングで Reserved Instance / Savings Plans を購入しても、コストの集計方法で、大幅な表示金額の変化したと思います。

非ブレンドコスト

非ブレンドコストで表示しました

12/14 の費用は「Savings Plans の前払い費用」、「前払いの予約料金」、「Tax」が一括で計上されています。

償却コスト

償却コストで表示しました

12/14 の費用は、「Tax」 は一括計上されていますが、Reserved Instance / Savings Plans については、均等に按分されているため大きく費用は計上されていません。

ブレンドコスト

ブレンドコストで表示しました。

非ブレンドコスト同様に、12/14 の費用は「Savings Plans の前払い費用」、「前払いの予約料金」、「Tax」が一括で計上されています。

費用按分での問題点

AWS Organizations を利用し、Reserved Instance / Savings Plans を購入する場合、アカウント間の共有機能があります。
アカウント共有している場合、Reserved Instance / Savings Plans の適用について、どのアカウントなのか、どのインスタンスに適用するかを指定することができません。
そのため、部門に按分するために、どのアカウントに適用されたか確認したい要望があると思います。
これが、結構難解です。

Cost Explorerで表示させる場合

Organizations 全体もしくは単体アカウントであれば、追跡可能です。

Savings Plans 適用前の金額が知りたい

Cost Explorer のレポートパラメーターで以下を選択してください。

ディメンション:料金タイプ
料金タイプ:Savings Plan の対象使用量
次で集計したコスト:非ブレンドコスト
※Reserved Instance を確認したい場合、料金タイプに予約を含む文言を入れてください。

なお、今回のスクリーンショットは、レポートパラメーターを以下に指定しています。
料金タイプ:Savings Plan の前払い料金,Savings Plan の対象使用量,Savings Plan の取り消し,Savings Plan の定期料金

Organizations 全体での適用情報については表示可能です。

1つのアカウントでの適用情報については表示可能です。

2つのアカウントでの適用情報については合計値が表示されます。

そのため、アカウント毎のSavings Plans 適用されたか確認するには適切ではありません。

Savings Plans 適用後の金額が知りたい

こちらは実運用であまり使われないと思いますので、アコーディオンで記載します。

Savings Plans 適用後の金額が知りたい

次で集計したコストを償却コストで選択した場合は割引後の金額が表示されます。
Cost Explorer のレポートパラメーターで以下を選択してください。
ディメンション:料金タイプ
料金タイプ:Savings Plan の対象使用量
次で集計したコスト:償却コスト
※Reserved Instance を確認したい場合、料金タイプに予約を含む文言を入れてください。

なお、今回のスクリーンショットは、レポートパラメーターを以下に指定しています。
料金タイプ:Savings Plan の前払い料金,Savings Plan の対象使用量,Savings Plan の取り消し,Savings Plan の定期料金

Organizations 全体での適用情報については表示可能です。

1つのアカウントでの適用情報については表示可能です。

疑問:CLI でできないの?

AWS CLI Command Reference get-cost-and-usage を見る限り、Group By の Dimensions に Charge type が無いので無理そう。

AWS コストと使用状況レポート (AWS CUR)で計算する場合

この記事が詳しいので引用させていただきます。
Savings Plan に関するよくある質問:質問5. AWS利用料の明細について教えてください

SavingsPlanNegation と On Demand (SavingsPlanCoveredUsage) の費用が相殺され $0 になるため、利用料は「Savings Plan をコミットした金額のみの支払いとなる=ディスカウントされる」となります。

このBlogに記載されているAWS コストと使用状況レポート (AWS CUR)を見る限り、「アカウント」 × 「インスタンスファミリ」 × 「OS」 毎に 稼働時間を合計して On Demand 料金を計上、SavingsPlanNegation で値引きして相殺しているように推測できます。

そのSavingsPlanNegation ですが、SavingsPlanの適用金額が記載されたレコードは記載されますが、コスト配分タグは記載されないため、各アカウント毎に実施する場合、個別に集計する必要があります。

まとめ

いかがでしょうか?
ここだけでも、結構な沼だったと思います。
あとは、所属会社のルールに合わせてできる範囲で自動化を進めていただければと思います。

この記事が誰か困っている方に対して、一つのヒントになれば幸いです。

参考資料

Understanding your AWS Cost Datasets: A Cheat Sheet
AWS CLI Command Reference get-cost-and-usage
BlackBelt_CostExplorer
Reserved Instance 及び Savings Plan を感覚的に理解するスライドを公開しました
Savings Plans はどのように適用されるのか?
Savings Plan に関するよくある質問
Cost Explorer では満足できない、CURを使った実践的でちょっとディープなコスト管理術

Discussion