3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeNA 25 新卒Advent Calendar 2024

Day 12

Azure Container Apps jobsを使って低コストにコンテナ運用する

Last updated at Posted at 2024-12-11

この記事はDeNA 25 新卒 Advent Calendar 2024の12日目の記事です。25卒同期が魅力的な記事を紹介してくれると思うので、ぜひぜひチェックしてみてください!

はじめに

皆さん、バッチ処理してますか?
バッチ処理を定期実行するとなると、PCを常時起動する or クラウド上で動かすかの2択ですが、クラウドが楽ですよね!
ただ、クラウドを使うとなるとコストが気になるところ。。。
そこで、この記事ではコストを抑えてAzure上でバッチ処理を実行する方法について紹介します。

例えば、Pythonで書いたバッチ処理をAzure上で定期実行することを考えると、Azureで使う環境として

  • Azure virtual machines (以下、Azure VPS)
  • Azure Functions
  • Azure Container Apps jobs

などが挙げられます。

Azure VPSはVPSなので自由に設定して動かせますが、VMを停止している間もストレージにコストがかかり続けます。
Azure Functions等のサーバーレスでは、バッチ処理を定期実行する場合はコストをかなり抑えられますが、Pyppeteerを使う必要があるなど、OSのパッケージに依存する処理は実行できません。

一方、Azure Container Apps jobsは任意のコンテナイメージを実行でき、従量課金のため使った分しかコストが発生しません。なので、Docker Hubを利用するなど無料のコンテナレジストリさえ確保できれば低コストに運用できます。(コンテナレジストリにAzure Container Registryを使う場合、コストはAzure VPSと大差ありません)

Azure Container Apps jobsとは

Azure Container Appsのリソースの1つです。
Azure Container Appsの中にはappsとjobsがあり、以下の違いがあります。

Azure Container Apps jobsでコンテナを定期実行するまで

構成

Docker HubにPushしたhello-worldのDockerイメージを、Azure Container Apps jobs上で実行します。
コンテナイメージの流れは以下の通りです。

手順

PublicなDocker Hubのリポジトリを利用する場合

Azure portal上のリソースの作成からContainer App ジョブを選択します。
左のタブからだと出てこないので、container appsなどで検索する必要があります。

スクリーンショット 2024-11-29 115534.png

今回はWest US 2リージョンに定期実行するサービスを作成します。
スクリーンショット 2024-11-29 115637.png

Docker HubのリポジトリがPublicな場合はこんな感じで作成できます。

  • レジストリログインサーバ:docker.io
  • イメージとタグ:${DockerHubUserName}/my-hello:latest

リポジトリがPrivateの場合はレジストリログインサーバがPublicの場合と異なります(後述)

スクリーンショット 2024-11-29 115759.png

正常にデプロイできると以下のような画面が表示されます。

PrivateなDocker Hubのリポジトリを利用する場合

PrivateなDocker Hubのリポジトリのイメージを利用する場合、レジストリログインサーバをdocker.ioにするとデプロイ時にエラーが出るので、作成手順を別途紹介します。
docker.ioを指定するとサービスのデプロイ時に

The following field(s) are either invalid or missing. Field * is invalid with details: 'Invalid value: ...

のエラーが発生します。
スクリーンショット 2024-11-29 120523.png

このエラーを回避するためには、レジストリログインサーバをregistry.hub.docker.comに変更する必要があります。

また、レジストリのパスワードには、Docker Hubで作成した、少なくともRead-onlyのアクセス権が設定されたPersonal access tokensを使います。

レジストリログインサーバとレジストリのパスワードを設定し、リソースを作成すると...

正常にデプロイできました!
スクリーンショット 2024-11-29 120925.png

動作確認

デプロイしたリソースのExecution historyから定期実行されていることを確認できます。
スクリーンショット 2024-11-29 120003.png

Consoleへ移動するとhello-worldコンテナの出力が確認でき、正常に定期実行できていることが確認できます。
スクリーンショット 2024-11-29 115924.png

おわりに

今回はAzure Container Apps jobsを使ってバッチ処理のコストを抑える方法を紹介しました。
ライブラリで完結するような処理はAzure Functionsを利用し、OSのパッケージが別途必要な場合はAzure Container Apps jobsを利用するなど使い分けることで、Azure VPSを使わずにほとんどのバッチ処理は低コストに実行できます。

それでは良いAzureライフを!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?