公式サイトでは全く触れられていないっぽいですが、中の人ブログや Kudu のコミットログを見たところ、WebJobs で Azure Scheduler を使わずにスケジュール実行する機能が追加されていました。
調べたところ、一応 Kudu の Wiki にひっそりと情報が載っていました。
Scheduling a triggered WebJob
Web Jobs · projectkudu/kudu Wiki · GitHub
To schedule a triggered WebJob you need to add a schedule property to the settings.job file. The value of the schedule is cron expression that has 6 fields to represent the schedule: {second} {minute} {hour} {day} {month} {day of the week} .
Web Apps チームの Amit Apple 氏のブログには、さらに詳細な説明がありました。
Scheduling Azure WebJobs with cron expressions
これまでは Azure Scheduler でジョブを作成していましたが、crontab と同じ記法を使ってスケジュール実行出来ます。実行には Always On が必要ですが、これまで cron を使っていた人にも分かりやすいですね。
Kudu でスケジュール実行する機能は、Internal WebJob Scheduler と言うらしいです。簡単に比較します。
Azure Scheduler | Internal WebJob Scheduler | |
---|---|---|
費用 | 5 ジョブまで無料 | 標準モード必須、ただし追加料金は不要 |
制約 | 無料モードでは最小実行間隔が 1 時間 | タイマー駆動なので Always On が必須 |
メリット | Visual Studio でのサポート | crontab 記法で細かい制御が可能(曜日指定とか) |
デメリット | ジョブの設定を別に行う必要がある | 挙動が IIS のワーカープロセスに依存 |
既に標準モードを使っている場合には Internal WebJob Scheduler の方が使い勝手が良い気がしました。
気になる使い方は、WebJob として実行するアプリケーションと同じ場所に settings.job というファイルを作成して、中に crontab 形式でスケジュールを定義するだけでした。
{"schedule": "15 * * * * *"}
こんな感じに書けば毎分 15 秒に WebJob が実行されるようになります。
settings.job ファイルは Visual Studio に追加した後、出力ディレクトリにコピーするように設定しておきます。忘れると settings.job だけがデプロイされなくなります。
これで WebJob としてデプロイすると、Kudu が自動的にスケジュール実行してくれます。ちなみに Git などを使って WebJob をデプロイする方法については以下の記事を参照してください。
GitHub を使って WebJob をデプロイして、Azure WebJobs Dashboard で実行履歴を確認してみました。
設定した通り、ちゃんと 1 分ごとに WebJob が実行されていることが確認できました。
Azure Scheduler を使う場合にはポータルや Visual Studio から作成する必要があり、正直なところ結構使いにくかったです。しかし Internal WebJob Scheduler を使えば、GitHub などからデプロイするだけでスケジュール実行が可能になるので、かなり便利に使えそうです。