Posted at

ただコンテナをクラウド上で動かすだけならAzure Container Instancesが簡単だよ


はじめに

今やっているプロジェクトではAzureを使うことが決まっており、画面はJava(Springboot)で開発しコンテナでデプロイしようと思っていました。

AKSやWebApp on LinuxでもコンテナのデプロイはできますがACI(AzureContainerInstances)はもっと楽にデプロイすることができます。

レジストリへのデプロイにはJibを使い、AzureContainerInstancesにデプロイするまでの流れを紹介したいと思います。


ソリューションの紹介

Azure Container Registry

jib-gradle-plugin



  • これまではspotifyのdockerfile-maven-pluginを使って自分で用意したDockerfileをビルドしてECRへのデプロイまでをやっていました。

  • jibはpluginを入れてちょっと設定をすればDockerfileがなくてもコンテナを作成し、Azure Container Registry,Elastic Container Registry,Dockerhub,Google Container Registryにデプロイすることができます。(base imageについては変更などが可能です)

Azure Container Instances


  • AWSでいうFargateみたいなものでコンテナが稼働するインスタンスを用意せずとも割り当てたCPUやメモリの大きさに合わせて稼働した時間だけ課金されるようなサービスです。

  • Fargateほど色々はできないようですが、これからの機能の拡充が期待できますね。

  • 料金についてはFargateと比較すると、今日現在だとほぼ同じでした。




Jibを使ってACRにpushする

pluginを追加します


build.gradle

plugins {

id 'com.google.cloud.tools.jib' version '1.4.0'
}

ACRのリポジトリを作成しimage名の部分を変更します。ユーザ名とパスワードはgradle.propertiesに記載しておきます。


build.gradle

jib {

to {
image = 'xxxxxx.azurecr.io/web'
auth {
username = "${USERNAME}"
password = "${PASSWORD}"
}
}
}


gradle.properties

USERNAME=xxxx

PASSWORD=xxxx

あとはコマンドを打てば、コンテナを作ってACRにpushしてくれます。

$ gradlew jib

コンテナだけ作るには以下のコマンドを打ちます。(コンテナができたらdocker runで動作確認しておくのも良いでしょう)

$ gradlew jibDockerBuild


Container Intancesへデプロイ

Azureにログイン後、CloudShellを起動して以下のコマンドを打つだけです。

az container create -g TEST-RG \

--name poc-web \
--image xxxxx.azurecr.io/web \
--ip-address public \
--registry-username xxxxx \
--registry-password yyyyyyyyy \
--ports 80 \
--dns-name-label zzzzzzz \
--environment-variables SPRING_PROFILES_ACTIVE=development


Container Instancesのその他の操作

ログを取得する

az container logs --resource-group TEST-RG --name poc-web

ログにアタッチする(コンテナの標準出力に繋がります)

az container attach --resource-group TEST-RG --name poc-web

Containr Instancesを削除する

az container delete -g TEST-RG --name poc-web 


監視

AzureMonitorを使った監視ができますが、CPU,メモリ、ネットワークのIn/Outくらいで細かい部分は見えないようです。今のところこれ以上のメトリクスを取るにはSideCarを使って監視していく感じになるのかな・・・とと思います。

image.png


まとめ

とにかく簡単にAzureにコンテナをデプロイするにはContainerInstancesですね。