AWS True Unblended Calculation – Ripple、Waveの背後にあるコードロジック

こちらの内容は AWS True Unblended Calculation – The code logic behind Mobingi Ripple and Wave. の参考訳です。


こちらの記事は、我々がAWSのコストをどのように分析し計算するかについて、モビンギのプロダクト Ripple と Wave の背後にあるプログラミングロジックを要約しています。
AWSアカウントの利用量を収集し把握するためには、AWS Cost and Usage report(CUR)を有効にし、CSV形式のビッグデータをAWSのマスターアカウント下のS3バケットにダンプするのが一番良い方法です。
これらのデータには、EC2の稼働時間、インスタンスタイプ、リザーブドインスタンス(RI)のレコード、CPU使用率、ストレージI/Oなど、使用状況の詳細と属性が全て含まれています

背景

2018年、私たちは、AWSのコストの計算と分析を行うツール Mobingi Ripple と Mobingi Wave の提供を開始しました。

それら二つのサービスは、共通の(アカウントの利用量とコストを計算するための)ロジックが適用されています。
そのロジックとは、インスタンスへのRIの適用、(同じ AWS Organizations 直下の)リンクされたアカウント間でのRIの再割り当て、スポットインスタンスまたはオンデマンドインスタンスのハンドリング、データ転送とDynamoDB他、AWSが提供する全ての製品の計算を行います。

我々の挑戦

AWSアカウントの利用量を収集し把握するためには、AWS Cost and Usage report(CUR)を有効にし、CSV形式のデータをAWSのマスターアカウント下のS3バケットにダンプします。
これらのデータには、EC2の稼働時間、インスタンスタイプ、リザーブドインスタンス(RI)のレコード、CPU使用率、ストレージI/Oなど、使用状況の詳細と属性が全て含まれています。

通常のAWSアカウントの場合、ひと月分の使用量が1つのCSVに含まれ、大抵数百MB程度です。
大規模にAWSを利用されるアカウントであれば、それぞれ1GB程度の複数のCSVファイルに分割されたギガバイト単位のデータが生成されることがあります。

CSVファイルの中身の各行はLineItemと呼ばれ、1時間あたりのサービス利用状況を表します。
例:

(一つのアカウントの利用量に、上記のようなLineItemが何百万も含まれていると想像してください。)

ビックデータレポートの分析または可視化のために、AWSは Redshift データウェアハウスまたは quicksight を用意しています。
しかし、二つの大きな課題があるように見えます。

– 実装するためのプログラミング知識が要求され、さらに維持することが難しい
– EC2、RDSでなどで購入できるRIを適用した再計算に関して、柔軟性がない

EC2の再計算

以下の状況を検討してみます。

MSPもしくはエンタープライズ企業が、顧客やグループ企業に請求書を発行する必要があるとします。

マスターアカウント A と、その下に 3 つのメンバーアカウント B, C, D がいるとします。

アカウント B は RI を複数所有していますが、全てを消費しませんでした。

アカウント C と D は RI を所有していませんが、アカウント A の余りの RI を消費しました。その結果、想定よりも低いコストとなります。

マスターアカウント A は AWS より請求書を受けとり、メンバーアカウント B, C, D へ正しい使用料で請求書を発行したいとします。

B: RI が適用された請求書

C: RI が適用されていない請求書

D: RI が適用されていない請求書

上記の場合、AWSから受け取った請求書は機能しません。
非ブレンドコスト、ブレンドコストのどちらを使用しても、合計は常に請求額したい金額よりも少なくなります。
つまり自分自身でEC2のコストを再計算する状況です。

私たちの会社では、そのコスト計算を True Unblended と呼んでいます。

その概念はかなり単純です:

EC2インスタンスの稼働時間 x 一時間当たりのインスタンス料金 = コスト

しかし、計算にその概念を適用すると、数式に影響を与える可能性のある要因が多数存在することにすぐに気がつくでしょう。

– Instance Type
– Size-flexibility(リージョンを考慮したLinux/Unix RI)
– Availability Zone
– Operation(オペレーションごとに価格設定は異なります)
– UsageType(オンデマンド、スポット、ディスク使用量…)
– その他色々…

計算に数式を適用する時は、全ての特質を考慮しなければなりません。
また、全てのデータは元のCSV形式のCURで定義されているので、CSVデータの各列が何を表しているのかを知っておくと便利です。その結果、必要なLineItemをフィルタできます。

Related Posts

DevRel的な電子書籍の活用と出版に関するTIPS

皆さんは電子書籍を出版した...