はじめに
今やっているプロジェクトではAzureを使うことが決まっており、画面はJava(Springboot)で開発しコンテナでデプロイしようと思っていました。
AKSやWebApp on LinuxでもコンテナのデプロイはできますがACI(AzureContainerInstances)はもっと楽にデプロイすることができます。
レジストリへのデプロイにはJibを使い、AzureContainerInstancesにデプロイするまでの流れを紹介したいと思います。
ソリューションの紹介
Azure Container Registry
- Azureのコンテナレジストリです。手動でデプロイする場合は↓の記事をどうぞ
- AzureContainerRegistryにprivateイメージをpushしよう
- これまではspotifyのdockerfile-maven-pluginを使って自分で用意したDockerfileをビルドしてECRへのデプロイまでをやっていました。
- jibはpluginを入れてちょっと設定をすればDockerfileがなくてもコンテナを作成し、Azure Container Registry,Elastic Container Registry,Dockerhub,Google Container Registryにデプロイすることができます。(base imageについては変更などが可能です)
- AWSでいうFargateみたいなものでコンテナが稼働するインスタンスを用意せずとも割り当てたCPUやメモリの大きさに合わせて稼働した時間だけ課金されるようなサービスです。
- Fargateほど色々はできないようですが、これからの機能の拡充が期待できますね。
- 料金についてはFargateと比較すると、今日現在だとほぼ同じでした。
- Fargateの料金は月に何円ぐらいかかるのか
- 計算してみると1vCPU,2GB=4,965円、2vCPU,4GB=9,929円という感じで誤差の範囲ですね。
Jibを使ってACRにpushする
pluginを追加します
plugins {
id 'com.google.cloud.tools.jib' version '1.4.0'
}
ACRのリポジトリを作成しimage名の部分を変更します。ユーザ名とパスワードはgradle.propertiesに記載しておきます。
jib {
to {
image = 'xxxxxx.azurecr.io/web'
auth {
username = "${USERNAME}"
password = "${PASSWORD}"
}
}
}
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
- xxxx,yyyyyyはACRのユーザ名、パスワードを入力します。
- --dns-nameをつけておくと、名前でアクセスできるようになります。
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を使って監視していく感じになるのかな・・・とと思います。
まとめ
とにかく簡単にAzureにコンテナをデプロイするにはContainerInstancesですね。