Container App Jobs を触ってみた

# はじめに
[Microsoft Azure Tech Advent Calendar 2023](https://qiita.com/advent-calendar/2023/microsoft-azure-tech "Microsoft Azure Tech Advent Calendar 2021") の 12 日目の記事です。本稿では、2023年8月30日に GA となった Container App Jobs を紹介します。リリースされたばかりのサービスとだけあり、現時点では英語および日本語の両方にて情報が少ないため、実際にリソースの作成からジョブの実行までの過程を説明しつつ、公式のドキュメントでカバーされていない点について解説します。


# Container App Jobs とは
コンテナアプリケーションとして動作させるジョブを動作させるためのサービスです。継続的に動作させるジョブの実行を目的としたサービスではなく、オンデマンドでの実行向けとして設計されています。
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli
> Azure Container Apps のジョブを使うと、有限の期間実行して終了するコンテナー化されたタスクを実行できます。 ジョブを使って、データ処理、機械学習、オンデマンド処理が必要なシナリオなどのタスクを実行できます。

Container Apps 環境と同じネットワーク内のリソースを共有可能となっています。その為、Container Apps と連携する必要があるシナリオ等で有用なオプションとなります。実行方式は、手動、スケジュール済み（cron）、イベントドリブンの3種類が用意されています。「イベントドリブン」は Container Apps と同様に KEDA スケーラーによって実行されるため、多種多様なシナリオに対応しています。


# リソースの作成
ポイントを簡単に解説します。
- Container Apps 環境の中に Container App Jobs のリソースを作成する形となっている。
- Container App Jobs のリソースは以前はポータルからの作成に対応していなかったので Azure CLI を使用する必要があったが、現在はポータルからでも作成できるようになっている。
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs-get-started-portal
- リソースタイプは "Microsoft.App/jobs" 。
- 従量課金プラン、専有プラン共に対応している。従量課金専用プラン（非ワークロードプロファイル環境）でも作成できる。

ジョブを作成すると、リソースグループの中に以下のように「コンテナー アプリ ジョブ」としてポータルに表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/dce80164-2f33-ce71-b34b-e921523d5115.png)

Container App Jobs の画面は以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/85cd3651-1d09-83c6-13b0-c5ff9b47cb12.png)

なお、1つの Container App Jobs リソースにて複数のジョブ（コンテナ）をデプロイすることができます。

ちなみに、正常性プローブは Container App Jobs でも利用可能です。可用性を高めるうえでこれは嬉しい機能ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/a8221bbb-c203-b7c8-75e1-c61ac657180a.png)


# ジョブを実行する
ジョブの実行方法については公式ドキュメントの記載内容以上に補足して説明する点が特に無いので、以下の URL より公式情報をご確認ください。

ポータルからの実行
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs-get-started-portal
Azure CLI での実行
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs-get-started-cli?pivots=container-apps-job-manual

# 運用面
以下、運用面でのポイントです。
- Container Apps のようにリビジョンの概念は無いので、デプロイしたジョブのアプリケーションをロールバックしたい場合はコンテナレジストリのイメージを古い物を指定してロールバックする。
- エラーのトラブルシューティングは以下の公式ブログも役に立つ。ログに記録されるエラーメッセージの解説がある。
  https://azureossd.github.io/2023/10/30/Troubleshooting-failed-job-executions-on-Container-App-Jobs/

- Container App Jobs でも「問題の診断と解決」がある。（が、見れる情報はあまりないので、Container Apps のトラブルシューティング時のように Log Analytics からログを参照することになることが多そう。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/41b6c2bf-270e-6c87-af33-3e194f6b58ff.png)
- 以上の点を踏まえると、トラブルシューティングの際に備えてジョブのログを標準出力させておくことが大切となってくる。ジョブのアプリから標準出力させたログは、Container Apps と同様に ContainerAppsConsoleLogs_CL に出力される。

なお、上記のブログでも触れられていますが、Execution history からはジョブの実行結果を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/53aae15d-1cfb-1e38-e18d-708b5fe39764.png)

エラーが発生した場合は以下のように表示されます。Log Analytics のワークスペースへのリンクも用意されていて便利ですね。「Console (ContainerAppsConsoleLogs_CL)」はコンテナから標準出力/エラーで出力されたログ、「System (ContainerAppSystemLogs_CL)」は Container App Jobs の基盤側から出力されたログを確認できます。ログはこの2種類のみなので、トラブルシューティングの確認範囲も割とシンプルです。これらのログより、エラー発生時に何か有益な情報を得られる可能性があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/4b5dc499-bdcc-3a26-c4b9-903b0f0cef24.png)

※ジョブの実行エラーが発生した際の例 (レプリカタイムアウト時間に抵触)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/c6f73116-72be-bbde-fd8c-26e8ae3cb775.png)



# 制約事項
公式ドキュメントでも解説されているとおり、現時点では次の機能はサポートされていません。

- Dapr
- イングレスとカスタム ドメインや SSL 証明書などの関連機能
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli

もし追加の機能要望や改善要望がある場合、GitHub の Issue にて要望を出すことができます。実際に Issue での要望が受け入れらることもあるので、是非活用してみてください。
https://github.com/microsoft/azure-container-apps

Container Apps と同様に、開発ロードマップは以下の GitHub プロジェクトで管理されています。各種機能の開発ステータスが分かるので、現時点で不足している機能で既に開発中の物が無いか気になる場合はこちらを参照するとよいでしょう。

https://github.com/orgs/microsoft/projects/540
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245530/a2097086-380d-2e36-f4e0-c7f6a1ce6db4.png)


# 参考資料
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli
https://azure.microsoft.com/en-us/updates/generally-available-azure-container-apps-jobs/
https://techcommunity.microsoft.com/t5/apps-on-azure-blog/generally-available-azure-container-apps-workload-profiles-more/ba-p/3913345