AppServiceとFunctions(関数アプリ)の違い
AppServiceとFunctionsの共通点は、以下の画像のように外部からアクセスされて、Azureサーバ上でアプリケーションが実行されるというのが基本的な動作です。
ただ、Functionsでは、以下画像のようにクライアントから呼び出されなくてもAzureのアプリが実行されるパターンもありますのでその点も頭に入れて読み進めてください。
[App Service]: Webシステム(画面あり)やAPI(画面なし)などのサーバ上に常駐起動させるアプリに使われます。(公式ドキュメント)
[Functions(関数アプリ)]: バッチ処理のような短い処理を実行する際に使われます。(公式ドキュメント)
スケールアップ・スケールアウト・プログラムコードのデプロイ方法などの仕組みに、違いはありません。大きく違いがあるのはアプリケーションが実行されるきっかけ(トリガー)と、Azureの料金プラン(料金プランの違いに伴い、Azureサーバ上の動作も変わるのでここは重要)による違いがあるところがポイントです。
それでは、それぞれ説明していきます。
AppServiceとは
よくある、画面があって画面操作によって色々な処理が行われるアプリケーションはほとんどAppServiceを使用すると思って良いと思います。AppServiceのアプリケーションを一つ作って、その中でFunctionsの小さい処理を呼び出したりSQLDatabaseでデータベース処理したりStorageAccountでファイル入出力したりして組み合わせてアプリケーションを育てていくイメージです。
AppServiceアプリケーション実行までの流れ
- AppServiceを作る(このとき、言語やリージョンを選択する)
- 実装したプログラムコードをデプロイする
- ブラウザなどからアプリの画面操作などによりAppServiceアプリを実行する
Azure上のリソースの作り方
これはAppServiceに限った話ではないですが、「1. AppService」のようなAzure上のリソースの作り方は複数あるので、思いつく限りにあげてみます。
- AzurePortal画面で作る(公式ドキュメント)
- cloudshellで作る(公式ドキュメント)
- CLIコマンドで作る(公式ドキュメント)
- ARMtempleteで作る(公式ドキュメント)
- Terraformで作る (公式ドキュメント)
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側で強制終了させられてしまって処理結果:タイムエラーになりますよ、と書かれています。
関数のトリガーについて(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個もありました 笑)
関数アプリケーション実行までの流れ
- Functionsを作る(このとき、言語やリージョンを選択する)
- Functionsの中に関数を作る(このとき、トリガーを選択する)
- 実装したプログラムコードを関数に対してデプロイする
- 設定したトリガーが動作すると関数アプリケーションが実行する
「1. Functionsを作る」「2. Functionsの中に関数を作る」といった感じで、階層構造になることを覚えておいてください。一つの Functionsの中に複数の関数を作れます。
AppServiceとFunctions(関数アプリ)と関数がそれぞれどんなものかわかったでしょうか。
AppServiceとFunctionsの料金プランを理解することも、とても重要なのでこちらの記事も見ていただけたらと思います。
以上です。