AppServiceとFunctions(関数アプリ)の違い
まずは、AppService(アップサービス)とFunctions(ファンクション)がそれぞれどういうものかを説明します。
まずAppServiceとFunctionsの共通点としては、以下の画像のように外部からアクセスされて、Azureサーバ上でアプリケーションが実行されるというのが基本的な動作です。ただ、後で説明しますがFunctionsに関しては、以下画像のようにクライアントから呼び出されなくてもAzureのアプリが実行されるパターンもありますのでその点も頭に入れて読み進めてください。
● AppServiceは、Webシステム(画面あり)や API(画面なし)などのサーバ上に常駐起動させるアプリに使われます。
(公式ドキュメント)
● Functions(関数アプリ)は、バッチ処理のような短い処理を実行する際に使われます。
(公式ドキュメント)
スケールアップ・スケールアウト・プログラムコードのデプロイ方法などの仕組みに、違いはありません。
詳細は後述しますが、大きく違いがあるのはアプリケーションが実行されるきっかけ(トリガー)と、Azureの料金プラン(料金プランの違いに伴い、Azureサーバ上の動作も変わるのでここは重要)による違いがあるところがポイントです。
それでは、それぞれ説明していきます。
AppServiceとは
よくある画面があって画面操作によって色々な処理が行われるアプリケーションはほとんどAppServiceを使用すると思って良いと思います。AppServiceのアプリケーションを一つ作って、その中でFunctionsの小さい処理を呼び出したりSQLDatabaseでデータベース処理したりStorageAccountでファイル入出力したりして組み合わせてアプリケーションを育てていくイメージです。
AppServiceアプリケーション実行までの流れ
1.AppServiceを作る(このとき、言語やリージョンを選択する)
2.実装したプログラムコードをデプロイする
3.ブラウザなどからアプリの画面操作などによりAppServiceアプリを実行する
Azure上のリソースの作り方
これはAppServiceに限った話ではないですが、「1.AppService」のようなAzure上のリソースの作り方は複数あるので、思いつく限りにあげてみます。
・ AzurePortal画面で作る(公式ドキュメント)
・ cloudshellで作る(公式ドキュメント)
・ CLIコマンドで作る(公式ドキュメント)
・ ARMtempleteで作る(公式ドキュメント)
・ Terraformで作る (公式ドキュメント)
Functions(関数アプリ)とは
まず、Functions(ファンクション)と呼ばれるものと関数と呼ばれるものは厳密には別のものを指しています。以下を見てそれぞれどういう関係なのかをご理解いただければと思います。

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

関数のトリガーについて(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の中に複数の関数を作れます。
AppServiceとFunctions(関数アプリ)と関数がそれぞれどんなものかわかったでしょうか。
AppServiceとFunctionsの料金プランを理解することも、とても重要なのでこちらの記事も見ていただけたらと思います。
以上です。