Azure研究サイト

Azure研究サイト

~理解しずらい情報をシンプルにお伝えします~

AppServiceとFunctionsの違い(アプリケーション開発向け)

AppServiceとFunctions(関数アプリ)の違い

AppServiceとFunctionsの共通点は、以下の画像のように外部からアクセスされて、Azureサーバ上でアプリケーションが実行されるというのが基本的な動作です。
ただ、Functionsでは、以下画像のようにクライアントから呼び出されなくてもAzureのアプリが実行されるパターンもありますのでその点も頭に入れて読み進めてください。
 

 
 

  • [App Service]: Webシステム(画面あり)やAPI(画面なし)などのサーバ上に常駐起動させるアプリに使われます。(公式ドキュメント

  • [Functions(関数アプリ)]: バッチ処理のような短い処理を実行する際に使われます。(公式ドキュメント

 

スケールアップ・スケールアウト・プログラムコードのデプロイ方法などの仕組みに、違いはありません。大きく違いがあるのはアプリケーションが実行されるきっかけ(トリガー)と、Azureの料金プラン(料金プランの違いに伴い、Azureサーバ上の動作も変わるのでここは重要)による違いがあるところがポイントです。
 
 
 
それでは、それぞれ説明していきます。
 

AppServiceとは

よくある、画面があって画面操作によって色々な処理が行われるアプリケーションはほとんどAppServiceを使用すると思って良いと思います。AppServiceのアプリケーションを一つ作って、その中でFunctionsの小さい処理を呼び出したりSQLDatabaseでデータベース処理したりStorageAccountでファイル入出力したりして組み合わせてアプリケーションを育てていくイメージです。
 

AppServiceアプリケーション実行までの流れ

  1. AppServiceを作る(このとき、言語やリージョンを選択する)
  2. 実装したプログラムコードをデプロイする
  3. ブラウザなどからアプリの画面操作などによりAppServiceアプリを実行する

 

Azure上のリソースの作り方

これはAppServiceに限った話ではないですが、「1. AppService」のようなAzure上のリソースの作り方は複数あるので、思いつく限りにあげてみます。
 

 

Functions(関数アプリ)とは

まず、「Functions(ファンクション)」と「関数」は別のものを指しています。以下を見て関係を確認してください。

  ー Functions(関数アプリ)の名前が、UserDataAppで
  ー 関数-1の名前が、AddUserHttpTrigger
  ー 関数-2の名前が、GetAllUserTimerTrigger
  ということになり、Functionsが親で、関数が子の関係になります。
 

関数アプリのプログラム設計と考え方

先ほど説明したとおり、Functionsは土台で、Functionsの中に作る関数-1・関数-2が、プログラムコードをもっていて実際に実行されるアプリケーションです。
Functionsの関数アプリの中でも、別のFunctionsを呼び出したりSQLDatabaseでデータベース処理したりStorageAccountでファイル入出力したりして組み合わせることができます。しかし、Microsoft側はFunctionsアプリで重たい処理をさせる想定していませんので、推奨されているアプリケーション設計としては、関数アプリA一つにすべての処理を詰め込めずに関数アプリAで前段処理をやらせて正常終了したら関数アプリBで後発処理をやらせるなどして、一つの関数アプリをできるだけ小さく設計するのが理想です。
 
例えば、以下の公式ドキュメントがありますが、従量課金プランは原則5分以内に関数アプリの処理を終わらせてください。関数アプリの処理時間が5分超えるとAzure側で強制終了させられてしまって処理結果:タイムエラーになりますよ、と書かれています。

f:id:exemple:plain title=
learn.microsoft.com

 

関数のトリガーについて(AppServiceとの違い)

Functionsの中に関数を作成していくのですが、そのときにいずれかのトリガーを選択します。すると、関数は選択したトリガーがきっかけで、関数アプリケーションが実行されます。
 
 
選べるトリガーの種類(一部)

Functions トリガー種類
Httpトリガー URLをHTTP/HTTPS通信で呼ばれたら実行される。

AppServiceのようにクライアントのブラウザからURLを叩いて実行できますし、AppServiceやFunctionsのいずれかのアプリからAPI実行の要領で呼び出して実行することもできます。
Timerトリガー 15分ごと・1時間ごとのようにスケジューラ通りに実行される。

タイマー管理はAzure側でやってくれるので、クライアント側から呼び出すことをせずに、Azure側で勝手にFunctionsアプリを起動してくれます。
BlobStorageトリガー BlobStorageコンテナーにファイルが追加されたら実行される。アップロードされたファイルを読み込んでDB登録などを簡単に実現できます。

こちらもコンテナーにファイルがアップロードされたかどうかはAzureがずっと監視してくれているので、クライアント側から呼び出すことをせずにAzure側で勝手にFunctionsアプリを起動してくれます。

など (2021.06.27現在で、18個もありました 笑)  
 

関数アプリケーション実行までの流れ

  1. Functionsを作る(このとき、言語やリージョンを選択する)
  2. Functionsの中に関数を作る(このとき、トリガーを選択する)
  3. 実装したプログラムコードを関数に対してデプロイする
  4. 設定したトリガーが動作すると関数アプリケーションが実行する

 
 
「1. Functionsを作る」「2. Functionsの中に関数を作る」といった感じで、階層構造になることを覚えておいてください。一つの Functionsの中に複数の関数を作れます。  
 

AzureFunctionsを覚えるならやっぱりこの本

 
AppServiceとFunctions(関数アプリ)と関数がそれぞれどんなものかわかったでしょうか。
AppServiceとFunctionsの料金プランを理解することも、とても重要なのでこちらの記事も見ていただけたらと思います。

www.azureportal-site.com

 

以上です。
 

最終更新 2023/2/3
ご意見・ご要望はこちらへ 


/*--------------------------------------------------------------------*/