駆け出しアーキテクトのやまぱんです。
今回公開されている Java のサンプルアプリケーションを使って、Azure Container Instances(ACI)にデプロイしてみたいと思います。
とりあえずやってみよう Azure Container Instances !
想定ターゲット: ACI(Azure Container Instances)とか ACR(Azure Container Registry)をとりあえず試しに使ってみたい人。
Azure Container Instances とは
・ Azure Container Instances とは
https://learn.microsoft.com/ja-jp/azure/container-instances/container-instances-overview
Azure Container Instances ( ACI )は、マイクロソフトが提供する、コンテナを簡単にデプロイし、実行するためのコンテナ実行サービスです。ACI を利用することで、Docker や Kubernetes などのコンテナオーケストレーションツールを使わずに、単一のコマンドでコンテナを実行することができます。
ACI は、コンテナのスケーリングや高可用性の実現、負荷分散、自動復旧などの機能を提供しています。また、ACI は、コンテナの実行に必要なリソースを自動的に割り当てるため、開発者はインフラストラクチャの詳細について心配することなく、コンテナアプリケーションを簡単に開発およびデプロイすることができます。
ACI は、Azure の仮想マシン、ストレージ、ネットワークサービスと同じように、Azure ポータルや Azure CLI などの Azure 管理ツールを使って管理することができます。また、ACI は Azure Kubernetes Service ( AKS )などのコンテナオーケストレーションツールと組み合わせて使うこともできます。
by ChatGPT
Azure Container Registry とは
・ Azure Container Registry とは
https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-intro
Azure Container Registry ( ACR )は、マイクロソフトが提供する、コンテナイメージの管理・保存・配信を行うためのクラウドサービスです。ACR は、Docker イメージや OCI ( Open Container Initiative )イメージを保存することができ、Azure 上でコンテナイメージのビルド、デプロイ、実行を行うことができます。
ACR は、プライベートリポジトリとして利用することができます。つまり、コンテナイメージを外部に公開することなく、自社内部や限定的なユーザーのみに配信することができます。また、ACR は、高速かつセキュアなコンテナイメージの配信を行うために、Azure CDN ( Content Delivery Network )を利用することができます。
ACR は、Azure ポータルや Azure CLI、Azure PowerShell などの Azure 管理ツールを使って管理することができます。また、ACR は Azure Kubernetes Service ( AKS )や Azure Container Instances ( ACI )などの Azure コンテナサービスと組み合わせて使うことができ、コンテナイメージのビルド、デプロイ、実行をスムーズに行うことができます。
by ChatGPT
やること
公開されている下記のリポジトリのサンプルアプリケーションを ACI にデプロイする。
- Azure-Samples/ApplicationInsights-Java-Samples
https://github.com/Azure-Samples/ApplicationInsights-Java-Samples
前提環境
今回は Windows 環境で VS Code / PowerShell を利用して行います。
Azure CLI が導入済
・ https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli
下記のような Az ~~ なコマンドは Azure CLI コマンドです。
Az login
GitHub のアカウント作成
https://github.com/
*不要かも、既にインストール済みの環境で実施しました。
Docker Desktop for Windows がインストール済
・ https://www.docker.com/products/docker-desktop/
*既にインストール済みの環境で実施しました。
Git のインストールが終わっていること
https://Git-scm.com/download/win
*不要かも、既にインストール済みの環境で実施しました。
VS Code をインストールしていること
https://code.visualstudio.com/
ついでに日本語化しておきましょう。
Visual Studio Code は、デフォルトでは「英語表記」となっています。
1.Visual Studio Code を開く
2.メニューバーから、View > Command Palette の順にクリック
3.Configure Display Language > Install additional languages の順にクリック
4.Japanese Language Pack for Visual Studio Code をインストール
5.Visual Studio Code を再起動
事前準備 サンプルアプリケーションをローカルでビルドして jar ファイルを作る
Java JDK のインストール
https://www.oracle.com/java/technologies/downloads/#jdk19-Windows
上記 URL より、Windows 版の x64 Installer をダウンロードして実行して進めます。
システム環境変数の追加
システム環境変数 JAVA_HOME を追加します。
値は私の環境で前の手順ですすめた場合は "C:\Program Files\Java\jdk-19" でした。
一応確認してフォルダができているか確認してください。

上記のように設定します。
- 確認
上記追加後 コマンドプロンプトで確認します。
設定中から開いている場合は再度開きなおしてください。(開きなおさないと反映されません)
コマンドプロンプトは "Windows + R" を押してでてくる画面で "cmd" と打つことで表示されます。
echo %JAVA_HOME%
VS Code で Git リポジトリをクローンする
VS Code を 開きます
クローンします
"表示" → "コマンドパレット" → "Git クローン" を選択し、今回クローンするリポジトリ(XXX.Git)を入力する。
今回クローンするリポジトリは https://github.com/Azure-Samples/ApplicationInsights-Java-Samples なので https://github.com/Azure-Samples/ApplicationInsights-Java-Samples.Git を入力し"Enter"する。
すると、クローン先のフォルダの選択画面がでるので任意のフォルダを選択。
今回は C:\git_temp\test にクローンします。
そしてそのまま VS Code で開く。

念のためフォルダも確認。ちゃんとクローンされていることが分かる。

Java をビルドする。
VS Code の "ターミナル"を選択し、ターミナルを表示させ現在の位置がクローンしたフォルダになっていることを確認する。基本的にはそのままクローンして開いてターミナルを表示させた場合はクローンしたフォルダになっている。
下記のコマンドを打つ(ビルドコマンド)
./mvnw package
ビルドが始まる

