LoginSignup
1
3

More than 1 year has passed since last update.

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

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 Chat Gpt

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 Chat Gpt

やること

公開されている下記のレポジトリのサンプルアプリケーションを ACI にデプロイする。

前提環境

今回は Windows 環境で vscode / 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/https://www.docker.com/products/docker-desktop/
*既にインストール済みの環境で実施しました。

gitのインストールが終わっていること

https://git-scm.com/download/win
*不要かも、既にインストール済みの環境で実施しました。

vscodeをインストールしていること

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%

vscode で git レポジトリをクローンする

vscode を 開きます

クローンします

"表示" → "コマンドパレット" → "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 にクローンします。
そしてそのまま vscodeで開く。

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

Java をビルドする。

vscode の "ターミナル"を選択し、ターミナルを表示させ現在の位置がクローンしたフォルダになっていることを確認する。基本的にはそのままクローンして開いてターミナルを表示させた場合はクローンしたフォルダになっている。

下記のコマンドを打つ(ビルドコマンド)

./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"に移動して、vscodeのコンソール画面 / 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

vscodeのコンソール画面 / 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

シークレットの Keyvault 登録

  • つぎに備えてメモした appId"password" を変数登録しておきます。
Azure CLI (PowerShell)
$SP_ID="XXXXXXXXXXXXXXXX"
$PSSWRD="XXXXXX"

2023-03-01_10h31_07.png

  • シークレットの keyVault 登録
    先ほどメモした 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 keyvault secret
https://learn.microsoft.com/ja-JP/cli/azure/keyvault/secret?view=azure-cli-latest

ユーザをKeyvault 登録

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