Azureでコンテナサービスを使ってみる
はじめに
今回は、前回作成したJavaのDockerイメージを、Azureで提供されているコンテナサービス(Azure Contener Instance, Azure Web App for Container)にデプロイするところまでを紹介します。
実際にテストで利用する場合は、以下の月額費用が時間割(Azure Contener Registory以外)で請求されるので、早めに削除することをお勧めします。
Azureでのコンテナサービス
Azureで提供されているコンテナサービスは、いろいろ存在し、自分なりにIass, Passに分けて、サービス内容および特定プランの月額費用(2021年12月時点、小数切り捨て)を整理してみました。正確な費用計算は、公式サイトを利用してください。
ちなみに、以前、紹介したAzure Static Web App(記事) + Azure FunctionはFass(Function as a Service)の位置づけになります。
Iaas(Infrastructure as a Service)
-
Azure Vertual Machines(VM)
- 普通にVMにDockerをインストールして利用する。社内だけなら、GitLabと連携すれば十分使える。
- 月額は、D2s_v3(vCPUx2,Mem8G,4G)だと$94。さらに、1,3年予約やSpotVMを利用すると、$19まで下がる。シリーズによって、様々な価格帯がある。
-
Azure Contener Registory ... 2018年6月GA
- Dockerイメージをプライベートで管理できる。
- OCI(Open Container Initiative)というコンテナ標準規格にも対応。
- 月額は、Basicは10Gで$5, Premiumは500Gで$50 + $0.0001/秒のビルド(日割計算)
※プライベートアクセスは、Premiumのみ利用できる。
-
Azure Contener Instance(ACI) ... 2018年4月GA
- Registoryに登録されたDockerイメージを利用し、ネットワーク設定を行い、デプロイすると利用できる。
- YMLやJSON, Docker Composeを使用すると、複数コンテナもデプロイできる。Docker Composeだと、一部の機能はサポートされていないらしい。
- 月額は、1コンテナグループあたりvCPUx1,Mem4Gで$52
-
Azure Kubernetes Service(AKS) ... 2018年6月GA
- コンテナをKubernetes(k8s)上で動作できるサービス。
- 複数のノード(サーバ)をクラスタとして統合し、複数のコンテナをクラスタ上で実行することで、拡張性/可用性の高いアーキテクチャを提供でき、無駄なくサーバが使える。その分、設定が難しい。
- 月額は、F4s v2(vCPUx4,Mem8G,32G)で$154
Pass(Platform as a Service)
-
Azure Web App for Containers ... (Linux版)2017年9月GA, (Windows版)2020年9月GA
- Azure App Serviceで、作成時にコードではなく、Dockerを選択したときの別の呼び方。
- 通常のApp Serviceと比べ、任意の言語およびバージョンを利用できるので、便利。
- 月額は、テスト:Basic A0(vCPUx1,Mem1.75,10G)で$13、CPUx2で倍
本番:Standard A0(vCPUx1,Mem1.75,50G)で$81、CPUx2で倍
※Premium V3以降は3年予約で40%割引もある。
-
Azure Red Hat OpenShift ... 2019年5月GA
- Red Hat OpenShiftを使って、k8sが利用できる。k8sを直接使うより高機能。
- 月額は、マスターノード:D8s v3(vCPUx8,Mem32G)で$376
+ ワーカーノード:F4s v2(vCPUx4,Mem8G)で$281
-
Azure Spring Cloud ... 2020年9月GA
- Springに特化したサービスで、k8s上で動かすことができる。
- ソースをデプロイするだけで、自動でイメージを作成し、k8s上にデプロイできる。
- 利用しているSpring Cloudのバージョンにより、ソースのバージョンも依存する。
- 月額は、テスト:Basic(vCPUx2,Mem4GB)で約$224,+vCPUx1=$64,+Mem1G=$7
本番:Standard(vCPUx8,Mem16GB)で約$861,+vCPUx1=$82,+Mem1G=$8
-
Azure Container Apps Service ... 2021年11月プレビュー版
- コンテナ化したアプリをk8s上で簡単に動かすことができる。今後、要注目。
- Daprとの組み合わせで、様々な言語やバージョンに対応できる。
- 月額は、未定。プレビュー版は無料。現時点のリージョンはCanada, Europeのみ。
Azure Contener Registory
まずは、公式サイトを元に、Azure上に前回作成したDcokerイメージを登録してみます。
- ポータルサイトで、「コンテナー レジストリ」を検索し、[作成]ボタンを押す。
- 以下の内容を設定し、[確認および作成]ボタンを押した後、[作成]ボタンを押す。
・リソースグループ ... いつも使っているグループ
・名前 ... training
・レジストリ名 ... 任意の名前(xxxx.azurecr.ioでアクセスできる)
・場所 ... 東日本(リソースグループにて自動選択)
・SKU ... Basic - 作成したレジストリのメニューからアクセスキーを選択し、管理者ユーザをONに変更し、そこに表示されるユーザー名とpasswordを保持する。
- Ubuntu上で、今回作成したコンテナレジストリにログインする。ここからはメニューにあるクイックスタートの内容と同じ。
$ docker login xxxx.azurecr.io
Username: <3で取得したユーザー名>
Password: <3で取得したpassword>
- 前回作成したDockerイメージにタグをつけて、プッシュする。
$ docker tag hello-world:0.0.1-SNAPSHOT xxxx.azurecr.io/hello-world:v1
$ docker push xxxx.azurecr.io/hello-world:v1
- 動作確認として、タグで作成したDockerイメージを削除し、レジストリから取得してみる。また、ポータル画面のレジストリにもhello-worldが追加されていることを確認する。
docker rmi xxxx.azurecr.io/hello-world:v1
docker pull xxxx.azurecr.io/hello-world:v1
Azure Contener Instance
次に、Contener InstanceでDockerイメージを起動してみます。
色々やってみましたが、まだ使い方がよくわかっていないので、単純にPublic IPにアップロードする手順のみ掲載しました。
- Azure CLIをPowerShellにてアップデートする。2.28.0は、既知の問題#19475でコンテナ削除ができなかった。
> az upgrade
Your current Azure CLI version is 2.28.0. Latest version available is 2.30.0.
→ 要再起動
> az --version
- 以下のコマンドで、Contener Registoryのイメージからコンテナを作成する。
$ az container create --resource-group <リソース名> --name hello-world --image xxxx.azurecr.io/hello-world:v1 --cpu 1 --memory 1 --registry-login-server xxxx.azurecr.io --registry-username <ユーザID> --registry-password <パスワード> --dns-name-label <DNS名> --ports 8080 --os-type linux
→ リソース名、ユーザID、パスワード、DNS名は、適切な値に変更する。
→ ポータルからはユーザID, パスワードの指定ができなかったので、作成できなかった。
$ az container show --resource-group <リソース名> --name hello-world --out table
→ 一覧表示
$ az container attach --resource-group <リソース名> --name hello-world
→ ログ確認
- 以下のURLでアクセスできることを確認する。
http://<DNS名>.japaneast.azurecontainer.io:8080/hello - ポータルからコンテナを削除する。
$ az container delete --resource-group traning2 --name hello-world
→ yを押すと削除される。
Azure Web App for Container
次に、Azure App ServiceでDockerイメージを起動してみます。簡単なアプリ起動なら、こっちのほうが簡単です。Docker Composeもアップロードできます。
- ポータルサイトで、「App Service」を検索し、[作成]ボタンを押す。
- 以下の内容を設定し、[作成]ボタンを押す。
基本
・リソースグループ ... いつも利用しているグループ
・名前 ... 任意の名前(xxxx.azurewebsite.netでアクセスできる)
・公開 ... Dockerコンテナー
・地域 ... Japan East or West
・Linuxプラン ... 新規作成で、開発/テストにあるB1を選択。(Freeは起動せず)
Docker
・イメージソース ... Azure Container Registry
・レジストリ ... 作成したレジストリ名
・イメージ ... hello-world(自動選択)
・レジストリ ... v1(自動選択) - メニューにある[構成]から、[+新しいアプリケーション設定]を選択し、以下の設定を追加する。
・名前 ... WEBSITES_PORT
・値 ... 8080 - 設定後に[保存]ボタンを押すと、アプリケーションが再起動する。
- 以下のURLで、画面が表示されるか確認する。見れるまで、1~2分かかりました。
https://<任意の名前>.azurewebsites.net/hello
※URLが繋がらない場合は、メニューのログストリームを見て、ログが動いてないようであれば、概要から再起動で繋がりました。
おわりに
今回は、Azureを使ったコンテナサービスを紹介しました。コストだけで考えると、VMで構築したほうが安いのかもしれませんが、k8sを使って拡張性/可用性の高いサービスを構築したいときは、色々な専門知識が必要になるので、Paasでのコンテナ利用が進んでいくのだと思いました。
引き続き、VMとGitLabを使った社内で利用するコンテナサービスについても、記事にしてみたいと思います。
Discussion