AzureのWeb AppのF1プラン（無料）ってどのくらい使えるの？

# はじめに

AzureでWeb Appを公開するときに、「無料の範囲だと、どのくらいの人数でどのくらいの回数を使えるの？」、「軽めの課金するなら、どのくらい使えるの？」という目安について物凄いザックリとしたメモです。『メモ』です。

Azure SQL Serverを使うWeb Appを例に考えてみた。結論から言うと、以下のようになった。

- とりあえず開発してみる（利用者は１人）：〇　⇒無料枠でOK！
- とりあえずサービス試行してみる（利用者は100名未満）：〇～△　⇒無料枠はギリギリ。SQLは課金必要な場合も？
- さぁ、サービスとしてしっかり提供しよう（100～1000人くらいまで見据える）：×　⇒しっかり課金しましょう。


なお当方のレベルは以下。

- AzureもWeb Appも触ってみて半年程度（SQL Serverは3カ月？）。
- 週末に、それも月１～２程度で趣味で遊んでいる。

※以下、「MiB」は「MB」もしくは「MByte」と略記。以下でのMBはMiBを意図。


# AzureのWeb App＆SQL Server周りの無料プラン～安めプランの仕様

今回にフォーカスするリソース上限だけをピックアップ。
無料枠や格安枠は、CPU利用時間がネックになる。
なお通信量も、同梱分の無料枠があるので、そこは意識する。
メモリ使用量も記載はするが、１ｈでリセットされるし、要するにプロセスのロード量なので、上限に引っかかることはまぁ無かろう。

## Web App : F1プラン（無料）

- 料金：0円
- CPU利用時間：60分／日 且つ 2.5分／5分まで。
- 送信データ量：165MB／日まで。ただし、余った分は翌日まで持ち越せる（1日分ロールオーバー）

その他。
- メモリ使用量：1024MB／ｈまで。
- 同時に建てられるインスタンスは10個まで。
- 利用できるストレージは1GBまで。

## Web App : Sharedプラン

- 料金：1168円（1.57円/ｈ × 1か月分）
- CPU利用時間：240分／日まで。

- メモリ使用量：1GBまで。

送信データ量は略。

## Web App : Basicプラン

- 料金：5691円（7.65円/ｈ × 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時間でのリソース消費量は以下のようになった。ただし、メモリ使用量は１ｈでリセットされるので、そのタイミングを起点とした。

- CPU時間：0.15分／ｈ
- 通信量：0.06MB／ｈ
- メモリ使用量：130MB
- データベース増加量：0.12MB／ｈ


実際の稼働グラフは以下のようになっていた。
![スクリーンショット 2017-05-24 20.57.12.png](https://qiita-image-store.s3.amazonaws.com/0/125588/f3f8a685-2558-eb10-fdbd-453839006b9f.png)


このとき、メモリ使用量は要するにプロセスの展開されたメモリサイズ＋ヒープサイズと見なせる。実際のところ、Windows10環境下で「node server.js」場合も100MB強ほど使われたので妥当。したがって、メモリ使用量に関しては時間軸との相関は無視できる。


## 無料のプラン、もしくは最低限の課金でどこまで使えるか？

上記のリソース使用量であれば、×24ｈしたところで以下の通りなので、
全てFreeプランの範囲で収まることが分る。
「とりあえず開発してみる（利用者は１人）」であれば、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.15*100=15分／ｈ
通信量：0.06*100=6MB／ｈ
データベース増加量：12MB／ｈ

**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／ｈ」の場合は上記の表から、以下のような目安でとらえれば良い、と言えるかな。

- サービスの提供時間を **2.5h ／日 程度に収めれば、完全に無料枠**の範囲、
- **4.0～16.0ｈ程度欲するなら、580円～1700円／月の課金**が必要（100円／人／月なら、20人でペイする）、
- 7300円／月を課金すれば、リソース制限は気にしなくてOK、

もちろんこれは一例なので通信頻度や記録するデータ量によっても変わる。誰かの参考になれば幸い。

※お試しするのに7292円の「Web App：Basicプラン＋SQL Server : Basicプラン」での運用は高いが、比較のために入れた。この「Web App：Basicプラン」ならCPUの利用時間に上限は無い。


# 補足

リソース消費量は、対象のWeb Appのインスタンスを選んで、左パネルから「クォータ」を表示することで参照可能。なお、CPU時間は1日単位なので、今回の検証では適当な１時間で差分を取った。

![スクリーンショット 2017-05-24 07.11.09.png](https://qiita-image-store.s3.amazonaws.com/0/125588/8af2f95b-8249-247f-7d78-4991b2935286.png)


# 参考リンク


[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