1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java のサンプルアプリケーションを ACI(Azure Container Instances)にデプロイしてみる

1
Last updated at Posted at 2023-02-24

駆け出しアーキテクトのやまぱんです。

今回公開されている 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 にデプロイする。

前提環境

今回は Windows 環境で VS Code / PowerShell を利用して行います。

Azure CLI が導入済

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli
下記のような Az ~~ なコマンドは Azure CLI コマンドです。

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" でした。
一応確認してフォルダができているか確認してください。
2023-02-22_10h53_18.png

上記のように設定します。

  • 確認
    上記追加後 コマンドプロンプトで確認します。
    設定中から開いている場合は再度開きなおしてください。(開きなおさないと反映されません)
    コマンドプロンプトは "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 ファイルを実行します。

  • 移動コマンド
powershell
cd C:\git_temp\test\ApplicationInsights-Java-Samples\maven\target
  • 実行コマンド
powershell
java -jar .\app.jar

実行が始まる

確認してみる

今回のサンプルはポート 8080 でアクセスするサンプルアプリケーションなのでブラウザで http://localhost:8080/ にアクセスしてみます。

このように表示されれば OK です。

消す

powershell
Ctrl +C

VS Code のコンソール画面 / PowerShell 上で上記コマンドを押すことで終了します。

http://localhost:8080/ にもアクセスできなくなるはずです。

本題です、次に Azure (ACI)にデプロイします。

ACR(Azure Container Registry) の作成 

Azure Portal から ACR の作成

image.png
今回は konohaJavaACR(.azure.io) で作成しました。

ACR 上でビルド

Azure にログインする

Az login --tenant XXXXX

image.png

XXXX は 任意の AAD テナントを指定する。(省略可能)
https://learn.microsoft.com/ja-jp/cli/azure/authenticate-azure-cli#sign-in-with-a-different-tenant

ブラウザで認証画面が開くのでログインする。
image.png

ACR 上でビルド

クローンしたリポジトリに移動し下記コマンドを実行。

  • 先ほど作成した Azure Container Registry 名を変数として定義
Azure CLI (PowerShell)
$ACR_NAME="konohaJavaACR"
  • ビルド
Azure CLI (PowerShell)
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

実行画面

  • 実行開始直後
    image.png

  • 実行完了後
    image.png

Azure Portal で確認

  • Azure Portal → コンテナーレジストリ → 任意のレジストリ(今回は "konohaJavaACR" ) → リポジトリ 、から確認
    image.png

  • 該当のリポジトリ("javasample")をクリック
    image.png
    タグ: latest であることを確認する。

ACR のイメージ確認

Azure CLI (PowerShell)
az acr repository list --name $ACR_NAME --output table
  • 実行結果
    image.png

ACR のイメージのタグ確認

Azure CLI (PowerShell)
az acr repository show-tags --name $ACR_NAME --repository javasample --output table
  • 実行結果
    image.png

ACR へログイン

Azure CLI (PowerShell)
az acr login --name $ACR_NAMEaz acr repository list --name $ACR_NAME --output table
  • 実行結果
    image.png

ACR ログインサーバーのフルネームを取得

Azure CLI (PowerShell)
az acr show --name $ACR_NAME --query loginServer --output table
  • 実行結果
    image.png

返された値の ACR ログインサーバ名 (この場合、konohajavaacr.azurecr.io)をメモする。
そして、変数 $ACR_LOGIN_SERVER として登録する

Azure CLI (PowerShell)
$ACR_LOGIN_SERVER="konohajavaacr.azurecr.io"

サービスプリンシパル周りの設定

ACI に使わせるためのサービスプリンシパルを作成する

  • 変数をそれぞれ定義
Azure CLI (PowerShell)
$RES_GROUP="RG-temp"
$ACR_NAME="konohaJavaACR"
$AKV_NAME="keyvault0225"

image.png

  • Key Vault 作成
az keyvault create --location japaneast -g $RES_GROUP -n $AKV_NAME
  • 実行完了後
    image.png

サービスプリンシパル作成

Azure CLI (PowerShell)
az ad sp create-for-rbac   --name http://$ACR_NAME-pull   --scopes $(az acr show --name $ACR_NAME --query id --output tsv)   --role acrpull

実行結果
image.png
上記の appId"password" をメモします!

<参考>
・クイック スタート: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" を変数登録しておきます。
Azure CLI (PowerShell)
$SP_ID="XXXXXXXXXXXXXXXX"
$PSSWRD="XXXXXX"

2023-03-01_10h31_07.png

  • シークレットの Key Vault 登録
    先ほどメモした password を引数 "value" に記載します。
Azure CLI (PowerShell)
az keyvault secret set   --vault-name $AKV_NAME   --name $ACR_NAME-pull-pwd   --value $PSSWRD
  • 実行結果
    image.png

<参考>
・クイック スタート: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 登録

Azure CLI (PowerShell)
az keyvault secret set     --vault-name $AKV_NAME     --name $ACR_NAME-pull-usr     --value $SP_ID
  • 実行結果
    image.png

これで、下記のようにサービスプリンシパルを KV 登録できた。

  • $ACR_NAME-pull-usr
  • $ACR_NAME-pull-pwd

Azure Container Instances へのビルド

変数設定(再掲含む)

  • まずは適当な DNS 名を決める(変数定義)
Azure CLI (PowerShell)
$ACI_DNS_LABEL="konohaJavasample001"
  • 変数をそれぞれ定義(再掲)
Azure CLI (PowerShell)
$RES_GROUP="RG-temp"
$ACR_NAME="konohaJavaACR"
$AKV_NAME="keyvault0225"
$ACR_LOGIN_SERVER="konohajavaacr.azurecr.io"
  • 実行結果
    とりあえずまとめて実施。
    image.png

ACI(Azure Container Instances) へのビルド

Azure CLI (PowerShell)
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

"--image $ACR_LOGIN_SERVER/javasample:latest" の後は、ACR のイメージ確認とタグ確認で確認した結果を元に記載します。
今回の場合は "javasample" と "latest" です。
image.png

  • 実行直後
    image.png

  • 実行結果(最後を抜粋)
    image.png
    上記 FQDN ( 今回の場合は "konohaJavasample001.japaneast.azurecontainer.io" ) をメモします。

確認してみて、、、、できた!

先ほどメモした FQDN へ http/ポート 8080 でアクセスします。

image.png

前半部分でローカルでビルドした時のように表示されています~!

以上です。
とりあえずやってみよう Azure Container Instances でした。

1
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?