Azure Conatiner Apps Jobを試す

以前Container Appsについての記事を書きました。今回はその延長戦という事でConatiner Apps Jobについて調べてみます。※コンテナアプリについてはある程度理解できている前提でいきます。まだよく知らないよーという方はこちら

Conatiner Apps Jobとは?

公式曰く、アプリは常時稼働型でジョブは一時的なイベント駆動型だそうです。ユースケースは以下の通りです。

例えば、Azure functionsでは物足りないようなコンテナサービスを行いたい時に使うといいんではないでしょうか?

試してみる事

  • コンテナアプリジョブの作成
  • キューストレージを利用したイベントトリガー

コンテナアプリジョブの作成

では早速作成していきます。ただし今回作成するコンテナアプリジョブはこの記事で使用したアプリ環境を使用しますので参照してください。簡単におさらいすると、「ワークロードプロファイル従量課金プラン」で「自作の仮想ネットワークにデプロイ」で「内部環境アプリ」です。(伝わる?)

Azure portal上で作成しようと思ったのですが、公式ドキュメントを見てもよく分からなかったのでCLI版でデプロイしたいと思います。(と思ったのですが、デプロイ後の画面を見ると後付けでやり方が分かったので後ほどご紹介)

という事で公式で以下のようなデプロイのテンプレがあったのでそれを参考にして作ります。

これをもとに自作したのがこちら。

1点、「–replica-retry-limit 」の項目が必須にもかかわらず公式テンプレにはないらしく、追加しています。

順に解説すると、

  • environment
    • コンテナアプリ環境を指定します
  • trigger-type
    • トリガータイプは手動の「Manual」スケジュールの「Schedule」イベント駆動の「Event」を選べて、今回はイベントを選びます。
  • replica-timeout
    • レプリカ(起動コンテナ)の最大実行時間。今回は60秒を超えたらタイムアウト判定します
  • replica-retry-limit
    • レプリカが失敗したときの最大リトライ時間です。今回は30秒間リトライさせます
  • image
    • 使用するイメージです。今回は、コンテナが実行されるとストレージキューからキューを取得してprintで表示をする簡単なコンテナを作りましたのでそれを使います。
  • cpu,memory
    • コンテナのスペックです
  • min/max-executions
    • ポーリング間隔の間に実行する最大最小スケール数です。
  • scale-name
    • スケジュールの名前
  • scale-rule-type
    • スケジュールのタイプです。これはコンテナアプリの時と同様にKEDAのサイトに記載の表記に準拠します。
  • scale-rule-metadata
    • 同じくKEDAに記載のメタデータを書きます。接続するキュー名や接続文字列を記載します
  • scale-rule-auth
    • 接続文字列は認証パラメタとして定義します。
  • secret
    • シークレット文字列としてストレージアカウントの接続文字列を書きます。このシークレット変数をscale-rule-authが認証情報として参照し、実際の接続を行ってくれます。

 

デプロイが完了したら、現状の設定をいくつか確認してみましょう。

まずはコンテナです。

次にスケールルールです。ストレージキューとの接続情報を格納しています。

※Azure Portalからデプロイをするときは以下の画面になるように設定すると出来ると思います。ストレージキューとの接続文字列をシークレットに格納し、スケールルールの認証欄にそのシークレット変数を指定します。

次に実行履歴です。Execution historyではこれまでに実行されたコンテナの履歴が見れます。

※テストで実行したやつが表示されちゃっていますが、最初にデプロイしたときは本来はここには何も表示されませんのでご安心ください

さて、大体詳細を確認できたところで、実際にストレージキューにキューを入れてみましょう。

どうでしょうか、挿入時刻(17:44:32)と同時にcontainer-apps-jobs-xsjl2というコンテナが作成され、17:44:50に実行が完了している事が分かります。実際にログを見てみましょう。LogsのConsoleを押すとログアナリティクスの画面へ遷移します。

print文で表示されるはずのキューメッセージが実際に表示されていますね!

という事で、コンテナアプリジョブを利用したイベント駆動型のコンテナを実行することが出来ました。あまり深い作りこみをしていないのもありますが、結構簡単に作成する事が出来ました。使用するサーバの変更やコンテナ間の通信を特定の仮想ネットワークに限定する方法はコンテナアプリの作成記事に記載していますのでよろしければご参考ください。コンテナアプリ環境の上にアプリを作るかジョブを作るかの違いだけなので、アプリを理解すればほぼジョブも理解できるので学習効率もよくありがたいですね。

それでは!