AppServiceとFunctionsの共通点は、開発したアプリをAzureサーバにデプロイして、クライアントのアクセスをきっかけにアプリ実行されるのが基本的な動作です。
Functionsでは、クライアントからアクセスされたときにアプリ実行されるパターン(HttpTrigger)もありますが、クライアントからのアクセスがなくても、Azureサーバー上の定時起動などによってアプリ実行されるパターン(TimerTrigger)などもありますので、その点も頭に入れて読み進めてください。
概要説明
AppServiceとは、Webシステム(画面あり)やAPI(画面なし)などのサーバ上に常駐起動させるアプリに使われます。(公式ドキュメント)
Functions (関数アプリ) とは、バッチ処理のような短い処理を実行する際に使われます。(公式ドキュメント)
スケールアップ・スケールアウトの考え方、プログラムコードのデプロイ方法などは、ほとんど同じです。違いがあるのは、アプリ実行されるきっかけ(トリガー)と、Azureの料金プラン(料金プランの違いに伴い、Azureサーバ上の動作も変わるのでここは重要)による違いがあるところがポイントです。
それでは、それぞれ説明していきます。
AppServiceとは
システムによくある画面があって画面操作によって色々な処理が行われるアプリがほとんどAppServiceを使用すると思って良いと思います。AppServiceのアプリを一つ作って、その中でFunctionsの小さい処理を呼び出したりSQLDatabaseでデータベース処理したりStorageAccountでファイル入出力したりして組み合わせてアプリを育てていくイメージです。
利用手順
◎ AppServiceアプリ実行までの流れ ▽
- AppServiceプラン(アプリを実行させるサーバー)を作る(OS・リージョン・料金プランを選択)
- 1のAppServiceプランを選択して、AppServiceを作る(プログラム言語・OS・リージョン・AppServiceプランなどを選択)
- 実装したプログラムコードをデプロイする
- ブラウザなどからアプリの画面操作などによりAppServiceアプリを実行する
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側で強制終了させられてしまって処理結果:タイムエラーになりますよ、と書かれています。
◎ 関数アプリ実行までの流れ ▽
- Functionsを作る ※ OS・リージョン・料金プランなどを選択
- Functionsの中に関数を作る ※ プログラム言語・OS・リージョンなどを選択
- 実装したプログラムコードを関数に対してデプロイする
- 設定したトリガーが動作すると関数アプリが実行する
関数トリガー
◎ トリガーとは ▽
Functionsの中に関数を作成していくのですが、関数を作成するときにトリガーを必ず選択します。すると、選択したトリガーがきっかけとなり、関数アプリが実行されることになります。
◎ トリガーの選択肢 ▽
Functions | トリガー種類 |
---|---|
Httpトリガー | URLをHTTP/HTTPS通信で呼ばれたら実行される。AppServiceのようにクライアントのブラウザからURLを叩いて実行できますし、AppServiceやFunctionsのいずれかのアプリからAPI実行の要領で呼び出して実行することもできます。 |
Timerトリガー | 15分ごと・1時間ごとのようにスケジューラ通りに実行される。タイマー管理はAzure側でやってくれるので、クライアント側から呼び出すことをせずに、Azure側で勝手にFunctionsアプリを起動してくれます。 |
BlobStorageトリガー | BlobStorageコンテナーにファイルが追加されたら実行される。アップロードされたファイルを読み込んでDB登録などを簡単に実現できます。こちらもコンテナーにファイルがアップロードされたかどうかはAzureがずっと監視してくれているので、クライアント側から呼び出すことをせずにAzure側で勝手にFunctionsアプリを起動してくれます。 |
など (2024/10/01現在 21 個もありました)
「1. Functionsを作る」「2. Functionsの中に関数を作る」といった感じで、階層構造になることを覚えておいてください。一つの Functionsの中に複数の関数を作れます。
Azureでアプリ開発する際の必読本
AppServiceとFunctions(関数アプリ)と関数がそれぞれどんなものかわかったでしょうか。
AppServiceとFunctionsの料金プランを理解することも、とても重要なのでこちらの記事も見ていただけたらと思います。
リソースの作り方
◎ リソース作成方法一覧 (外部ツール含む) ▽
AppServiceやFunctionsに限った話ではないですが、Azure上にリソースを作る方法が複数あるので、ここで紹介しておきます。
- AzurePortal画面で作る(公式ドキュメント)
- cloudshellで作る(公式ドキュメント)
- CLIコマンドで作る(公式ドキュメント)
- ARMtempleteで作る(公式ドキュメント)
- Terraformで作る (公式ドキュメント)
以上です。