ビルドが終わる "BUILD SUCCESS"

jar ができていることを確認する
今回の場合 C:\git_temp\test\ApplicationInsights-Java-Samples\maven\target 配下に app.jar ファイルができています。
実行してみる
先ほど jar ファイルができた"C:\git_temp\test\ApplicationInsights-Java-Samples\maven\target"に移動して、VS Code のコンソール画面 / PowerShell で下記コマンドを打って jar ファイルを実行します。
- 移動コマンド
cd C:\git_temp\test\ApplicationInsights-Java-Samples\maven\target
- 実行コマンド
java -jar .\app.jar
実行が始まる
確認してみる
今回のサンプルはポート 8080 でアクセスするサンプルアプリケーションなのでブラウザで http://localhost:8080/ にアクセスしてみます。

このように表示されれば OK です。
消す
Ctrl +C
VS Code のコンソール画面 / PowerShell 上で上記コマンドを押すことで終了します。
http://localhost:8080/ にもアクセスできなくなるはずです。
本題です、次に Azure (ACI)にデプロイします。
ACR(Azure Container Registry) の作成
Azure Portal から ACR の作成

今回は konohaJavaACR(.azure.io) で作成しました。
ACR 上でビルド
Azure にログインする
Az login --tenant XXXXX
XXXX は 任意の AAD テナントを指定する。(省略可能)
・ https://learn.microsoft.com/ja-jp/cli/azure/authenticate-azure-cli#sign-in-with-a-different-tenant
ACR 上でビルド
クローンしたリポジトリに移動し下記コマンドを実行。
- 先ほど作成した Azure Container Registry 名を変数として定義
$ACR_NAME="konohaJavaACR"
- ビルド
az acr build --registry $ACR_NAME --image javasample -f docker/Dockerfile ./maven
・(参考)チュートリアル:Azure Container Registry タスクを使用して、クラウドでコンテナー イメージをビルドしてデプロイする
https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-tutorial-quick-task
実行画面
Azure Portal で確認
ACR のイメージ確認
az acr repository list --name $ACR_NAME --output table
ACR のイメージのタグ確認
az acr repository show-tags --name $ACR_NAME --repository javasample --output table
ACR へログイン
az acr login --name $ACR_NAMEaz acr repository list --name $ACR_NAME --output table
ACR ログインサーバーのフルネームを取得
az acr show --name $ACR_NAME --query loginServer --output table
返された値の ACR ログインサーバ名 (この場合、konohajavaacr.azurecr.io)をメモする。
そして、変数 $ACR_LOGIN_SERVER として登録する
$ACR_LOGIN_SERVER="konohajavaacr.azurecr.io"
サービスプリンシパル周りの設定
ACI に使わせるためのサービスプリンシパルを作成する
- 変数をそれぞれ定義
$RES_GROUP="RG-temp"
$ACR_NAME="konohaJavaACR"
$AKV_NAME="keyvault0225"
- Key Vault 作成
az keyvault create --location japaneast -g $RES_GROUP -n $AKV_NAME
サービスプリンシパル作成
az ad sp create-for-rbac --name http://$ACR_NAME-pull --scopes $(az acr show --name $ACR_NAME --query id --output tsv) --role acrpull
<参考>
・クイック スタート:Azure CLI を使用して Azure Key Vault との間でシークレットの設定と取得を行う
https://learn.microsoft.com/ja-JP/cli/azure/create-an-azure-service-principal-azure-cli
・ az ad sp
https://learn.microsoft.com/ja-jp/cli/azure/ad/sp?view=azure-cli-latest
シークレットの Key Vault 登録
- つぎに備えてメモした appId と "password" を変数登録しておきます。
$SP_ID="XXXXXXXXXXXXXXXX"
$PSSWRD="XXXXXX"
- シークレットの Key Vault 登録
先ほどメモした password を引数 "value" に記載します。
az keyvault secret set --vault-name $AKV_NAME --name $ACR_NAME-pull-pwd --value $PSSWRD
<参考>
・クイック スタート:Azure CLI を使用して Azure Key Vault との間でシークレットの設定と取得を行う
https://learn.microsoft.com/ja-JP/azure/key-vault/secrets/quick-create-cli
・ az Key Vault secret
https://learn.microsoft.com/ja-JP/cli/azure/Key Vault/secret?view=azure-cli-latest
ユーザを Key Vault 登録
az keyvault secret set --vault-name $AKV_NAME --name $ACR_NAME-pull-usr --value $SP_ID
これで、下記のようにサービスプリンシパルを KV 登録できた。
- $ACR_NAME-pull-usr
- $ACR_NAME-pull-pwd
Azure Container Instances へのビルド
変数設定(再掲含む)
- まずは適当な DNS 名を決める(変数定義)
$ACI_DNS_LABEL="konohaJavasample001"
- 変数をそれぞれ定義(再掲)
$RES_GROUP="RG-temp"
$ACR_NAME="konohaJavaACR"
$AKV_NAME="keyvault0225"
$ACR_LOGIN_SERVER="konohajavaacr.azurecr.io"
ACI(Azure Container Instances) へのビルド
az container create --resource-group $RES_GROUP --name javaai-sample-app --image $ACR_LOGIN_SERVER/javasample:latest --cpu 1 --memory 1.5 --registry-login-server $ACR_LOGIN_SERVER --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) --ip-address Public --dns-name-label $ACI_DNS_LABEL --ports 8080
確認してみて、、、、できた!
先ほどメモした FQDN へ http/ポート 8080 でアクセスします。
前半部分でローカルでビルドした時のように表示されています~!
以上です。
とりあえずやってみよう Azure Container Instances でした。
























