LoginSignup
4
3

More than 5 years have passed since last update.

Azure WebJobsをAPIで実行する

Last updated at Posted at 2018-06-01

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が返ってきました。認証が必要なようです。

  1. Azure Potal画面にログイン
  2. AppService > 対象のAppService名
  3. 画面上の「発行プロファイルの取得」を押下、「AppService名.PublishSettings」がダウンロードされる
  4. ダウンロードしたファイルを開いて以下を確認
    • userName="$〜"
    • userPWD="※※※※"
  5. userNameとuserPWDをBase64エンコードしてcurlのヘッダに含める
  6. 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}

- 参考 AzureFunctionのタイマートリガー

また、AppServiceのタイムゾーンはデフォルトではUTCのため
WEBSITE_TIME_ZONEを変更していなければUTCの日時でcron実行される

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3