Serverless Operations, inc

>_cd /blog/id_251

title

サーバーレスの簡易コスト予測を負荷試験から行う方法

サーバーレスアーキテクチャの料金構成は基本的に実行単位での従量課金制であるため、そのコストの予測及び見積もりは非常に難しいです。

特に大きなトラフィックや膨大なデータ量を扱う場合には、それに応じてコストは高くなる傾向にあります。また、会社によっては経営層やエンジニアリングマネージャーに事前にコストの見積もりを求められるケースもあるでしょう。

コストを見積もる現実的なやり方は、実際にあなたのサーバーレスアプリケーションにトラフィックをかけることで課金を発生させ、それを元に1日もしくは1ヶ月の見積もりや将来的にアクセスが増えたときのコスト予測を行うことでしょう。

本記事ではそのやり方について解説しています。

見積もり対象となるアーキテクチャ

以下のような構成のサーバーレスアプリケーションを考えてみましょう。
SQSでデータを受け付けて、最終的にKinsis Streamsを通してRDSにデータが登録されるという構成になっています。

このアーキテクチャの中にはリクエスト数や実行時間に応じての課金になるSQS, Lambda, Kinesis Streamsと、インスタンスを立ち上げていた時間に応じて課金になるRDSが存在します。RDSは単純に(時間) x (インスタンスサイズ)ごとの単価でコストが算出されるため、計測の対象外とします。

課金の計測は「コスト配分タグ」を使っておこないます。つまり、計測対象のリソースにタグ付けを行い、そのコストをフィルタリング出来るようにします。

今回は、CloudFormationでデプロイし、そこにStack Tagsとして、Key: forecasting_cost, Value: app1をそれぞれ付与しました。

コスト配分タグの設定

リソースにタグを付けるだけではコストは計測されません。AWS Billingのメニューからデプロイ済みのタグに対してコスト配分タグを有効化しましょう。

もしあなたがAWS Organizationの機能を使ってその子アカウントでAWSリソースを動かしている場合は、一括請求の親となっているマスターアカウントにてこの設定を行ってください。

また、コスト配分タグはこの一覧に表示されているタグの中から有効にできます。そしてこの一覧に表示されるためにはまずタグの付いたリソースをAWSにデプロイしなければなりません。さらに、デプロイ直後はこの一覧に表示されないため、確認できない場合は表示されるまでしばらく待ちましょう

負荷をかけてコストを発生させる

コスト配分タグが付与できれば、実際に5分程度負荷をかけます。負荷を掛ける前にアプリケーションの特性からどのくらいのトラフィックが見込まれるかは想定を行いましょう。今回は仮に700RPS程度のトラフィックを想定して以下の通り負荷をかけました。

コストを確認して予測値を計算する

1日程度経てばCost Exploreからコスト配分タグでフィルタできるようになります。結果のCSVをダウンロードすると以下のような結果となりました。

Kinesis($)

Lambda($)

SQS($)

CloudWatch($)

Summary($)

0.0052342938

0.04321226

0.0969616

0.01323

0.1586381538

5分間負荷を掛けて$0.1454ということは1日で$0.1586 x 12(1時間) x 24(1日) = $45.69 、1ヶ月で$45.69 x 30(日) = $1,370くらいかかりそうということが分かります。

また、RDSがdb.m5.2xlarge1台でこのトラフィックを捌けたとします。すると1日で$0.94 x 24 = $22.56、1ヶ月で$22.56 x 30 = $676.8になります。

結果をまとめると、このアリケーションが常時700RPSのトラフィックを捌いた場合以下のようなコストがかかることが分かります。

Serverless Resources($)

RDS($)

Summary($)

1日

45.69

22.56

68.25

1ヶ月

1,370

676.8

2,046.8

まとめ

このように負荷試験を行うことで、ミニマムの料金を実際に発生させ、そこから掛け算を行うことで簡易的にコストの想定を行うことが可能となります。

ただし、あくまで簡易的な予測であることに注意してください。常時一定のトラフィックが流れるアプリケーションはそうないでしょう。しかしながらコスト予測を顧客や上司に提示した上でビジネスを進める必要のあるケースは多いと思います。

特にサーバーレスの場合はトラフィックボリュームが大きくなるほど、そのコストは読みづらくなります。そんな時にコストの予測を行うことでステークホルダーに対してある程度の合意を取りつつ、プロジェクトが進めやすくなるケースもあるのでは無いでしょうか。

Written by
CEO

堀家 隆宏

Takahiro Horike

  • Facebook->
  • X->
  • GitHub->
Back
to list
<-