Azure App Service for Linux でパブリックプレビューの WebJobs (Cron) を試してみた

やっと Azure App Service for Linux に WebJobs (Cron) が来ました！ Windows の App Service では以前から WebJobs を使う事ができました。その頃の Microsoft のドキュメントには、「WebJobs は App Service on Linux ではまだサポートされていません。」と記載されていて、"まだ"というワードに、ずっと期待を寄せていました。

という事で、早速試してみました。

## 検証用の Azure App Service for Linux を作成

japaneast で不明なエラーが出たので、eastus で作成しました。

```bash:bash
prefix=mnrwebjobs
region=eastus

az group create \
  --name ${prefix}-rg \
  --location $region

az appservice plan create \
  --name ${prefix}-asp \
  --resource-group ${prefix}-rg \
  --sku B1 \
  --is-linux

az webapp create \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --plan ${prefix}-asp \
  --runtime "PYTHON:3.9" \
  --https-only true

az webapp config set \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --always-on true

curl https://${prefix}.azurewebsites.net
```

## Azure App Service for Linux に Web ジョブ が表示されている状態

![appservice-linux-webjobs-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/a2deefcd-9f50-a38b-96ec-75b343245d66.png)

## WebJobs (Cron) で実行するシェルスクリプトを作成

```bash:bash
echo date > test.sh
```

ちなみに現時点だと、sh と py のみのサポートで、py は zip にして登録する必要がありました。

## Web ジョブの追加

先ほど作成した `test.sh` を登録します。

![appservice-linux-webjobs-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/d0b204fd-43d3-bb6b-1345-bcc666bbd5e6.png)

## SSH で登録されたファイルを確認

![appservice-linux-webjobs-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/67007d2a-d3ef-025b-6697-ad609ac992b4.png)

## Web ジョブの状態を確認

「完了」になったら動作完了です。

![appservice-linux-webjobs-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675885/215c9ec2-eeac-2612-6988-9833874b62de.png)

## Web ジョブの実行履歴を確認

現時点では「ログ」のアイコンから、実行履歴を確認する事ができなかったので、コマンドで確認しました。

```bash:bash
scmurl=$(az webapp deployment list-publishing-credentials \
  --name ${prefix} \
  --resource-group ${prefix}-rg \
  --query scmUri \
  --output tsv)

curl -s $scmurl/api/triggeredwebjobs/test/history \
  | jq -r '.runs[].output_url'
```

```txt:txt
https://mnrwebjobs.scm.azurewebsites.net/vfs/data/jobs/triggered/test/202404130025000715/output_log.txt
https://mnrwebjobs.scm.azurewebsites.net/vfs/data/jobs/triggered/test/202404130020000757/output_log.txt
https://mnrwebjobs.scm.azurewebsites.net/vfs/data/jobs/triggered/test/202404130015000730/output_log.txt
https://mnrwebjobs.scm.azurewebsites.net/vfs/data/jobs/triggered/test/202404130010000948/output_log.txt
```

上記の URL にブラウザでアクセスすると下記のように date コマンドの出力結果を確認できました。

```txt:txt
[04/13/2024 00:25:00 > bd04dc: SYS INFO] Status changed to Initializing
[04/13/2024 00:25:00 > bd04dc: SYS INFO] Run script 'test.sh' with script host - 'BashScriptHost'
[04/13/2024 00:25:00 > bd04dc: SYS INFO] Status changed to Running
[04/13/2024 00:25:00 > bd04dc: INFO] Sat 13 Apr 2024 12:25:00 AM UTC
[04/13/2024 00:25:00 > bd04dc: SYS INFO] Status changed to Success
```

## 登録した Web ジョブを削除

現時点では Azure ポータル上から Web ジョブを削除できないようなので、CLI で削除しました。

```bash:bash
az webapp webjob triggered remove \
  --webjob-name test \
  --name ${prefix} \
  --resource-group ${prefix}-rg
```

## 検証後の後片付け

```bash:bash
az group delete \
  --name ${prefix}-rg \
  --yes
```

## 参考

https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-app-service-at-ignite-2023/ba-p/3977578

https://azure.github.io/AppService/2024/04/04/Public-Preview-Sidecars-Webjobs.html

https://learn.microsoft.com/ja-jp/azure/app-service/webjobs-create?tabs=linuxcode