この記事では、Azure に Open/WebSphere Liberty を手動でデプロイするための詳細なガイダンスを提供します。
具体的には、この記事では次のタスクを実行する方法について説明します。
- Open Liberty または WebSphere Liberty ランタイムで Java、Java Enterprise Edition (EE)、Jakarta EE、または MicroProfile アプリケーションを実行します。
- Liberty コンテナー イメージを利用して、
az acr build
のアプリケーション Docker イメージをビルドします。 - Liberty オペレーターを使用して、コンテナー化されたアプリケーションを Azure Kubernetes Service (AKS) クラスターにデプロイします。
Liberty オペレーターは、Kubernetes クラスターで実行されているアプリケーションのデプロイと管理を簡素化します。 Open Liberty Operator または WebSphere Liberty Operator を使用して、トレースやダンプの収集など、より高度な操作を実行することもできます。
Azure portal で利用可能な Marketplace ソリューションを使用して AKS への取り組みを加速させるより自動化されたソリューションについては、「Azure Kubernetes Service (AKS) クラスターに Open Liberty/WebSphere Liberty を使用して Java アプリケーションをデプロイする」を参照してください。
Open Liberty の詳細については、Open Liberty プロジェクトのページを参照してください。 IBM WebSphere Liberty の詳細については、WebSphere Liberty の製品ページを参照してください。
この記事は、デプロイをすばやく行うのに役立ちます。 運用環境に移行する前に、Tuning Liberty について調べる必要があります。
WebSphere on Azure ソリューションを開発しているエンジニアリング チームと密接に連携しながら移行シナリオに取り組むことに関心がある場合は、こちらの簡単な WebSphere 移行に関するアンケートに内容を記入し、連絡先情報を含めてください。 プログラム マネージャー、アーキテクト、エンジニアのチームからすぐに連絡があり、緊密なコラボレーションが開始されます。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Azure CLI バージョン 2.71.0 以降
- Java Standard Edition (SE)、バージョン 17 (Eclipse Open J9 など)。
- Maven バージョン 3.5.0 以降
- Git
- Azure サブスクリプションの
Owner
ロール、またはContributor
とUser Access Administrator
ロール。 「Azure portal を使用して Azure ロールの割り当てを一覧表示する」の手順に従って、割り当てを確認できます。
Azure へのサインイン
まだサインインしていない場合は、次の手順に従って Azure サブスクリプションにサインインします。
Azure CLI または PowerShell を開き、
az login
を使用してサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「Azure CLI で Azure にサインインする」を参照してください。注記
複数の Azure テナントがお使いの Azure 資格情報に関連付けられている場合は、サイン インするテナントを指定する必要があります。
--tenant
など、az login --tenant contoso.onmicrosoft.com
オプションを使用してテナントを指定できます。az version
を使用してインストールされているバージョンと依存ライブラリを検索します。az upgrade
を使用して最新バージョンにアップグレードします。
注記
Azure CLI を使用する場合は、Azure CLI 拡張機能のインストールを求めるメッセージが表示されたら、インストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。
PowerShell では、Bash と同様に、ほとんどの Azure CLI コマンドを実行できます。 違いがあるのは、変数を使用する場合だけです。 以降のセクションでは、必要に応じてさまざまなタブでその違いについて説明します。
リソース グループを作成する
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。
java-liberty-project
の場所でaz group create
を使用して、eastus2
というリソース グループを作成します。 このリソース グループは、後で Azure Container Registry インスタンスと AKS クラスターを作成するために使用されます。
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --___location eastus2
コンテナー レジストリ インスタンスを作成する
az acr create
を使用して、コンテナー レジストリ インスタンスを作成します。 次の例では、 <your-unique-ACR-name>
という名前のコンテナー レジストリ インスタンスを作成します。 このプレースホルダーを、Azure 全体で一意の値に置き換えます。
注記
この記事では、Azure Container Registry に推奨されるパスワードレス認証メカニズムを使用します。
docker login
を使用してユーザー名とパスワードを取得した後も、az acr credential show
でユーザー名とパスワードを使用することはできます。 ただし、ユーザー名とパスワードの使用は、パスワードレス認証よりも安全性が低くなります。
export REGISTRY_NAME=<your-unique-ACR-name>
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
しばらくすると、次の行を含む JSON 出力が表示されます。
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
コンテナー レジストリ インスタンスのサインイン サーバー名を取得します。 この値は、後でアプリケーション イメージを AKS クラスターにデプロイするときに必要になります。
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
AKS クラスターを作成する
次の例に示すように、 az aks create
を使用して AKS クラスターを作成します。 この例では、1 つのノードで myAKSCluster
という名前の AKS クラスターを作成し、それにコンテナー レジストリ インスタンスをアタッチします。 コマンドの完了には数分かかります。
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--node-vm-size Standard_DS2_V2 \
--generate-ssh-keys \
--enable-managed-identity \
--attach-acr $REGISTRY_NAME
コマンドが完了すると、次の出力を含む、クラスターに関する JSON 形式の情報が返されます。
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus2",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
AKS クラスターに接続する
Kubernetes クラスターを管理するには、次の手順に従います。
次の例に示すように、
kubectl
を使用して、Kubernetes コマンド ライン クライアントaz aks install-cli
をインストールします。az aks install-cli
az aks get-credentials
を使用して、Kubernetes クラスターに接続するkubectl
を構成します。 このコマンドは、次の例に示すように、資格情報をダウンロードし、それらを使用するように Kubernetes CLI を構成します。注記
このコマンドでは、 Kubernetes 構成ファイルの既定の場所 ( ~/.kube/config) が使用されます。
--file
を使用して、Kubernetes 構成ファイルに別の場所を指定できます。az aks get-credentials \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --overwrite-existing \ --admin
次の例に示すように、
kubectl get
を使用してクラスター ノードの一覧を返して、クラスターへの接続を確認します。kubectl get nodes
次の出力例は、前の手順で作成した単一ノードを示しています。 ノードの状態が
Ready
されていることを確認します。NAME STATUS ROLES AGE VERSION aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready <none> 76s v1.29.9
Azure SQL Database の作成
次の手順を使用して、アプリ用の Azure SQL Database 単一データベースを作成します。
次のコマンドを使用して、データベース関連の環境変数を設定します。
<your-unique-sql-server-name>
を Azure SQL Database サーバーの一意の名前に置き換えます。export SQL_SERVER_NAME=<your-unique-sql-server-name> export DB_NAME=demodb
次のコマンドを使用して、1 つのデータベースを作成し、現在サインインしているユーザーを Microsoft Entra 管理者として設定します。詳細については、「 クイック スタート: 単一データベースの作成 - Azure SQL Database」を参照してください。
export ENTRA_ADMIN_NAME=$(az account show \ --query user.name \ --output tsv) az sql server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $SQL_SERVER_NAME \ --enable-ad-only-auth \ --external-admin-principal-type User \ --external-admin-name $ENTRA_ADMIN_NAME \ --external-admin-sid $(az ad signed-in-user show --query id --output tsv) az sql db create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_NAME \ --server $SQL_SERVER_NAME \ --edition GeneralPurpose \ --compute-model Serverless \ --family Gen5 \ --capacity 2
注記
セキュリティに関する考慮事項のために SQL 認証が無効になっている Azure SQL サーバーを作成します。 サーバーに対する認証には、Microsoft Entra ID のみが使用されます。 SQL 認証の有効化の詳細については、 az sql server create
を参照してください。
Service Connector を使用して AKS でサービス接続を作成する
次のコマンドを使用して、Service Connector で Microsoft Entra ワークロード ID を使用して、AKS クラスターと SQL データベース間の接続を作成します。 詳細については、「 Service Connector を使用して AKS でサービス接続を作成する」を参照してください。
# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
# Install the Service Connector passwordless extension
az extension add \
--name serviceconnector-passwordless \
--upgrade \
--allow-preview true
# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--query id \
--output tsv)
export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
--resource-group $RESOURCE_GROUP_NAME \
--name $SQL_SERVER_NAME \
--query id \
--output tsv)
# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME}
# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME} \
--query id \
--output tsv)
# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
--connection akssqlconn \
--client-type java \
--source-id $AKS_CLUSTER_RESOURCE_ID \
--target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
--workload-identity $UAMI_RESOURCE_ID
エラー メッセージのトラブルシューティング
az aks connection create sql
コマンドでエラー メッセージが生成された場合は、次の一覧でエラー メッセージを見つけて、手順に従って問題のトラブルシューティングを行います。
Dependency pyodbc can't be installed, please install it manually
このエラー メッセージは、
pyodbc
パッケージをインストールできないことを示します。ほとんどの場合、アクセス許可の問題が原因です。 次の手順を使用して問題を解決します。次のコマンドを実行して、Azure CLI で動作する Python の場所を見つけます。
az --version
出力には
Python ___location
(たとえば、Python ___location '/opt/az/bin/python3'
) が含まれている必要があります。Python ___location
値をコピーします。次のコマンドを使用して、
pyodbc
モードでsudo
パッケージをインストールします。<python-___location>
は、前の手順でコピーした Python の場所に置き換えます。sudo <python-___location> -m pip install pyodbc
libodbc.so: 共有オブジェクト ファイルを開くことができません:そのようなファイルまたはディレクトリはありません
ODBC 17/18 for SQL Server を手動でインストールしてください
これらのエラーは、
odbc
ドライバーがインストールされていないことを示します。 次の手順を使用して問題を解決します。注記
SQL 認証を使用せずに Azure SQL Database に安全にアクセスするには、Microsoft Entra ワークロード ID を使用する必要があります。 SQL 認証を使用する必要がある場合は、このセクションの手順を無視し、ユーザー名とパスワードを使用して Azure SQL Database に接続します。
Linux を使用している場合は、 Microsoft ODBC Driver for SQL Server (Linux) のインストールを開きます。 MacOS を使用している場合は、 Microsoft ODBC Driver for SQL Server (macOS) のインストールを開きます。
指示に従って、SQL Server 用 Microsoft ODBC ドライバー (18 または 17) をインストールします。
次の例に示すように、
az aks connection create sql
をもう一度使用してサービス接続を作成します。az aks connection create sql \ --connection akssqlconn \ --client-type java \ --source-id $AKS_CLUSTER_RESOURCE_ID \ --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \ --workload-identity $UAMI_RESOURCE_ID
Service Connector によって作成されたサービス アカウントとシークレットを取得する
Azure SQL Database で認証するには、次の手順に従います。
「チュートリアル: AKS アプリを Azure SQL Database に接続する」の「コンテナーの更新」セクションの手順に従って、Service Connector によって作成されたサービス アカウントとシークレットを取得します。 このオプションを使用して、提供されている YAML サンプル コード スニペットを使用してデプロイを直接作成します。
注記
Service Connector によって作成されたシークレットには、Azure SQL Database へのパスワードなしの接続文字列である
AZURE_SQL_CONNECTIONSTRING
値が含まれています。 詳細については、「Azure SQL Database を Service Connector と統合する」の「ユーザー割り当てマネージド ID」セクションにあるサンプル値を参照してください。サンプルの Kubernetes デプロイ YAML の強調表示されたセクションから、次の例に示すように、
serviceAccountName
とsecretRef.name
の値をコピーします。serviceAccountName: <service-account-name> containers: - name: raw-linux envFrom: - secretRef: name: <secret-name>
次のコマンドを使用して環境変数を定義します。
<service-account-name>
と<secret-name>
は、前の手順でコピーした値に置き換えてください。export SERVICE_ACCOUNT_NAME=<service-account-name> export SECRET_NAME=<secret-name>
これらの値は、次のセクションで、Liberty アプリケーションを AKS クラスターにデプロイするために使用します。
Open Liberty オペレーターをインストールする
このセクションでは、AKS クラスターに Open Liberty オペレーターをインストールして、Liberty アプリケーションをホストします。
次のコマンドを使用して 、Open Liberty オペレーター をインストールします。
注記
このガイドでは、Open Liberty オペレーターのインストールを指示します。 WebSphere Liberty オペレーターを使用するには、 Kubernetes CLI を使用した WebSphere Liberty オペレーターのインストールを参照してください。
# Install cert-manager Operator
export CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml
# Install the Open Liberty Operator
export OPERATOR_VERSION=1.4.2
mkdir -p overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/olo-all-namespaces.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/cluster-roles.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/kustomization.yaml -q -P ./overlays/watch-all-namespaces
mkdir base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/kustomization.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-crd.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-operator.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-roles.yaml -q -P ./base
kubectl create namespace open-liberty
kubectl apply --server-side -k overlays/watch-all-namespaces
# Remove the downloaded files
rm -rf overlays base
アプリケーション イメージの構成とビルド
AKS クラスターに Liberty アプリケーションをデプロイして実行するには、 Open Liberty イメージ または WebSphere Liberty コンテナー イメージを使用して、アプリケーションを Docker イメージとしてコンテナー化します。
このセクションの手順に従って、Liberty ランタイムにサンプル アプリケーションをデプロイします。 これらの手順では、Maven を使用します。
アプリケーションをチェックアウトする
次のコマンドを使って、このガイドのサンプル コードをクローンします。 このサンプルは、 Azure Kubernetes Service Samples GitHub の Open Liberty/WebSphere Liberty リポジトリにあります。このリポジトリには、いくつかのサンプルが含まれています。 この記事では、 java-app
サンプルを使用します。
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20250424
detached HEAD
状態であることを示すメッセージが表示された場合、このメッセージは無視しても問題はありません。 これは、タグをチェックアウトしたという意味です。 リポジトリを複製すると、次のファイル構造が作成されます。
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ openlibertyapplication-passwordless-db.yaml
│ ├─ docker/
│ │ ├─ Dockerfile
│ │ ├─ Dockerfile-wlp
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.xml
java、resources、および webapp ディレクトリには、サンプル アプリケーションのソース コードが含まれています。 このコードでは、jdbc/JavaEECafeDB
という名前のデータ ソースを宣言して使用します。
aks ディレクトリでは、ファイル openlibertyapplication-passwordless-db.yaml を使用してアプリケーション イメージをデプロイします。 docker ディレクトリには、Open Liberty または WebSphere Liberty を使用してアプリケーション イメージを作成するための 2 つのファイルがあります。
liberty/config ディレクトリーでは、server.xml・ファイルを使用して、Open Liberty クラスターおよび WebSphere Liberty クラスターのデータベース接続を構成します。 これは、Azure SQL Database への接続に使用される azure.sql.connectionstring
変数を定義します。
pom.xml ファイルは、プロジェクトの構成情報を含む Maven プロジェクト オブジェクト モデル (POM) ファイルです。
pom-azure-identity.xml ファイルは、Microsoft Entra ID を使用して Azure サービスに対する認証に使用される azure-identity
依存関係を宣言します。
注記
このサンプルでは、azure-identity
ライブラリを使用して、Microsoft Entra 認証を使用して Azure SQL Database に対する認証を行います。これは、セキュリティ上の考慮事項に推奨されます。 Liberty アプリケーションでの SQL 認証の使用の詳細については、 Java Database Connectivity (JDBC) を使用したリレーショナル・データベース接続を参照してください。
プロジェクトをビルドする
必要なプロパティを収集したら、次のコマンドを使用してアプリケーションをビルドします。 プロジェクトの POM ファイルにより、環境から多くの変数が読み取られます。 Maven ビルドの一部として、これらの変数は src/main/aks にある YAML ファイルの値を設定するために使用されます。 必要に応じて、Maven の外部でアプリケーションに対して同様の操作を行うことができます。
cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
AKS デプロイのイメージをビルドする
次の例に示すように、 az acr build
を使用してイメージをビルドします。
cd $BASE_DIR/java-app/target
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
az acr build
コマンドは、Dockerfile で指定された成果物をコンテナー レジストリ インスタンスにアップロードし、イメージをビルドして、コンテナー レジストリ インスタンスに格納します。
アプリケーションを AKS クラスターにデプロイする
次の手順を使用して、AKS クラスターに Liberty アプリケーションをデプロイします。
次のコマンドを使用して、デプロイ ファイルを適用します。
cd $BASE_DIR/java-app/target # Apply deployment file kubectl apply -f openlibertyapplication-passwordless-db.yaml
次のコマンドを使用して、
OpenLibertyApplication
インスタンスが作成されるかどうかを判断します。kubectl get openlibertyapplication javaee-cafe-cluster --watch
次の出力が一般的です。 Ctrl+C キーを押して終了します。
NAME IMAGE EXPOSED RECONCILED RESOURCESREADY READY WARNING AGE javaee-cafe-cluster <registry-name>.azurecr.io/javaee-cafe:v1 True True True 57s
次のコマンドを使用して、オペレーターによって作成されたデプロイの準備ができているかどうかを確認します。
kubectl get deployment javaee-cafe-cluster --watch
次の出力が一般的です。
NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-cluster 0/3 3 0 20s
[
3/3
] 列の下にREADY
が、[3
] 列の下にAVAILABLE
が表示されるまで待ってから、Ctrl+C キーを使用してkubectl
ウォッチ プロセスを停止します。
アプリケーションをテストする
アプリケーションが実行されると、Kubernetes ロード バランサー サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスの完了には時間がかかる場合があります。
次の例に示すように、 kubectl get service
を使用して、サービスの外部 IP アドレスが使用可能な場合に取得します。
export APP_URL=http://$(kubectl get service javaee-cafe-cluster -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $APP_URL
注記
出力から有効な URL が表示されない場合は、しばらく待ってからコマンドをもう一度実行してください。
Web ブラウザーで URL を開き、アプリケーションのホーム ページを確認します。 ページが正しく読み込まれない場合は、アプリの起動後にページを更新します。 ページの左上にアプリケーション レプリカのポッド名が表示されることを確認します。 数分待ってページを最新の情報に更新すると、AKS クラスターによって提供される負荷分散のため、別のポッド名が表示されます。
注記
現在、このアプリケーションは HTTPS を使用していません。 独自の証明書でトランスポート層セキュリティ (TLS) を有効にすることをお勧めします。 詳細については、「Azure Kubernetes Service のイングレス コントローラーで TLS を使用する」を参照してください。
リソースをクリーンアップする
Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 クラスターが不要になったら、 az group delete
を使用して、リソース グループ、コンテナー サービス、コンテナー レジストリ、データベース、およびすべての関連リソースを削除します。
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
次のステップ
詳細については、このガイドで使用されている次のリファレンスを参照してください。
- Azure Kubernetes Service (AKS) とは?
- チュートリアル: AKS アプリを Azure SQL Database に接続する
- Azure SQL Database と Service Connector の統合
- Microsoft Entra 認証を使用して接続する
- Open Liberty
- Open Liberty オペレーター
- Open Liberty Server の構成の概要
- Liberty Maven プラグイン
- Liberty イメージを開く
- WebSphere Liberty コンテナー イメージ
Azure Cache for Redis を Java アプリに組み込むには、「 クイック スタート: Redisson Redis クライアントで Java で Azure Cache for Redis を使用する」を参照してください。
Azure で WebSphere 製品を実行するオプションについては、「Azure で WebSphere ファミリの製品を実行するためのソリューションとは?」を参照してください。