はじめに
AzureでWeb Appを公開するときに、「無料の範囲だと、どのくらいの人数でどのくらいの回数を使えるの?」、「軽めの課金するなら、どのくらい使えるの?」という目安について物凄いザックリとしたメモです。『メモ』です。
Azure SQL Serverを使うWeb Appを例に考えてみた。結論から言うと、以下のようになった。
- とりあえず開発してみる(利用者は1人):〇 ⇒無料枠でOK!
- とりあえずサービス試行してみる(利用者は100名未満):〇~△ ⇒無料枠はギリギリ。SQLは課金必要な場合も?
- さぁ、サービスとしてしっかり提供しよう(100~1000人くらいまで見据える):× ⇒しっかり課金しましょう。
なお当方のレベルは以下。
- AzureもWeb Appも触ってみて半年程度(SQL Serverは3カ月?)。
- 週末に、それも月1~2程度で趣味で遊んでいる。
※以下、「MiB」は「MB」もしくは「MByte」と略記。以下でのMBはMiBを意図。
AzureのWeb App&SQL Server周りの無料プラン~安めプランの仕様
今回にフォーカスするリソース上限だけをピックアップ。
無料枠や格安枠は、CPU利用時間がネックになる。
なお通信量も、同梱分の無料枠があるので、そこは意識する。
メモリ使用量も記載はするが、1hでリセットされるし、要するにプロセスのロード量なので、上限に引っかかることはまぁ無かろう。
Web App : F1プラン(無料)
- 料金:0円
- CPU利用時間:60分/日 且つ 2.5分/5分まで。
- 送信データ量:165MB/日まで。ただし、余った分は翌日まで持ち越せる(1日分ロールオーバー)
その他。
- メモリ使用量:1024MB/hまで。
- 同時に建てられるインスタンスは10個まで。
- 利用できるストレージは1GBまで。
Web App : Sharedプラン
-
料金:1168円(1.57円/h × 1か月分)
-
CPU利用時間:240分/日まで。
-
メモリ使用量:1GBまで。
送信データ量は略。
Web App : Basicプラン
-
料金:5691円(7.65円/h × 1か月分)
-
CPU利用時間:上限なし(1core 占有)
-
メモリ:1.75 GBまで
-
ストレージ10 GB
送信データ量は略。
Azure SQL : Freeプラン
-
料金:0円
-
データベースの最大サイズ:32MBまで。
-
パフォーマンス:~5DTU
※Web Appからの連携前提でしか利用できないので注意。
Azure SQL : Basicプラン
-
料金:575円(\0.78/時間 × 1か月分)
-
データベースの最大サイズ:~2GBまで
-
パフォーマンス:~5DTU
実際のリソース消費例
試算のベースとなるリソース消費量
以下のようなWeb APP + SQL Serverでのサービス提供の場合を、例にとって試算してみる。
- 5分に一回のポーリングで100Byte未満のデータを送付してSQLデータベースに記録(POST)。
- ときおり、10KB程度のデータをSQLデータベースから参照(GET)。
試行したソースコードは以下。
アプリはNode.jsで作成して、通信はRESTful APIを用いて行った。
https://github.com/xingyanhuan/fluorite-restful-sample
この場合の、1時間でのリソース消費量は以下のようになった。ただし、メモリ使用量は1hでリセットされるので、そのタイミングを起点とした。
- CPU時間:0.15分/h
- 通信量:0.06MB/h
- メモリ使用量:130MB
- データベース増加量:0.12MB/h
このとき、メモリ使用量は要するにプロセスの展開されたメモリサイズ+ヒープサイズと見なせる。実際のところ、Windows10環境下で「node server.js」場合も100MB強ほど使われたので妥当。したがって、メモリ使用量に関しては時間軸との相関は無視できる。
無料のプラン、もしくは最低限の課金でどこまで使えるか?
上記のリソース使用量であれば、×24hしたところで以下の通りなので、
全てFreeプランの範囲で収まることが分る。
「とりあえず開発してみる(利用者は1人)」であれば、24時間且つ7日間使い続けても、データベースもまだFreeの範囲で収まる。
上限時間 | 24h | 7days | Freeプラン上限 |
---|---|---|---|
DB追加量 | 2.8MB | 19.6MB | ~32MB |
CPU時間 | 3.6分 | 1日でリセット | ~60分/日 |
通信量 | 1.44MB | 1日でリセット | ~164MB/日 |
続いて、「とりあえずサービス試行してみる(利用者は100名未満)」場合を考えよう。
簡単のため、全ての利用者は同じ利用頻度とする。
仮に 100人 に提供する場合は、1時間当たりの消費量は単純に100倍になるので以下と推定できる。
CPU時間:0.15100=15分/h
通信量:0.06100=6MB/h
データベース増加量:12MB/h
2.5時間と少し でデータベースのリソース上限32MBに達してしまうことが分かる。逆に言うと、1人当たりの1日の利用時間が2.5時間までのサービス(それ以前のデータは削除する)なら成立する。
SQLデータベースをBasicプランにスケールアップしたとすると、最安の575円でリソース上限は~2GBになる。よって、7日間くらい まで(データ蓄積)利用可能になる。
しかし、こんどは 4時間経過 時点でCPUが1日のリソース上限に達する。逆に言うと、1人当たりの1日の利用時間が4時間未満のサービスなら成立する。
100人利用の場合を表にしてみよう。
上限時間 | 2.5 h | 4.0 h | 16.0 h | 24 h |
---|---|---|---|---|
DB追加量(MB) | 30 | 48 | 192 | 288 |
CPU時間(分) | 37.5 | 60 | 240 | 360 |
通信量(MB) | 15 | 24 | 96 | 144 |
App Free + DB Free | ○:0円 | ×:DBが上限超え | ×:DBが上限超え | ×:DBが上限超え |
App Free + DB Basic | ○:576円 | ○:576円 | ×:CPUが上限超え | ×:CPUが上限超え |
App Shared + DB Free | ○:1738円 | ○:1738円 | ○:1738円 | ×:CPUが上限超え |
App Basic + DB Basic | ○:7292円 | ○:7292円 | ○:7292円 | ○:7292円 |
今回の試算で用いたサンプル「5分ごとにポーリングで100Byteほど送信、データベースの増加分は0.12MB/h」の場合は上記の表から、以下のような目安でとらえれば良い、と言えるかな。
- サービスの提供時間を 2.5h /日 程度に収めれば、完全に無料枠の範囲、
- 4.0~16.0h程度欲するなら、580円~1700円/月の課金が必要(100円/人/月なら、20人でペイする)、
- 7300円/月を課金すれば、リソース制限は気にしなくてOK、
もちろんこれは一例なので通信頻度や記録するデータ量によっても変わる。誰かの参考になれば幸い。
※お試しするのに7292円の「Web App:Basicプラン+SQL Server : Basicプラン」での運用は高いが、比較のために入れた。この「Web App:Basicプラン」ならCPUの利用時間に上限は無い。
補足
リソース消費量は、対象のWeb Appのインスタンスを選んで、左パネルから「クォータ」を表示することで参照可能。なお、CPU時間は1日単位なので、今回の検証では適当な1時間で差分を取った。
参考リンク
[App Service の価格]
https://azure.microsoft.com/ja-jp/pricing/details/app-service/
[App Service プラン]
https://azure.microsoft.com/ja-jp/pricing/details/app-service/plans/
[Azure サブスクリプションとサービスの制限、クォータ、制約]
https://docs.microsoft.com/ja-jp/azure/azure-subscription-service-limits
[データ転送の料金]
https://azure.microsoft.com/ja-jp/pricing/details/bandwidth/
[データベース トランザクション ユニット (DTU)]
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-what-is-a-dtu
[価格 - SQL Database]
https://azure.microsoft.com/ja-jp/pricing/details/sql-database/
[EXEC sp_spaceused] - データベースの現時点の利用サイズを取得
https://msdn.microsoft.com/ja-jp/library/ms190674.aspx