📝

Azure Container Apps ジョブを動作させる (手動トリガー編)

2023/12/30に公開

概要

Azure Container Apps ジョブが 2023 年 8 月に GA となりました。

Azure Container Apps ジョブは、以下 3 つトリガーをサポートしています。

  • 手動 (オンデマンドでトリガーする)
  • スケジュール (特定の時刻にトリガーする)
  • イベント (メッセージがキューに入ったらトリガーする等)

公式ドキュメントは以下になります。

また以下 Github に Sample と Sample についてのアーキテクチャーの説明等といった有用な情報がありました。

今回は、手動 (オンデマンドでトリガーする) のジョブを作成してみます。
以前はコマンドベースのみだった気がしますが、今はポータルでも作成できるようなので、とりあえずポータルを使用してみます。以下の辺りを見ていこうかと思います。

  • 作成して手動トリガーで実行してみる
  • ログの確認
  • 処理が実行された仕組みを考察する

詳細

作成して手動トリガーで実行してみる

リソースの作成から、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 をしてみましたが、CMDENTRYPOINTは以下の内容でした。

コマンド例
docker inspect mcr.microsoft.com/k8se/quickstart-jobs
一部抜粋
"Cmd": [
    "/quickstart-jobs"
]
"Entrypoint": null,

CMDENTRYPOINT等の詳細については、以下 docker の公式ドキュメントが参考になるかと思います。

そしてコンテナーの中を見てみると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