Azure Functions とは

Azure Functions とは

  • Azure 上で、サーバーレスでプログラムを実行させることができるサービス
  • サーバーレスとは言われてるけど、文字通りサーバー不要で動くというわけではもちろんなく、プログラムを動かす土台を Functions で提供しているので、開発者的には Web サーバーを立てたりとかが不要という意味でのサーバーレス
  • Windows や Web のように UI はないので、REST APIバッチ処理向けのサービス。対話する画面がないだけで、DB に繋いだりファイル保存したり、メール投げたりということも可能
  • 使用可能な言語は複数ある。C# とか JavaScript とか。他にもあるけど、試験中の言語も多いので、趣味で使うのでなければ注意する必要がある
  • 開発環境は Visual Studio が使える。Azure ポータル上でコードを直接書いて実行も可能だが、よほど簡単なプログラムでない限り、VS でローカル開発・デバッグして、最後に Azure に発行して実行確認する流れが良いと思う
  • 使用料については、選択するプランによって異なる。従量課金と App Service プランの 2 種類が選択可能。App Service プランはその名の通り App Service 上で動かすので、App Service の料金に従う。従量課金については基本的にほぼ無料。具体的には月 100 万回までの実行は無料 (もう一つの条件として、実行に費やした合計メモリ使用量もある)。永続ファイルの保存先に Azure File Share を使用するので、ストレージ操作でも使用料は発生するが、よっぽどの実行状況でなければ使用料の事はあまり気にしないで使える
  • 制限として、実行時間が最大 10 分までと言う制限がある (従量課金の場合)。一応、App Service プランを利用することで時間制限はなくなるが、Functions 自体が軽く短い処理の実行を想定しているようなので、長くて重い (大量の CPU・メモリリソースを使う) 処理は、やめた方が良いかも (原因はわからないが、以前重い処理で使った時は、例外も出さずに処理が途中で終了することとかがあった・・・)

注意点

  • 上述したように軽く短い処理を想定しているので、長く重い処理の実行はやめた方が良いかも
  • 従量課金の場合、暫く実行されていないと、当該 Functions が動作しているインスタンスがリソース節約のために落とされてしまう。次のリクエストが来た時に改めて Functions 実行用のインスタンスが生成され、生成後に当該 Functions が実行されることになる。当たり前だが、インスタンスの生成自体に時間がかかる (コールド スタート問題)。自分が確認した限りでは、大体 5 秒から 10 秒ぐらい、追加で時間がかかった。即応性が求められないスケジュールバッチなどでは問題になりづらいが、即応性が求められる REST API などだと、要件を満たせるのか考慮が必要かも
  • 実行環境が元から用意されているため、裏を返すと、実行環境自体はあまり好きにいじれない。例えば、使用する言語のランタイムのバージョンとか。PowerShell のランタイムは現時点では 4 なので、要件で PowerShell バージョン 5 以上の機能を使う必要があるとかだと、Functions ではどうにもならない
  • 実行環境の話と関連するが、ローカル開発時と Azure 上での実行時環境に開きがある可能性があるので、Azure 上でも期待した動作となるかは、早めに確認した方が良い (Functions に限った話ではないが)