Azure App Serviceを個人で2年間使ってみた感想【コストやスペック】

2021年1月2日土曜日

Web技術

Azure App Service

こんにちは、財前です。


本日は、Azure App Serviceを個人で2年間ほど使ってみた感想を書いていきたいと思います。


これからAzure App Serviceを使おうか迷っている方の、お役に立てましたら幸いです。



Azure App Serviceとは(特徴)


  • Azure版のHeroku(PaaSなので基盤の設定は必要なし)
  • ちゃんと使う場合、結構コストがかかる(月に6000円ぐらい)
  • 逆に、その金額を払えば、追加課金なく沢山のサービスを運用できる


上記の3点が、僕が感じるAzure App Serviceの特徴です。



Azure版のHeroku(PaaSなので基盤の設定は必要なし)


まず、PaaSなので、基盤の設定を全くしなくて良いのが、とても楽です。


自分はNode.jsASP.NET Core + ReactのアプリをAzure App Service上で運用していますが、とても手軽に使い始めることができました。


NodeASP.NET Coreをサーバー上で使えるようにするための環境構築なども不要です。

Visual StudioやAzureポータルからの簡単なGUI操作のみで、Webサービスを公開できます。

完全に設定済みの状態でサーバーを使い始めることができるので、お手軽です。


デプロイに関しても、以下の画像のように、Visual Studioからボタンをワンクリックするだけで、簡単にWebサービスとして公開できてしまいます:

Azure App Service デプロイ


また、拡張機能を入れれば、VSCodeからでも簡単にデプロイができます:
VSCode Azure App Service デプロイ



もうちょっとちゃんとやりたい人は、GitHubにPushしたタイミングで、それと連動して自動でデプロイされるようにすることも可能です。


また、HTTPS対応に関しても、

Azure App Service Managed Certificateというものが最近用意されたため、無料でSSL証明書を作って、Azure App Service上で運用しているWebサービスを、HTTPS対応させることができます:

Azure App Service Managed Certificate



とにかく手軽に、サーバーやインフラの設定などに悩まされることなく、アプリケーションづくりに専念できるところが、PaaSであるAzure App Serviceの良いところだと思います。



ちゃんと使う場合、結構コストがかかる(月に6000円ぐらい)


下記が、自分の2020年12月の、リソース別のコスト集計です:

Azure App Service コスト

一番上の、赤枠で囲まれた行がAzure App Serviceを使うに当たってのメインの費用ですが、「6,173円」となっていますね。


毎月こんな感じです。


一応、Azure App Serviceには無料プランもあるのですが、CPU利用制限などがあるため、遅かれ早かれ、運用しているうちに有料プランに変更する必要が出てくると思います。


参考までに、無料プランの利用制限は以下のようなものです:


  • CPU利用時間:「1日60分以内」 and 「5分間で2.5分以内」
  • 送信データ量:「1日165MB以内」(翌日までは持ち越し可能)


以下の画像は、無料(F1)、Shared(D1)、Basic(B1)の料金とスペックの一覧です:

Azure App Service プラン


運用しているうちに限界に達することになるとは思いますが、まずは無料プラン(F1)から利用開始してみるのも手かもしれません。

ただその場合、上述の無料のSSL証明書(Azure App Service Managed Certificate)は、無料プラン(F1)やSharedプラン(D1)は対象外のため、使えません。


また、後述しますが、Azure App Serviceは、1つのApp Service Plan内で複数のWebサービスを運用できます。

その場合、CPUやメモリなどの計算資源は、全てのWebサービス間で共有されます。

そのため、沢山のWebサービスを同時に運用して、サーバーを酷使したい場合は、やはり無料枠(F1)やShared(D1)では厳しいかもしれません。


自分はB1でもメモリ使用量がいつもギリギリのため、無料やSharedではダメです…

(そのため、月6000円ほどかかっています…)



逆に、その金額を払えば、追加課金なく沢山のサービスを運用できる


自分は現在、以下の3つのサイトを、1つのAzure App Service上で運用しています:



また、Webのバックエンド用のサーバーとは別に、日々コンテンツの自動生成などを行っているバッチ処理用のサーバーや、監視用のサーバーも立てているので、合計6つのApp Serviceを、1つのApp Service Plan内で運用しています:

Azure App Services

サーバー代に月6000円と言うと高く感じますが、その価格の範囲内で、いくつでもサービスを運用できるということであれば、そこまで悪くはないのかもしれません。


同時に運用できるサービスの数は、自分が利用しているB1プランでは無制限です。

