Azure Container InstancesでSpring Batchのアプリを動かす

毎週Azure系のネタを書いていたのですが、先週はワクチン2回目接種の副反応で全然動けず。今週からまた再開。

はじめに

コンテナアプリを簡単に動かせるAzure Container Instancesというサービスがあります。

azure.microsoft.com

各種チュートリアルは簡単なWebアプリを動かす例が多いのですが、バッチアプリも動かせたらサーバーレスバッチ環境ができて嬉しくね?と思いやってみました。

題材

バッチアプリの題材として、Spring Guideにあった「Creating a Batch Service」を使ってみます。Spring Batchというバッチフレームワークを使ってCSVファイルを読み込み、簡単な処理を施してRDBMSへ書き込みを行うものです。

spring.io

題材ではHyperSQL Databaseを使っていますが、ここではPostgreSQLを使ってみることにします。RDBMSの変更により少しコードに変更が必要でしたが、あまり本質ではないのでここでは詳細を省略します。

Azure Container Instancesを作成する

右も左も分からないので、Azure Portal上で作成してみます。Webアプリのように外部公開しないので、ネットワークオプションは「なし」を選択しました。

f:id:miyohide:20210912140659p:plain

環境変数も作成時の段階で設定します。RDBMSの接続先などをここで指定しておきます。

f:id:miyohide:20210912140844p:plain

あとで設定変更できるかなと思っていたのですが、少なくともAzure Portal上では参照のみで追加や編集はできませんでした。

f:id:miyohide:20210912141031p:plain

実行する

Azure Container Instancesを作成するとその時点でバッチ処理が動き始めます。ログもAzure Portalから参照することができました。

お馴染みのSpringのロゴが見えます。 f:id:miyohide:20210912141223p:plain

無事処理が完了しました。 f:id:miyohide:20210912141337p:plain

今後

今回はAzure Portalで色々とやってみましたが、やはり面倒くさいのでAzure CLIやTerraformなどを使って自動化を図りたいと思います。また、Azure File共有をマウントできるようなので、現在はクラスパス内で固定で持たせてある読み込みファイルを外部から読み込めるようにしようかと思っています。

docs.microsoft.com