Azure WebJobsをAPIで実行する
WebJobsをシェルでAPIの実行する処理を試しました。(2018/6/1時点の処理です)
認証
リクエストにcurlを使います
URLはappservice名.scm.azurewebsites.net
API /api/webjobsでWebJobsに登録している一覧が取得出来ます。
$ curl https://appservice.scm.azurewebsites.net/api/webjobs
401が返ってきました。認証が必要なようです。
- Azure Potal画面にログイン
- AppService > 対象のAppService名
- 画面上の「発行プロファイルの取得」を押下、「AppService名.PublishSettings」がダウンロードされる
- ダウンロードしたファイルを開いて以下を確認
- userName="$〜"
- userPWD="※※※※"
- userNameとuserPWDをBase64エンコードしてcurlのヘッダに含める
- userNameは先頭の"$"も含めてエンコードしてください
$ curl https://appservice.scm.azurewebsites.net/api/webjobs \
-H "Authorization:Basic $(echo -n \$userName:userPWD | base64)"
これで結果が返ってきました。
あとはそれぞれのAPIに合わせて設定を行っていきます。
WebJobの登録時に"種類"で「継続」「トリガーされた」が選択できますが、
この種類によって若干リクエストが異なります。
登録(更新)
トリガーされた
- URL
PUT /api/triggeredwebjobs/{job name}
- 名前 : {job name}
- 種類 : トリガーされた
- トリガー : 手動
継続
- URL
PUT /api/continuouswebjobs/{job name}
- 名前 : {job name}
- 種類 : 継続
- スケール : マルチインスタンス
# ファイル名と実行ファイルを設定してリクエストを行います。
curl https://appservice.scm.azurewebsites.net/api/〜 \
-X PUT \
-H "Authorization:Basic $(echo -n \$userName:userPWD | base64)" \
-H "Content-Disposition: attachement; filename={file name}" \
-T "{file path}"
※すでに登録済みのジョブ名に再度リクエストを実行すると内容が上書きされました。
- 「トリガーされた」でcronを設定する場合は、登録後に以下のリクエストを実行します
curl https://appservice.scm.azurewebsites.net/api/triggeredwebjobs/{job name}/settings \
-X PUT \
-H "Authorization:Basic $(echo -n \$userName:userPWD | base64)" \
-H "Content-Type:application/json" \
-d '{"schedule":"{cron}"}'
- 「継続」で単一インスタンスを設定する場合は、登録後に以下のリクエストを実行します
curl https://appservice.scm.azurewebsites.net/api/continuouswebjobs/{job name}/settings" \
-X PUT \
-H "Authorization:Basic $(echo -n \$userName:userPWD | base64)" \
-H "Content-Type:application/json" \
-d '{"is_singleton":true}'
※continuouswebjobsの登録は若干時間がかかるらしく、シェルスクリプトで登録後に単一インスタンスのAPIリクエストしたら404で登録出来ず、数秒sleepをいれたら登録できました
実行
種類によってURLの最後が変わります
- トリガーされた
/api/triggeredwebjobs/{job name}/run
- 継続
/api/continuouswebjobs/{job name}/start
curl https://appservice.scm.azurewebsites.net/〜 \
-X POST \
-H "Authorization:Basic $(echo -n \$userName:userPWD | base64)" \
-H "Content-Length: 0"
※Content-Lengthを付けないと411エラーとなります
削除
共通にメソッドをDELETEでジョブ名を指定するだけで削除されます
curl https://appservice.scm.azurewebsites.net/〜 \
-X DELETE \
-H "Authorization:Basic $(echo -n \$userName:userPWD | base64)" \
追記(2018/6/13)
WebJobのcron設定の時間がAzureFunctionのタイマートリガーのcron式で
実行されるため、以下で設定する
{second} {minute} {hour} {day} {month} {day-of-week}
また、AppServiceのタイムゾーンはデフォルトではUTCのため
WEBSITE_TIME_ZONEを変更していなければUTCの日時でcron実行される