Azure Container Apps ジョブを動作させる (手動トリガー編)
概要
Azure Container Apps ジョブが 2023 年 8 月に GA となりました。
- Generally available: Azure Container Apps jobs
https://azure.microsoft.com/en-us/updates/generally-available-azure-container-apps-jobs/
Azure Container Apps ジョブは、以下 3 つトリガーをサポートしています。
- 手動 (オンデマンドでトリガーする)
- スケジュール (特定の時刻にトリガーする)
- イベント (メッセージがキューに入ったらトリガーする等)
公式ドキュメントは以下になります。
-
主要な概念 (Azure Container Apps のジョブ)
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli -
Azure portal を使用して Azure Container Apps でジョブを作成する
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli -
Azure Container Apps を使用してジョブを作成する
https://learn.microsoft.com/ja-jp/azure/container-apps/jobs?tabs=azure-cli -
チュートリアル: Azure Container Apps でイベントドリブン ジョブをデプロイする
https://learn.microsoft.com/ja-jp/azure/container-apps/tutorial-event-driven-jobs
また以下 Github に Sample と Sample についてのアーキテクチャーの説明等といった有用な情報がありました。
- Azure Container Apps Jobs Sample
https://github.com/Azure-Samples/container-apps-jobs?tab=readme-ov-file
今回は、手動 (オンデマンドでトリガーする) のジョブを作成してみます。
以前はコマンドベースのみだった気がしますが、今はポータルでも作成できるようなので、とりあえずポータルを使用してみます。以下の辺りを見ていこうかと思います。
- 作成して手動トリガーで実行してみる
- ログの確認
- 処理が実行された仕組みを考察する
詳細
作成して手動トリガーで実行してみる
リソースの作成から、Container App ジョブを選択します。
(Container Apps 環境は既存のものを利用します)
必要事項を入力していきます。今回はトリガーの種類で、「手動」を選択します。
イメージについて今回は、mcr.microsoft.com
で提供されている、k8se/quickstart-jobs:latest
を利用します。
内容をチェックして、作成ボタンを押下します。
これで作成ができましたので、手動トリガーで実行してみます。
Overview ブレードに、Run now ボタンがあるのでそれを押下するか、以下 Azure CLI 等を使います。
az containerapp job start --name <ジョブ名> --resource-group <リソース グループ名>
ログの確認
ログ を見てみます。まず、ContainerAppSystemLogs_CL
から見てみます。
ContainerAppSystemLogs_CL
| where TimeGenerated >= datetime(2024-01-02 01:00:00) and TimeGenerated <= datetime(2024-01-02 04:00:00)
| where ExecutionName_s has "job-manual-trigger-001"
| project TimeGenerated, Reason_s, JobName_s, ExecutionName_s,EventSource_s,ReplicaName_s,Log_s,Count_d
| order by TimeGenerated asc
2 回実行してみましたが、pod の作成やレプリカのアサインが 1 回の実行毎に実施されているようです。
次に、ContainerAppConsoleLogs_CL
を見てみます。
ContainerAppConsoleLogs_CL
| where TimeGenerated >= datetime(2024-01-02 01:00:00) and TimeGenerated <= datetime(2024-01-02 04:00:00)
| where * contains "job-manual-trigger-001"
| order by TimeGenerated asc
1 回目の実行の結果ログ
2 回目の実行の結果ログ
作成したジョブがうまく動作しない場合においては、上記ログを確認すると要因がわかるかもしれません。
処理が実行された仕組みを考察する
もう少し仕組みを知るために、今回使用したmcr.microsoft.com/k8se/quickstart-jobs
を探ってみます。まず、手元のローカル環境でとりあえず実行してみます。
docker run -it mcr.microsoft.com/k8se/quickstart-jobs
実行でき、先程 Azure 上で動作させた時にみたログと同じものが確認できました。
C:\xxx\xxx>docker run -it mcr.microsoft.com/k8se/quickstart-jobs
2023/12/30 05:34:23 This is a sample application that demonstrates how to use Azure Container Apps jobs
2023/12/30 05:34:23 Starting processing...
2023/12/30 05:34:28 Finished processing. Shutting down!
次に docker inspect をしてみましたが、CMD
と ENTRYPOINT
は以下の内容でした。
docker inspect mcr.microsoft.com/k8se/quickstart-jobs
"Cmd": [
"/quickstart-jobs"
]
"Entrypoint": null,
CMD
やENTRYPOINT
等の詳細については、以下 docker の公式ドキュメントが参考になるかと思います。
- Dockerfile reference
https://docs.docker.com/engine/reference/builder/#cmd
そしてコンテナーの中を見てみるとCMD
で指定されている実行ファイルがありました。
docker run --name <コンテナー名> -it mcr.microsoft.com/k8se/quickstart-jobs /bin/bash
root [ / ]# ls -l quickstart-jobs
-rwxr-xr-x 1 root root 1946110 Dec 29 08:47 quickstart-jobs
root [ / ]#
このまま実行してみても当然同様のログとなります。
root [ / ]# ./quickstart-jobs
2023/12/30 05:37:28 This is a sample application that demonstrates how to use Azure Container Apps jobs
2023/12/30 05:37:28 Starting processing...
2023/12/30 05:37:33 Finished processing. Shutting down!
root [ / ]#
今回の例においては、Azure Container Apps ジョブが実行されるにあたり、CMD で指定されている、/quickstart-jobs が実行されたという事になるかと思います。
まとめ
2023 年 8 月に GA となった Azure Container Apps ジョブを動作させ、ログにどういった内容がでるのか、仕組みはどういったのものかという点を簡単に考察しました。
別の機会に、スケジュール トリガーを動作させてみたいと思います。
Discussion