無制限とは言っても、CPUやメモリなどの資源は全てのサービスで共有されているので、そういう意味での限界はあります。


自分は、以下の画像のように、そろそろメモリの使用量が限界に達しつつあるので、あまりバカスカ新しいサービスをリリースするわけにもいかない状況になっています…

Azure App Services Memory Percentage


ちなみに、B1プランでのメモリ容量は、1.75GBです:

Azure App Services B1 Plan



 

Azure App Serviceを使う前に検討すること


Azure App Serviceはとても使いやすくて素晴らしいのですが、やはりネックとなるのがコストです。

使い始めは無料プラン(F1)やShared(D1)でもいけるかもしれませんが、ユーザーが増えてきたり、運用するサービスの数を増やしたりすると、どこかで限界が来ます。


その為、最初にAzure App Serviceの利用を決める前に、以下の点は少し考えおいた方が良いかもしれません:


  • PaaSである必要があるか
  • 本当にサーバーが必要か
  • バッチ処理はFunctionsではダメか


PaaSである必要があるか

Azure App Serviceは、PaaSのため、使いたい技術に合わせて、既にセットアップ済みのサーバーを使うことができます。


もしその便利さを諦めることができれば、バーチャルマシンを立てて、自分でサーバーのセットアップをするのも選択肢の一つだと思います。


その場合、システム基盤のお世話も自分で行う必要が出てきますので、システムに障害があった場合の原因の切り分けなども、どの層で問題が起こっているのか、考えることが増えるというデメリットはあるかもしれません。


しかし、基盤構築も自分で行うことで、インフラ系の技術を身に着けたい人などは、PaaSを用いる必要はないかもしれません。


また、基盤の世話まで自分で行いたくない、かつ、コストも抑えたい人は、後述の選択肢を考えてみても良いかもしれません。



本当にサーバーが必要か

Webサービスはサーバーレスで構築するのも1つの手だと思います。


サーバーレスであれば、Always OnのAzure App Serviceを常に立てておく必要もありませんし、使った分だけ課金してもらうことができます。

サーバーサイドのロジックはAzure Functions上に実装して、呼び出しの量に応じて最低限の金額だけ課金できるような構成にしておけば、コストは最小限で済むはずです。


ただ、バックエンドで時間がかかる処理などを行いたい場合は、Functionsの処理時間の上限などに引っかからないように考慮する必要はあります。



バッチ処理はFunctionsではダメか

上述のサーバーレスの件と同じく、バッチ処理もFunctionsを用いて作成した方が、コストに関しては抑えられる場合があると思います。


自分の場合は、プログラム内で常に無限ループでコンテンツを生成し続ける必要があったことから、Functionsを用いてもコストを抑えられる可能性は低いと考えましたが、


たとえば1日に1回動けば良い処理などの場合は、Functionsで定時実行して、それ以外の時間はコストがかからないようにしておいた方が安上がりだと思います。



結論として、Azure App Serviceをお勧めするか


結論としては、

代替案を十分に考えた上で、使い始めた方が良い

と考えています。


特にコストの面です。


無料プランはありますが、ちゃんと使い始めると、スペックや利用制限的に課金しないと厳しくなってきます。


自分の場合は正直、ちゃんと検討した上でAzure App Serviceプランを使い始めたわけではありませんでした。


2年ほど前、今の会社に就職することが決まった時、実際に業務が始まる前に、現場と同じ開発環境に一刻も早く慣れておきたいと考えたことが利用のきっかけでした。


自分の会社はASP.NET CoreReactでシステムを作っているため、手早くAzure上にその環境を構築して、自分で何か作りながら、少しでも技術に慣れることが目的でした。


その後、作ったサイトを拡張したり、新たなサイトをリリースしたりしているうちに、もはやAzure App Serviceからサイトを切り離せなくなってしまった、という背景があります…笑


当時はAzureのことを何も分かっていなかったため、考えが及びませんでしたが、今考えると、Reactのサイトなんてサーバーレスで作っておいた方が安上がりだったのではないかと考えています。


とりあえずもうしばらくGoogle Adsenseで元を取れないか試みてみて、無理そうだったら、Azure App Serviceから別のサービスへの移行も検討してみようと思います…笑

(今更別のサービスに移行とか、大変そう…)



何も考えずに使い始めたAzure App Serviceですが、そろそろ使い始めて2年ということで、感じてきたことをこの記事に書いてみました。


結論、コスト以外は素晴らしいです。


この記事が、Azure App Serviceの利用を検討している方の、何か助けになれば幸いです。


最後まで読んで下さり、ありがとうございました。