AppServiceのWebジョブ機能とは
AzureAppServiceの機能の1つです。
課金については、AppServiceと同じAppServiceプラン上で実行されるためプラス料金は発生しません。選択したAppServiceプランの価格レベルが、Webジョブの処理性能・パフォーマンスにも影響します。
Webジョブの仕組み
仕組みを説明しますと、AppServiceのアプリケーションの子プロセスとして実行されます。
非同期プロセスで実行されるので、AppServiceアプリケーション(親プロセス)ではやらせたくない時間がかかる処理などを、Webジョブで実行したりします。(WebジョブではなくFunctionsのHttpTriggerなどで実装する選択肢もありだと思います。従量課金プランなら一定実行量までは無料ですよね。)
Kudu(SCM)サイトのProcessExplorerで見ると、Webジョブがw3wp.exeの子プロセスであることを確認できます。Kuduサイトは、こちらの記事で説明してます。
そして、Webジョブには「継続的ジョブ」「トリガージョブ」の2種類あるので紹介します。
継続的ジョブ
多くの用途に使用できます。例えば、データベースのバックアップ、定期的なデータの処理・レポートの生成などが考えられ、AppServiceのWebアプリケーションと同じアプリケーションプールで実行され、常に実行され続けます。これにより、定期的なタスクを自動化することができます。ジョブは、スクリプトファイル・バッチファイル・コマンドラインツールを使用して実行されます。
トリガージョブ(スケジュール・手動)
トリガーを選択した場合は、「スケジュール」「手動」のいずれかの起動方法を選択します。
スケジュールを選択した場合は、
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ジョブの基礎知識になります。