なんかいろいろと書いてくブログ

関東のどこかで働く、一般人

WebJobsとAureFunctionの違いについて考えてみた

Azureの資格であるAZ-204の取得をする必要が出てきましてMicroSoftの公式ラーニングパスで勉強をはじめました。
単純にラーニングパスをやっているだけだと、頭に入りそうに無いので
気になったこととか考察とかを都度書いていきます。
※ 記載している内容に間違いや質問があればご教示ください!!

今回は以下ラーニングパスでの考察になります。
https://docs.microsoft.com/ja-jp/learn/modules/choose-azure-service-to-integrate-and-automate-business-processes/

はじめに

Azurenにはイベント駆動型のアプリケーションを作成するためのサービスとして、
以下4つのが提供されている

ラーニングパスないでは前者2つを "デザイン優先のテクノロジ"、
後者2つをコード優先のテクノロジとよんでいる。

要は、GUI上での操作で完結させるならデザイン優先、
コードを記述して、動作を細かく設定させる必要があるならコード優先を選択すれば良いのだろう。

気になったのはコード優先のテクノロジーとしてあげられているAzureFunctionとServiceWebJobs。
AzureFunctionはWebJobsでできないことをほとんどできるし、
WebJobsって必要なくね?と思いました。
(コード優先テクノロジの比較に記載されている)

しかし、実際はWebJobsのほうがAzureFunctionよりも優位なケースもあるようで、
その辺について考えてみる。

WebJobsの強みについて考えてみる

手始めにWebJobsが必要なパターンを考えるために、WebJobsの強みについて考えてみる
WebJobsについて、公式でキュメントには以下のように説明がされている。

AzureFunctionはWebJobsと比較して、多様な設定のカスタムができることから
柔軟性に優れておりほとんどの場合においてはAzureFunctionの方が第一選選択肢となりうる。

しかし、WebJobsにも強みがあり、その強みが生かせる時がWebJobsを使うケースをなるのだろう

WebJobsはアプリケーションに含む形で作成できる

WebJobsの特徴はアプリケーションの一部として作成することができることにある。
例えば、Mainといアプリとそれに関連するイベント駆動型タスク、タスクAとタスクBがあったとする。

Azure Functionの場合、

  • Main
  • タスクA
  • タスクB

と言ったように、AzureFunctionとアプリケーションを個別に管理する必要がある。

対して、WebJobsでは下記のようにアプリに包括させる形で管理することができる。

  • Main
    |-タスクA
    LタスクB

そのため、アプリケーションに紐ずくタスクがが複数ある場合はWebJobsが有用である。
(逆に言えば、アプリケーションに紐付かないタスクの場合は都度、リソースを作る必要がある気がする)

JobHostでの制御を細かく制御できる

AzureFunctionsではJobHostの設定をhost.jsonというjsonファイルに文字列として記載して制御する。
対して、WebJobsはJobHostオブジェクトにより、コードとして記載することができるため、ポリシーを細かく設定できる。
(AzureFunztionでもStartUpファイルを使えば、ポリシー設定をコードかけるような気がしないでもない)

 結論

WebJobsが採用されるな一番の要因はやはり、アプリに含めて作成さることではないかなと考える。
なぜなら、JobHostの制御は、AzureFunctionでもできないわけではないし、採用要員としては弱いかなと思うためである。

参考URL