AWSビリングに出てくる償却コスト(EffectiveCost)

654

この記事では、AWSビリングに出てくるEffectiveCostについて、リザーブドインスタンス、および、SavingsPlanの購入費用とその利用実績費用の扱い方に合わせて説明しています。

1. リザーブドインスタンス、SavingsPlanの購入費用の按分

AWSのコスト最適化でもっとも使用されるリザーブドインスタンス(以下、RI)があります。

この購入費用と利用実績の費用按分について扱い方で困ったことはないでしょうか。

RIを利用している場合、費用を削減できたことは各サービスの利用料から判断できるのですが、前払いしている場合、購入費の内の幾ら分がRIとして適用されたのか?または、どのアカウントに適用されたのか?AWSの請求コンソール等から判断する手段がありません。

また、RIを購入した場合、どのリソースも適用されず消化した費用についても明示的に算出している機能はありません。唯一RIのUtilizationを確認することで購入しているRIの消化率を確認することができるぐらいになっています。

企業利用で会計処理を行っている場合、RIの購入費用を立替として計上し、利用部門で適用した実績費用を消込対象として計上することが多いのではないでしょうか。

利用されなかったRI購入費用の処理は企業によって異なると思いますが、利用部門へ均等に按分するか、共通費用として計上等でしょう。

AWSの場合、 AmortizedCostとして購入したアカウントに毎月算出されます。これを誰が負担するのかといった話になることが多いですが、企業内では以下の方法でしょうか。
1.利用料の割合で負担
2.均等に負担
3.サービス毎に利用した分だけ負担、余った分は購入元が負担
4.サービス毎に利用した分だけ負担、余った分は均等に負担
抽出方法に負担がかかるため、1,または、2の方法で処理していることが多いのではないでしょうか。

以降の説明で按分コストの抽出手順を示していきます。CURを直接読み込んで処理するにはデータ容量が大きい場合があるため、今回の説明ではGoogleCloudのBigQueryに取り込んだ状態からクエリで集計する前提とします。

2. SavingsPlanの按分コストを抽出

SavingsPlanの按分コストを算出する場合、次の2パターンの手順で抽出・コストの確認を行うことになります。

A.NoUpfrontで購入したSavingsPlan
B.Upfrontで購入したSavingsPlan

今回は、NoUpfrontで購入したSavingsPlanの按分手順を見てみます。

NoUpfrontの場合、購入時のレコードを参照する必要がないため該当月から以下のレコードを抽出します。

bill/billingentity = any
bill/billingtype = any
lineitem/lineitem_usagestartdate = any
lineitem/lineitemtype = SavingsPlanCoveredUsage, SavingsPlanRecurringFee
lineitem/usagetype = any
lineitem/productcode = any
savingsplan/savingsplanarn = any

次の結果の例では、購入アカウントと適用アカウントが同じですが、請求コストは購入アカウントのSavingsPlanRecurringFeeとして出力されます。
これは、SavingsPlanの仕様で適用した利用料レコードをSavingsPlanNagationで相殺するため各アカウントに適用されたコストは常に0になるためです。

コスト項目は、カラム名は長くなるため以下で省略しています。

uc:lineitem/unblendedcost
sec:savingsplan/savingsplaneffectivecost
sac:savingsplan/amortizedupfrontcommitmentforbillingperiod
src:savingsplan/recurringcommitmentforbillingperiod

この例では、購入アカウントに発生した請求コストはSavingsPlanの適用先にSavingsPlanCoveredUsageとして出力されています。
青枠の合算値がSavingsPlanRecurringFeeのUnblendedCostとして出力されていますが、Commitmentの価格が適用されているため元となる数値は赤枠のRecurringCommitmentforbillingperiodの集計値となります。

この例では適用先アカウントが同じため配賦処理が必要ありませんが、タグを利用してSavingsplanの利用コストを配賦したい場合は、メンバアカウント、および、タグの情報をもとにクロス集計することになります。

費用計上の処理をする場合、費用発生元は購入アカウントになりますが、複数のメンバアカウントに適用されている場合、消込先として各メンバアカウントに費用計上といったことが必要になるかもしれません。

SavingsPlanのコミットメントに満たない場合はどうなるでしょうか。

上記の例では、購入元と適用先のコストが合致するため消込先の突合は簡単に終わりますが、コミットメントに満たない場合、消込されない未使用の費用が残ることになります。

この場合、SavingsPlanRecurringFeeのコストからSavingsPlanCoveredUsageの差異を未使用SavingsPlanコストとして算出します。

このコストを配賦処理するのかは、社内の費用計上ルールによりますが平等に費用負担しましょうといったルールになる場合、これを利用者全体で均等に配賦するかもしれません。

以上がSavingsPlanのNoUpfrontのコスト按分方法になります。
次回は、AllUpfrontで購入した場合のコスト按分手順について説明したいと思います。

追記

未使用のSavingsPlanコストについて、以下の項目の集計値がSavingsPlanRecurringFeeに日次で出力されます。

savingsplan/totalcommitmenttodate
savingsplan/usedcommitment

このusedcommitmentがSavingsPlanCoveredUsageのEffectiveCostの合算値になります。
100%Commitmentが消化されている場合、同じ数字が出力されますが満たない場合はusedcommitmentが小さくなります。
この差分が未使用となったSavingsPlanのコストとなります。