AppServiceのWebジョブ機能とは
AzureAppServiceの機能の1つです。
課金については、AppServiceと同じAppServiceプラン上で実行されるためプラス料金は発生しませんのでご安心ください。
Webジョブの仕組み
仕組みを説明しますと、AppServiceのアプリケーションの子プロセスとして実行されます。
そして、非同期プロセスで実行されるので、AppServiceアプリケーション(親プロセス)ではやらせたくない時間がかかる処理などを、Webジョブでやらせたりします。(WebジョブでやらせずにAzureFunctionsのHttpTriggerなどで実装するという選択肢もあると思います。従量課金プランなら一定実行量までは無料ですしね。)
kudu(SCM)サイトのProcessExplorerで見ると、Webジョブがw3wp.exeの子プロセスであることを確認できます。
そして、Webジョブには「継続的ジョブ」「トリガージョブ」の2種類あります。
継続的ジョブ
(記載中)
トリガージョブ(スケジュール、手動)
トリガーを選択した場合は、「スケジュール」「手動」のいずれかの起動方法を選択します。
スケジュールを選択した場合は、
0 /15 * * * (15分ごとの実行スケジュールの例)
のようにCRON式を設定します。FunctionsのTimerTriggerと同じ様な動きをします。
スケジュール設定(CRON 式)
CRON式の書き方等は公開情報を見ていただくとして、注意点を紹介します。
スケジュール設定をRestAPIで設定した場合、スケジュールが指定されていない状態に更新されてしまう場合があります。CRON式を設定する部分が "空" または不正な設定文字列である場合にスケジュール設定が null として設定され、スケジュールが指定されていない状態となってしまうんです。(知られていない情報)
ポータル画面からスケジュール設定を行なう場合は、入力必須項目になってるので null が設定されてしまう心配はありません。
Webジョブスケジュール設定用API
スケジュール確認
以下のRESTAPIを使うと、スケジュール設定を確認できます。
REST API URL:https ://{sitename}.scm.azurewebsites.net/api/triggeredwebjobs/{jobname}
===== 抜粋 ここから =====
Debugging a schedule
To see the scheduler logs for a scheduled WebJob you need to use the get triggered WebJob api, go to the url: https ://{sitename}.scm.azurewebsites.net/api/triggeredwebjobs/{jobname} (remove the job name to see all triggered WebJobs).
===== 抜粋 ここまで =====
settings.jobファイル
スケジュール(CRON 式)設定について、settings.jobファイルに "schedule" 項目を設定する必要があります。
Azure側はこの設定をみて、Webジョブを実行しています。
===== 抜粋 ここから =====
To schedule a triggered WebJob you need to add a schedule property to the settings.job file.
(機械翻訳)
トリガーされた Webジョブをスケジュールするには、settings.job ファイルにスケジュールプロパティを追加する必要があります。
===== 抜粋 ここまで =====
常時接続を有効にする(継続的・トリガー共通)
Webジョブを使う場合、AppServiceの常時接続設定が有効である必要があります。
===== 抜粋 ここから =====
[常時接続] : トラフィックがない場合も、アプリを読み込まれたままにします。
継続的な Webジョブや、CRON 式を使用してトリガーされる Webジョブに対して有効にする必要があります。
===== 抜粋 ここまで =====
デバッグログでWebジョブが実行されているか確認(継続的・トリガー共通)
ちゃんとWebジョブが実行されているのかを確認したい場合があると思います。
Webジョブが実行されているかを確認するためには、以下を参考にデバッグログを処理の先頭部分に挿入し、ログが出力されるか(該当の Webジョブが処理開始されているか)を確認する方法を紹介します。
以上が、Webジョブの基礎知識になります。