チュートリアル: Azure Virtual Machines (VM) に JBoss EAP を手動でインストールする
このチュートリアルでは、Red Hat Enterprise Linux (RHEL) 上の Azure Virtual Machines (VM) に Red Hat JBoss Enterprise Application Platform (EAP) をインストールし、ドメイン モードでクラスターを構成する手順を示します。
このチュートリアルでは、次のタスクを実施する方法について説明します。
- カスタム仮想ネットワークを作成し、ネットワーク内にVMを作成します。
- コマンド ラインを手動で使って、目的の JDK と Red Hat JBoss EAP を VM にインストールします。
- コマンド ライン インターフェイス (CLI) を使って、ドメイン モードで Red Hat JBoss EAP クラスターを構成します。
- クラスターで PostgreSQL データソース接続を構成します。
- クラスター内のサンプル Java Enterprise Edition アプリケーションをデプロイして実行します。
- Azure Application Gateway 経由でアプリケーションをパブリック インターネットに公開します。
- 成功した構成を検証します。
GNU/Linux VM でこれらの手順すべてを、ユーザーの代わりに Azure portal から直接実行する完全に自動化されたソリューションが必要な場合、「クイックスタート: Azure portal を使って Azure Virtual Machines (VM) に JBoss EAP クラスターをデプロイする」を参照してください。
JBoss EAP on Azure ソリューションを開発しているエンジニアリング チームと密接に連携しながら移行シナリオに取り組むことに関心がある場合は、こちらの簡単な JBoss EAP 移行に関するアンケートに内容を記入し、連絡先情報を含めてください。 プログラム マネージャー、アーキテクト、エンジニアのチームからすぐに連絡を取り、密接なコラボレーションが開始されます。
Note
この記事には、Microsoft が使用しなくなった "スレーブ" という用語への言及が含まれています。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。
前提条件
Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Azure CLI version 2.51.0 以降のバージョンをインストールして、Azure CLI コマンドを実行します。
- 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用する」を参照してください。
- az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
必要な Red Hat ライセンスがあることを確認してください。 Red Hat JBoss EAP の Red Hat Subscription Management (RHSM) エンタイトルメントがある Red Hat アカウントが必要です。 このエンタイトルメントにより、完全自動化ソリューション (「クイック スタート: Azure Virtual Machines (VM) に JBoss EAP クラスターをデプロイする」) で、Red Hat によるテストおよび認定済みの JBoss EAP バージョンをインストールできます。
Note
EAP エンタイトルメントをお持ちでない場合は、 Red Hat Developer Subscription for Individuals を使用して無料の開発者サブスクリプションにサインアップできます。 次のセクションで RHSM ユーザー名および RHSM パスワードとして使用する、アカウントの詳細を保存しておきます。
既に登録済みの場合や、登録を完了した後は、次の手順を使用して必要な資格情報 (プール ID) を見つけることができます。 また、これらのプール ID は、以降の手順で EAP 資格がある RHSM プール ID としても使用します。
ご自分の Red Hat アカウントにサインインします。
初めてサインインすると、プロフィールに入力することが求められます。 使用状況に応じて、次のスクリーンショットに示すように、アカウントの種類で [個人] または [会社] を選択します。
個人向けの Red Hat Developer サブスクリプションを開きます。 このリンクをクリックすると、適切な SKU のご自分のアカウント内のすべてのサブスクリプションに移動します。
[すべての購入済みサブスクリプション] テーブルにあるコントロールの行で、[アクティブ] を選択します。
最も遠い将来の値が最初の行として表示されるまで、[終了日] の並べ替え可能な列ヘッダーを選択します。
最初 の行を選択します。 次に、[プール ID] から [マスター プール] に続く値をコピーして保存しておきます。
Java Development Kit (JDK) バージョン 11。 このガイドでは、OpenJDK の Red Hat ビルドをお勧めします。 コマンドを実行するシェルで
JAVA_HOME
環境変数が正しく設定されていることを確認します。Git。
git
が正常に機能するかどうかをテストするには、git --version
を使用します。 このチュートリアルは、バージョン 2.25.1 でテストされました。Maven。
mvn
が正常に機能するかどうかをテストするには、mvn -version
を使用します。 このチュートリアルは、バージョン 3.6.3 でテストされました。
環境の準備
このセクションでは、JDK、Red Hat JBoss EAP、PostgreSQL Java Database Connectivity (JDBC) ドライバーをインストールするインフラストラクチャをセットアップします。
前提条件
このチュートリアルでは、Red Hat JBoss EAP クラスターをドメイン モードで構成し、合計 3 台の VM で管理サーバーと 2 台の管理対象サーバーを構成します。 クラスターを構成するには、次の 3 つの Azure VM を作成する必要があります。
- 管理者 VM (VM 名
adminVM
) は、ドメイン コントローラーとして実行されます。 - 2 つのマネージド VM (VM 名
mspVM1
およびmspVM2
) は、ホスト コントローラーとして実行されます。
Azure へのサインイン
まだ行っていない場合は、az login コマンドを使って、画面上の指示に従うことにより、Azure サブスクリプションにサインインします。
az login
Note
複数の Azure テナントがお使いの Azure 資格情報に関連付けられている場合は、サイン インするテナントを指定する必要があります。 そのためには、--tenant
オプションを使用します。 たとえば、az login --tenant contoso.onmicrosoft.com
のようにします。
リソース グループを作成する
az group create を使用して、リソース グループを作成します。 リソース グループ名は、サブスクリプション内でグローバルに一意である必要があります。 この理由で、一意である必要がある名前を作成するには、一部の一意識別子を前に付けることを検討してください。 便利な方法は、自分のイニシャルの後に今日の日付を mmdd
の形式で付加することです。 この例では、 westus
の場所に $RESOURCE_GROUP_NAME
という名前のリソース グループを作成します。
export SUBSCRIPTION=$(az account show --query id --output tsv)
export SUFFIX=$(date +%s)
export RESOURCE_GROUP_NAME=rg-$SUFFIX
echo "Resource group name: $RESOURCE_GROUP_NAME"
az group create \
--name $RESOURCE_GROUP_NAME \
--location westus
仮想ネットワークの作成
Red Hat JBoss EAP クラスターを構成するリソースは、仮想ネットワークを使用して、相互通信し、パブリック インターネットとも通信する必要があります。 仮想ネットワークの計画に関する完全なガイドは、Cloud Adoption Framework for Azure ガイドの 「仮想ネットワークの計画」を参照してください。 詳細については、 「Azure Virtual Network のよくある質問 (FAQ)」を参照してください。
このセクションの例では、アドレス空間 192.168.0.0/16
で仮想ネットワークを作成して、VM で使用するサブネットを作成します。
まず az network vnet create を使って仮想ネットワークを作成します。 次の例では、 myVNet
という名前のネットワークを作成します。
az network vnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name myVNet \
--address-prefixes 192.168.0.0/24
az network vnet subnet create を使用して Red Hat JBoss EAP クラスターのサブネットを作成します。 次の例では、 mySubnet
という名前のサブネットを作成します。
az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name mySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.0/25
az network vnet subnet create を使用して Application Gateway のサブネットを作成します。 次の例では、 jbossVMGatewaySubnet
という名前のサブネットを作成します。
az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name jbossVMGatewaySubnet \
--vnet-name myVNet \
--address-prefixes 192.168.0.128/25
ネットワーク セキュリティ グループを作成してサブネットを割り当てる
パブリック IP を使って VM を作成する前に、ネットワーク セキュリティ グループ (NSG) を作成して、前の手順で作成した仮想ネットワークとサブネットをセキュリティで保護します。
az network nsg create を使用して、ネットワーク セキュリティ グループを作成します。 次の例では、mynsg
という名前のネットワーク セキュリティ グループを作成します。
az network nsg create \
--resource-group $RESOURCE_GROUP_NAME \
--name mynsg
az network nsg rule create を使用して、ネットワーク セキュリティ グループの規則を作成します。 次の例では、ALLOW_APPGW
および ALLOW_HTTP_ACCESS
という名前のネットワーク セキュリティ グループの規則を作成しています。 これらの規則により、App Gateway は Red Hat JBoss EAP で使用される HTTP ポートで受信トラフィックを受け入れることが許可されます。
az network nsg rule create \
--resource-group $RESOURCE_GROUP_NAME \
--nsg-name mynsg \
--name ALLOW_APPGW \
--protocol Tcp \
--destination-port-ranges 65200-65535 \
--source-address-prefix GatewayManager \
--destination-address-prefix '*' \
--access Allow \
--priority 500 \
--direction Inbound
az network nsg rule create \
--resource-group $RESOURCE_GROUP_NAME \
--nsg-name mynsg \
--name ALLOW_HTTP_ACCESS \
--protocol Tcp \
--destination-port-ranges 22 80 443 9990 8080 \
--source-address-prefix Internet \
--destination-address-prefix '*' \
--access Allow \
--priority 510 \
--direction Inbound
次の例に示すように、az network vnet subnet update を使って、前の手順で作成したサブネットをこのネットワーク セキュリティ グループに関連付けます。
az network vnet subnet update \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name myVNet \
--name mySubnet \
--network-security-group mynsg
az network vnet subnet update \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name myVNet \
--name jbossVMGatewaySubnet \
--network-security-group mynsg
管理者用の Red Hat Enterprise Linux マシンを作成
SSH キーを生成する
次のコマンドを使用して、 adminVM
の SSH キーを生成します。
ssh-keygen -t rsa -b 4096 -f ~/.ssh/jbosseapvm
ssh-add ~/.ssh/jbosseapvm
管理 VM を作成
VM の作成に使用する マーケットプレイスのイメージは、RedHat:rhel-raw:86-gen2:latest
です。 その他のイメージについては、「Azure で利用可能な Red Hat Enterprise Linux (RHEL) イメージ」をご覧ください。
Note
次の例に示すように、az vm image list コマンドを使用して、Red Hat が提供するすべての利用可能な Red Hat Enterprise Linux イメージをクエリできます。たとえば、az vm image list --offer RHEL --publisher RedHat --output table --all
です。 詳細については、「Red Hat Enterprise Linux イメージの概要」を参照してください。
別のイメージを使用する場合は、このガイドで使用するインフラストラクチャを有効にするために追加のライブラリをインストールする必要がある場合があります。
基本的な VM を作成し、必要なすべてのツールをインストールした後、そのスナップショットを取得し、スナップショットをベースにレプリカを作成します。
az vm create を使用して VM を作成します。 この VM で 管理サーバーを実行します。
次の例では、TLS/SSL 認証を使用して、Azure マネージド ID と Red Hat Enterprise Linux VM を作成します。
az identity create \
--name "passwordless-managed-identity" \
--resource-group $RESOURCE_GROUP_NAME \
--location westus
az vm create \
--resource-group $RESOURCE_GROUP_NAME \
--name adminVM \
--image RedHat:rhel-raw:86-gen2:latest \
--assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \
--size Standard_DS1_v2 \
--admin-username azureuser \
--ssh-key-values ~/.ssh/jbosseapvm.pub \
--public-ip-sku Standard \
--nsg mynsg \
--vnet-name myVnet \
--subnet mySubnet
Red Hat JBoss EAP をインストールする
次の手順に従って、以下をインストールします。
adminVM
のパブリック IP を取得するには、次のコマンドを使用します。export ADMIN_VM_PUBLIC_IP=$(az vm show \ --resource-group $RESOURCE_GROUP_NAME \ --name adminVM \ --show-details \ --query publicIps | tr -d '"')
ターミナルを開き、次のコマンドを使って
adminVM
に SSH 接続します。ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
次のコマンドを使ってポートのファイアウォールを構成します。
sudo firewall-cmd --zone=public --add-port={9999/tcp,8443/tcp,8009/tcp,8080/tcp,9990/tcp,9993/tcp,45700/tcp,7600/tcp} --permanent sudo firewall-cmd --reload sudo iptables-save
最初の 2 つのコマンドの後に、単語
success
が表示されます。 3 つ目のコマンドの後、次の例ような出力が表示されます。# Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *filter :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *security :INPUT ACCEPT [19:3506] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5:492] -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m tcp --dport 53 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m owner --uid-owner 0 -j ACCEPT -A OUTPUT -d 168.63.129.16/32 -p tcp -m conntrack --ctstate INVALID,NEW -j DROP COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *raw :PREROUTING ACCEPT [20:3546] :OUTPUT ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *mangle :PREROUTING ACCEPT [20:3546] :INPUT ACCEPT [20:3546] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [24:5446] :POSTROUTING ACCEPT [24:5446] COMMIT # Completed on Wed Mar 29 22:39:23 2023 # Generated by iptables-save v1.8.4 on Wed Mar 29 22:39:23 2023 *nat :PREROUTING ACCEPT [1:40] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [4:240] :OUTPUT ACCEPT [4:240] COMMIT # Completed on Wed Mar 29 22:39:23 2023
Note
Red Hat JBoss EAP をインストールするには、 RHSM_USER
と RHSM_PASSWORD
の値が必要です。 Red Hat カスタマー ポータルにアクセスするには、アクセス許可が制限されたサービス アカウントを使用することをお勧めします。
以下のコマンドを使って、管理ホストを Red Hat Subscription Management (RHSM) アカウントに登録します。
export RHSM_USER=<your-rhsm-username> export RHSM_PASSWORD='<your-rhsm-password>' export EAP_POOL=<your-rhsm-pool-ID> sudo subscription-manager register --username ${RHSM_USER} --password ${RHSM_PASSWORD} --force
次の例のような出力が表示されます。
Registering to: subscription.rhsm.redhat.com:443/subscription The system has been registered with ID: redacted The registered system name is: adminVM
以下のコマンドを使って、管理ホストを Red Hat JBoss EAP プールにアタッチします。
sudo subscription-manager attach --pool=${EAP_POOL}
Note
シンプル コンテンツ アクセス モードを使用している場合、このコマンドは無視されます。
Red Hat JBoss EAP をインストールするには、以下のコマンドを使用します。
sudo subscription-manager repos --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms sudo yum update -y --disablerepo='*' --enablerepo='*microsoft*' sudo yum groupinstall -y jboss-eap7
2 つ目と 3 つ目のコマンドでは、多くの出力行が表示されます (末尾は Complete!
)。
以下のコマンドを使って、アクセス許可とネットワーク構成を設定します。
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config echo 'AllowTcpForwarding no' | sudo tee -a /etc/ssh/sshd_config sudo systemctl restart sshd
以下のコマンドを使って、環境変数を構成します。
echo 'export EAP_RPM_CONF_DOMAIN="/etc/opt/rh/eap7/wildfly/eap7-domain.conf"' >> ~/.bash_profile echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' >> ~/.bash_profile source ~/.bash_profile sudo touch /etc/profile.d/eap_env.sh echo 'export EAP_HOME="/opt/rh/eap7/root/usr/share"' | sudo tee -a /etc/profile.d/eap_env.sh
「exit」と入力し、SSH 接続を終了します。
マネージド サーバー用マシンを作成する
ドメイン コントローラー サーバーとして使用する adminVM
に、Red Hat JBoss EAP をインストールしました。 引き続き、2 つのホスト コントローラー サーバーを実行するマシンを準備する必要があります。 次に、adminVM
のスナップショットを作成し、2 つの管理対象サーバー mspVM1
および mspVM2
に合わせてマシンを準備します。
このセクションでは、 adminVM
のスナップショットを使用してマシンを準備する方法について説明します。 Azure CLI がサイン インしているターミナルに戻り、次の手順を実行します。
次のコマンドを使用して
adminVM
を停止します:az vm stop --resource-group $RESOURCE_GROUP_NAME --name adminVM
次の例に示すように、az snapshot create を使って
adminVM
OS ディスクのスナップショットを取得します。export ADMIN_OS_DISK_ID=$(az vm show \ --resource-group $RESOURCE_GROUP_NAME \ --name adminVM \ --query storageProfile.osDisk.managedDisk.id \ --output tsv) az snapshot create \ --resource-group $RESOURCE_GROUP_NAME \ --name myAdminOSDiskSnapshot \ --source ${ADMIN_OS_DISK_ID}
次のコマンドを使用して
adminVM
を開始します:az vm start --resource-group $RESOURCE_GROUP_NAME --name adminVM
次の手順を実行して、
mspVM1
を作成します:まず、az disk create を使用して
mspVM1
用の管理対象ディスクを作成します。#Get the snapshot ID export SNAPSHOT_ID=$(az snapshot show \ --name myAdminOSDiskSnapshot \ --resource-group $RESOURCE_GROUP_NAME \ --query '[id]' \ --output tsv) #Create a new Managed Disks using the snapshot Id #Note that managed disk is created in the same location as the snapshot az disk create \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM1_OsDisk_1 \ --source ${SNAPSHOT_ID}
次に、次のコマンドを使用して VM
mspVM1
を作成し、OS ディスクmspVM1_OsDisk_1
をアタッチします。#Get the resource Id of the managed disk export MSPVM1_DISK_ID=$(az disk show \ --name mspVM1_OsDisk_1 \ --resource-group $RESOURCE_GROUP_NAME \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM1 \ --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \ --attach-os-disk ${MSPVM1_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet
Red Hat JBoss EAP がインストールされている
mspVM1
を作成しました。 VM がadminVM
OS ディスクのスナップショットから作成されているので、2 つの VM は同じホスト名になります。 az vm run-command invoke を使用して、ホスト名を 値mspVM1
に変更します:az vm run-command invoke \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM1 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM1"
コマンドが正常に実行された場合、次の例のような出力が表示されます。
{ "value": [ { "code": "ProvisioningState/succeeded", "displayStatus": "Provisioning succeeded", "level": "Info", "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n", "time": null } ] }
同じコマンドを使って、
mspVM2
を作成します。#Create a new Managed Disks for mspVM2 az disk create \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM2_OsDisk_1 \ --source ${SNAPSHOT_ID} #Get the resource Id of the managed disk export MSPVM2_DISK_ID=$(az disk show \ --name mspVM2_OsDisk_1 \ --resource-group $RESOURCE_GROUP_NAME \ --query '[id]' \ --output tsv) #Create VM by attaching existing managed disks as OS az vm create \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM2 \ --assign-identity "/subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/passwordless-managed-identity" \ --attach-os-disk ${MSPVM2_DISK_ID} \ --os-type linux \ --public-ip-sku Standard \ --nsg mynsg \ --vnet-name myVnet \ --subnet mySubnet #Set hostname az vm run-command invoke \ --resource-group $RESOURCE_GROUP_NAME \ --name mspVM2 \ --command-id RunShellScript \ --scripts "sudo hostnamectl set-hostname mspVM2"
次のコマンドを使用して、後のセクションで使用するプライベート IP アドレスを取得して表示します。
export ADMINVM_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name adminVM \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export ADMINVM_IP=$(az network nic show \
--ids ${ADMINVM_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM1_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
echo "Private IP of adminVM: ${ADMINVM_IP}"
echo "Private IP of mspVM1: ${MSPVM1_IP}"
echo "Private IP of mspVM2: ${MSPVM2_IP}"
これで、3 台のマシンの準備が整いました。 次に、マネージド ドメイン モードで Red Hat JBoss EAP クラスターを構成します。
マネージド ドメインとクラスターの構成
セッション レプリケーションを有効にしてクラスターを構成します。 詳細については、セッション レプリケーションに関するページをご覧ください。
セッション レプリケーションを有効にするには、クラスターの Red Hat JBoss EAP 高可用性を使用します。 Microsoft Azure では、マルチキャストに基づく JGroups 検出プロトコルがサポートされていません。 他の JGroups 検出プロトコル (静的構成 (TCPPING
)、共有データベース (JDBC_PING
)、共有ファイル システム ベースの ping (FILE_PING
)、または TCPGOSSIP
) を使用することもできますが、Azure 用に特別に開発された共有ファイル検出プロトコル (AZURE_PING
) の使用を強くお勧めします。 詳しくは、Microsoft Azure 内での JBoss EAP 高可用性の使用に関するページをご覧ください。
AZURE_PING 用の Azure Storage アカウントと BLOB コンテナーの作成
以下のコマンドを使って、ストレージ アカウントと BLOB コンテナーを作成します。
# Define your storage account name
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
# Define your Blob container name
export CONTAINER_NAME=azurepingcontainerabc1111rg
# Create storage account
az storage account create \
--resource-group $RESOURCE_GROUP_NAME \
--name ${STORAGE_ACCOUNT_NAME} \
--location westus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot
続いて、以下のコマンドを使って、後で使用するためにストレージ アカウント キーを取得します。 エラーが発生する場合は、数分待ってからもう一度やり直してください。 ストレージ アカウントを作成するための上記のコマンドが、まだ完了していない可能性があります。
export STORAGE_ACCESS_KEY=$(az storage account keys list \
--resource-group $RESOURCE_GROUP_NAME \
--account-name ${STORAGE_ACCOUNT_NAME} \
--query "[0].value" \
--output tsv)
# Create blob container
az storage container create \
--name ${CONTAINER_NAME} \
--account-name ${STORAGE_ACCOUNT_NAME} \
--account-key ${STORAGE_ACCESS_KEY}
次の出力が表示されます。
{
"created": true
}
ドメイン コントローラーの構成 (管理ノード)
このチュートリアルでは、Red Hat JBoss EAP 管理 CLI コマンドを使ってドメイン コントローラーを構成します。 詳細については、管理 CLI ガイドに関するページをご覧ください。
次の手順では、adminVM
でドメイン コントローラーの構成をセットアップします。 SSH を使って azureuser
ユーザーとして adminVM
に接続します。 以前の手順で、パブリック IP アドレス adminVM
が ADMIN_VM_PUBLIC_IP
環境変数にキャプチャされていることを思い出してください。
ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
まず、以下のコマンドを使い、AZURE_PING
プロトコルを使って HA プロファイルと JGroup を構成します。
export HOST_VM_IP=$(hostname -I)
export STORAGE_ACCOUNT_NAME=azurepingstgabc1111rg
export CONTAINER_NAME=azurepingcontainerabc1111rg
export STORAGE_ACCESS_KEY=<the-value-from-before-you-connected-with-SSH>
#-Configure the HA profile and JGroups using AZURE_PING protocol
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
'embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-master.xml',\
':write-attribute(name=name,value=domain1)',\
'/profile=ha/subsystem=jgroups/stack=tcp:remove',\
'/profile=ha/subsystem=jgroups/stack=tcp:add()',\
'/profile=ha/subsystem=jgroups/stack=tcp/transport=TCP:add(socket-binding=jgroups-tcp,properties={ip_mcast=false})',\
"/profile=ha/subsystem=jgroups/stack=tcp/protocol=azure.AZURE_PING:add(properties={storage_account_name=\"${STORAGE_ACCOUNT_NAME}\", storage_access_key=\"${STORAGE_ACCESS_KEY}\", container=\"${CONTAINER_NAME}\"})",\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MERGE3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FD_ALL:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=VERIFY_SUSPECT:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.NAKACK2:add(properties={use_mcast_xmit=false,use_mcast_xmit_req=false})',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=UNICAST3:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.STABLE:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=pbcast.GMS:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=MFC:add',\
'/profile=ha/subsystem=jgroups/stack=tcp/protocol=FRAG3:add',\
'/profile=ha/subsystem=jgroups/channel=ee:write-attribute(name="stack", value="tcp")',\
'/server-group=main-server-group:write-attribute(name="profile", value="ha")',\
'/server-group=main-server-group:write-attribute(name="socket-binding-group", value="ha-sockets")',\
"/host=master/subsystem=elytron/http-authentication-factory=management-http-authentication:write-attribute(name=mechanism-configurations,value=[{mechanism-name=DIGEST,mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])",\
"/host=master/interface=unsecure:add(inet-address=${HOST_VM_IP})",\
"/host=master/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=master/interface=public:add(inet-address=${HOST_VM_IP})"
# Save a copy of the domain.xml, later you need to share it with all host controllers
cp $EAP_HOME/wildfly/domain/configuration/domain.xml /tmp/domain.xml
出力の最後のスタンザは、次の例のようになります。 そうでない場合、問題をトラブルシューティングして解決してから続行してください。
[domain@embedded /] /host=master/interface=public:add(inet-address=192.168.0.4 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:05:55,019 INFO [org.jboss.as] (MSC service thread 1-1) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 28ms
次に、以下のコマンドを使って JBoss サーバーを構成し、EAP サービスをセットアップします。
Note
JBoss EAP 管理ユーザーを構成するには、 JBOSS_EAP_USER
と JBOSS_EAP_PASSWORD
の値が必要です。
# Configure the JBoss server and setup EAP service
echo 'WILDFLY_HOST_CONFIG=host-master.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Configure JBoss EAP management user
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
sudo $EAP_HOME/wildfly/bin/add-user.sh -u $JBOSS_EAP_USER -p $JBOSS_EAP_PASSWORD -g 'guest,mgmtgroup'
出力は次の例のようになるはずです。
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-users.properties'
Added user 'jbossadmin' to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-users.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/standalone/mgmt-groups.properties'
Added user 'jbossadmin' with groups guest,mgmtgroup to file '/etc/opt/rh/eap7/wildfly/domain/mgmt-groups.properties'
最後に、以下のコマンドを使って EAP サービスを開始します。
# Start the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
出力は次の例のようになるはずです。
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 02:11:44 UTC; 5s ago
Main PID: 3855 (scl)
Tasks: 82 (limit: 20612)
Memory: 232.4M
CGroup: /system.slice/eap7-domain.service
├─3855 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─3856 /bin/bash /var/tmp/sclfYu7yW
├─3858 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─3862 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─3955 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─3967 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 02:11:44 adminVM systemd[1]: Started JBoss EAP (domain mode).
「q」と入力してページャーを終了します。 「exit」と入力し、SSH 接続を終了します。
Red Hat JBoss EAP サービスを開始すると、Web ブラウザーから http://$ADMIN_VM_PUBLIC_IP:9990
経由で管理コンソールにアクセスできます。 構成したユーザ名 jbossadmin
とパスワード Secret123456
でサインインします。
[ランタイム] タブを選択します。ナビゲーション ウィンドウで、[トポロジ] を選択します。 現時点では、クラスターに含まれるドメイン コントローラーは 1 つだけであることがわかります。
ホスト コントローラー (ワーカー ノード) の構成
SSH を使って azureuser
ユーザーとして mspVM1
に接続します。 次のコマンドを使って、VM のパブリック IP アドレスを取得します。
MSPVM_PUBLIC_IP=$(az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM1 \
--show-details \
--query publicIps | tr -d '"' )
ssh -A -i ~/.ssh/jbosseapvm azureuser@$MSPVM_PUBLIC_IP
以下のコマンドを使って、mspVM1
でホスト コントローラーをセットアップします。
# environment variables
export DOMAIN_CONTROLLER_PRIVATE_IP=<adminVM-private-IP>
export HOST_VM_NAME=$(hostname)
export HOST_VM_NAME_LOWERCASE=$(echo "${HOST_VM_NAME,,}")
export HOST_VM_IP=$(hostname -I)
export JBOSS_EAP_USER=jbossadmin
export JBOSS_EAP_PASSWORD=Secret123456
# Save default domain configuration as backup
sudo -u jboss mv $EAP_HOME/wildfly/domain/configuration/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml.backup
# Fetch domain.xml from domain controller
scp azureuser@${DOMAIN_CONTROLLER_PRIVATE_IP}:/tmp/domain.xml /tmp/domain.xml
sudo mv /tmp/domain.xml $EAP_HOME/wildfly/domain/configuration/domain.xml
sudo chown jboss:jboss $EAP_HOME/wildfly/domain/configuration/domain.xml
以下のコマンドを使って、ホスト コントローラーの変更を mspVM1
に適用します。
# Setup host controller
sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --echo-command \
"embed-host-controller --std-out=echo --domain-config=domain.xml --host-config=host-slave.xml",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-one:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=server-two:remove",\
"/host=${HOST_VM_NAME_LOWERCASE}/server-config=${HOST_VM_NAME_LOWERCASE}-server0:add(group=main-server-group)",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-configuration=slave:add(authentication-name=${JBOSS_EAP_USER}, credential-reference={clear-text=${JBOSS_EAP_PASSWORD}})",\
"/host=${HOST_VM_NAME_LOWERCASE}/subsystem=elytron/authentication-context=slave-context:add(match-rules=[{authentication-configuration=slave}])",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote.username, value=${JBOSS_EAP_USER})",\
"/host=${HOST_VM_NAME_LOWERCASE}:write-attribute(name=domain-controller.remote, value={host=${DOMAIN_CONTROLLER_PRIVATE_IP}, port=9990, protocol=remote+http, authentication-context=slave-context})",\
"/host=${HOST_VM_NAME_LOWERCASE}/core-service=discovery-options/static-discovery=primary:write-attribute(name=host, value=${DOMAIN_CONTROLLER_PRIVATE_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=unsecured:add(inet-address=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=management:write-attribute(name=inet-address, value=${HOST_VM_IP})",\
"/host=${HOST_VM_NAME_LOWERCASE}/interface=public:write-attribute(name=inet-address, value=${HOST_VM_IP})"
出力の最後のスタンザは、次の例のようになります。 そうでない場合、問題をトラブルシューティングして解決してから続行してください。
[domain@embedded /] /host=mspvm1/interface=public:write-attribute(name=inet-address, value=192.168.0.5 )
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined,
"response-headers" => {"process-state" => "reload-required"}
}
02:58:59,388 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0050: JBoss EAP 7.4.10.GA (WildFly Core 15.0.25.Final-redhat-00001) stopped in 58ms
次に、以下のコマンドを使って JBoss サーバーを構成し、EAP サービスをセットアップします。
echo 'WILDFLY_HOST_CONFIG=host-slave.xml' | sudo tee -a $EAP_RPM_CONF_DOMAIN
# Enable the JBoss server and setup EAP service
sudo systemctl enable eap7-domain.service
# Edit eap7-domain.services
sudo sed -i 's/After=syslog.target network.target/After=syslog.target network.target NetworkManager-wait-online.service/' /usr/lib/systemd/system/eap7-domain.service
sudo sed -i 's/Before=httpd.service/Wants=NetworkManager-wait-online.service \nBefore=httpd.service/' /usr/lib/systemd/system/eap7-domain.service
# Reload and restart EAP service
sudo systemctl daemon-reload
sudo systemctl restart eap7-domain.service
# Check the status of EAP service
systemctl status eap7-domain.service
出力は次の例のようになるはずです。
● eap7-domain.service - JBoss EAP (domain mode)
Loaded: loaded (/usr/lib/systemd/system/eap7-domain.service; enabled; vendor>
Active: active (running) since Thu 2023-03-30 03:02:15 UTC; 7s ago
Main PID: 9699 (scl)
Tasks: 51 (limit: 20612)
Memory: 267.6M
CGroup: /system.slice/eap7-domain.service
├─9699 /usr/bin/scl enable eap7 -- /opt/rh/eap7/root/usr/share/wildf>
├─9700 /bin/bash /var/tmp/sclgJ1hRD
├─9702 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/launch.sh /us>
├─9706 /bin/sh /opt/rh/eap7/root/usr/share/wildfly/bin/domain.sh --h>
├─9799 /usr/lib/jvm/jre/bin/java -D[Process Controller] -server -Xms>
└─9811 /usr/lib/jvm/jre/bin/java -D[Host Controller] -Dorg.jboss.boo>
Mar 30 03:02:15 mspVM1 systemd[1]: Started JBoss EAP (domain mode).
「q」と入力してページャーを終了します。 「exit」と入力し、SSH 接続を終了します。
SSH を使って azureuser
ユーザーとして mspVM2
に接続します。 次のコマンドを使って、VM のパブリック IP アドレスを取得します。
az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM2 \
--show-details \
--query publicIps | tr -d '"'
mspVM2
で前の手順を繰り返し、「exit」と入力して SSH 接続を終了します。
2 つのホスト コントローラーが adminVM
に接続されると、次のスクリーンショットに示すように、クラスター トポロジが表示されます。
Azure Application Gateway を使った Red Hat JBoss EAP クラスターの公開
Azure VM 上にクラスターを作成したので、このセクションでは、Azure Application Gateway を使用して JBoss EAP をインターネットに公開する手順を説明します。
Azure Application Gateway を作成する
Red Hat JBoss EAP をインターネットに公開するには、パブリック IP アドレスが必要です。 パブリック IP アドレスを作成し、Azure Application Gateway を関連付けます。 次の例に示すように、az network public-ip create を使って作成します。
az network public-ip create \
--resource-group $RESOURCE_GROUP_NAME \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
次に、バックエンド サーバーを Application Gateway バックエンド プールに追加します。 次のコマンドを使ってバックエンド IP アドレスのクエリを実行します。 バックエンド サーバーとして構成されるのはホスト コントローラー (ワーク ノード) だけです。
export MSPVM1_NIC_ID=$(az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM1 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM1_IP=$(az network nic show \
--ids ${MSPVM1_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
export MSPVM2_NIC_ID=$(az vm show \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM2 \
--query networkProfile.networkInterfaces'[0]'.id \
--output tsv)
export MSPVM2_IP=$(az network nic show \
--ids ${MSPVM2_NIC_ID} \
--query ipConfigurations'[0]'.privateIPAddress \
--output tsv)
次に、Azure Application Gateway を作成します。 次の例では、ホスト コントローラーを含む Application Gateway を既定のバックエンド プールで作成します。
az network application-gateway create \
--resource-group $RESOURCE_GROUP_NAME \
--name myAppGateway \
--public-ip-address myAGPublicIPAddress \
--location westus \
--capacity 2 \
--http-settings-port 8080 \
--http-settings-protocol Http \
--frontend-port 80 \
--sku Standard_V2 \
--subnet jbossVMGatewaySubnet \
--vnet-name myVNet \
--priority 1001 \
--servers ${MSPVM1_IP} ${MSPVM2_IP}
Note
この例では、HTTP を使って Red Hat JBoss EAP サーバーへの簡単なアクセスをセットアップします。 セキュリティで保護されたアクセスが必要な場合は、「Application Gateway でのエンド ツー エンド TLS」の手順に 従って TLS/SSL ターミネーションを構成します。
この例では、ポート 8080 でホスト コントローラーを公開します。 この後の手順で、クラスターへのデータベース接続を使ってサンプル アプリケーションをデプロイします。
Azure Database for PostgreSQL フレキシブル サーバーを接続する
このセクションでは、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成し、Red Hat JBoss EAP クラスター上の PostgreSQL への接続を構成する方法について説明します。
Azure Database for PostgreSQL フレキシブル サーバー インスタンスを作成する
以下の手順を使って、データベース インスタンスを作成します。
次の例に示すように、az postgres flexible-server create を使用して、Azure Database for PostgreSQL フレキシブル サーバー インスタンスをプロビジョニングします。
export DATA_BASE_USER=jboss DB_SERVER_NAME="jbossdb$(date +%s)" echo "DB_SERVER_NAME=${DB_SERVER_NAME}" az postgres flexible-server create \ --active-directory-auth Enabled \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --location westus \ --version 16 \ --public-access 0.0.0.0 \ --tier Burstable \ --sku-name Standard_B1ms \ --yes objectId=$(az identity show --name passwordless-managed-identity --resource-group $RESOURCE_GROUP_NAME --query principalId -o tsv) az postgres flexible-server ad-admin create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name ${DB_SERVER_NAME} \ --display-name "passwordless-managed-identity" \ --object-id $objectId \ --type ServicePrincipal
以下のコマンドを使って、Azure サービスからのアクセスを許可します。
# Save aside the following names for later use export fullyQualifiedDomainName=$(az postgres flexible-server show \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --query "fullyQualifiedDomainName" \ --output tsv) export name=$(az postgres flexible-server show \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --query "name" \ --output tsv) az postgres flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP_NAME \ --name ${DB_SERVER_NAME} \ --rule-name "AllowAllWindowsAzureIps" \ --start-ip-address "0.0.0.0" \ --end-ip-address "0.0.0.0"
次のコマンドを使ってデータベースを作成します。
az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP_NAME \ --server-name ${DB_SERVER_NAME} \ --database-name testdb
ドライバーのインストール
JBoss 管理 CLI を使用して JDBC ドライバーをインストールするには、次の手順に従います。
次のコマンドを使って
adminVM
に SSH 接続します。 既に接続を開いている場合は、この手順を省略できます。ssh -A -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
次のコマンドを使用して、adminVM に JDBC ドライバーをダウンロードします。
# Create JDBC driver and module directory jdbcDriverModuleDirectory="$EAP_HOME"/wildfly/modules/com/postgresql/main sudo mkdir -p "$jdbcDriverModuleDirectory" # Download JDBC driver and passwordless extensions extensionJarName=azure-identity-extensions-1.1.20.jar extensionPomName=azure-identity-extensions-1.1.20.pom sudo curl --retry 5 -Lo ${jdbcDriverModuleDirectory}/${extensionJarName} https://repo1.maven.org/maven2/com/azure/azure-identity-extensions/1.1.20/$extensionJarName sudo curl --retry 5 -Lo ${jdbcDriverModuleDirectory}/${extensionPomName} https://repo1.maven.org/maven2/com/azure/azure-identity-extensions/1.1.20/$extensionPomName sudo yum install maven -y sudo mvn dependency:copy-dependencies -f ${jdbcDriverModuleDirectory}/${extensionPomName} -Ddest=${jdbcDriverModuleDirectory} # Create module for JDBC driver jdbcDriverModule=module.xml sudo cat <<EOF >${jdbcDriverModule} <?xml version="1.0" ?> <module xmlns="urn:jboss:module:1.1" name="com.postgresql"> <resources> <resource-root path="${extensionJarName}"/> EOF # Add all jars from target/dependency for jar in ${jdbcDriverModuleDirectory}/target/dependency/*.jar; do if [ -f "$jar" ]; then # Extract just the filename from the path jarname=$(basename "$jar") echo " <resource-root path=\"target/dependency/${jarname}\"/>" >> ${jdbcDriverModule} fi done # Add the closing tags cat <<EOF >> ${jdbcDriverModule} </resources> <dependencies> <module name="javaee.api"/> <module name="sun.jdk"/> <module name="ibm.jdk"/> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module> EOF chmod 644 $jdbcDriverModule sudo mv $jdbcDriverModule $jdbcDriverModuleDirectory/$jdbcDriverModule
次のコマンドを使用して、JDBC ドライバーをホスト コントローラーにコピーします。
scp -rp $EAP_HOME/wildfly/modules/com/postgresql azureuser@mspvm1:/tmp/ ssh azureuser@mspvm1 "sudo mkdir -p $EAP_HOME/wildfly/modules/com/postgresql && sudo cp -rp /tmp/postgresql/* $EAP_HOME/wildfly/modules/com/postgresql && sudo rm -rf /tmp/postgresql" scp -rp $EAP_HOME/wildfly/modules/com/postgresql azureuser@mspvm2:/tmp/ ssh azureuser@mspvm2 "sudo mkdir -p $EAP_HOME/wildfly/modules/com/postgresql && sudo cp -rp /tmp/postgresql/* $EAP_HOME/wildfly/modules/com/postgresql && sudo rm -rf /tmp/postgresql"
サーバー ログは、
/var/opt/rh/eap7/lib/wildfly/domain/servers/mspvm1-server0/log/server.log
のmspVM1
およびmspVM2
にあります。 デプロイに失敗した場合、続ける前に、このログ ファイルを調べて問題を解決してください。
JDBC ドライバーを登録するには、次のコマンドを使用します。
# Register JDBC driver sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \ "/profile=ha/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)"
Red Hat JBoss EAP クラスターのデータベース接続の構成
データベース サーバーを起動して、必要なリソース ID を取得し、JDBC ドライバーをインストールしました。 次に、このセクションの手順では、JBoss CLI を使って、前の手順で作成した PostgreSQL インスタンスとのデータソース接続を構成する方法について説明します。
ターミナルを開き、次のコマンドを使って
adminVM
に SSH 接続します。ssh -i ~/.ssh/jbosseapvm azureuser@$ADMIN_VM_PUBLIC_IP
以下のコマンドを使って、データ ソースを作成します。
# Replace the following values with your own export DATA_SOURCE_CONNECTION_STRING="jdbc:postgresql://<database-fully-qualified-domain-name>:5432/testdb?sslmode=require&user=passwordless-managed-identity&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin" export JDBC_DATA_SOURCE_NAME=dataSource-postgresql export JDBC_JNDI_NAME=java:jboss/datasources/JavaEECafeDB sudo -u jboss $EAP_HOME/wildfly/bin/jboss-cli.sh --connect --controller=$(hostname -I) --echo-command \ "data-source add --driver-name=postgresql --profile=ha --name=${JDBC_DATA_SOURCE_NAME} --jndi-name=${JDBC_JNDI_NAME} --connection-url=${DATA_SOURCE_CONNECTION_STRING} "
java:jboss/datasources/JavaEECafeDB
という名前のデータ ソースが正常に構成されました。
Java Enterprise Edition Cafe サンプル アプリケーションのデプロイ
次の手順に従って、Java Enterprise Edition Cafe サンプル アプリケーションを Red Hat JBoss EAP クラスターにデプロイします。
Java Enterprise Edition Cafe をビルドするには、以下の手順に従います。 これらの手順は、Git と Maven がインストールされたローカル環境があることを前提としています。
次のコマンドを使用して、GitHub からソース コードを複製します。
git clone https://github.com/Azure/rhel-jboss-templates.git --branch 20240904 --single-branch
次のコマンドを使用して、ソース コードをビルドします。
mvn clean install --file rhel-jboss-templates/eap-coffee-app/pom.xml
このコマンドは、eap-coffee-app/target/javaee-cafe.war ファイルを作成します。 次の手順でこのファイルをアップロードします。
Web ブラウザーを開いて、
http://<adminVM-public-IP>:9990
の管理コンソールに移動し、ユーザー名jbossadmin
とパスワードSecret123456
でサインインします。javaee-cafe.war をコンテンツ リポジトリにアップロードするには、次の手順に従います。
次の手順を使用して、アプリケーションを
main-server-group
にデプロイします。
Red Hat JBoss EAP クラスター構成のテスト
JBoss EAP クラスターを構成し、アプリケーションをデプロイしました。 次の手順を実行して、アプリケーションにアクセスし、すべての設定を検証します。
次のコマンドを使用して、前の Azure Application Gateway のパブリック IP アドレスを取得します。
az network public-ip show \ --resource-group $RESOURCE_GROUP_NAME \ --name myAGPublicIPAddress \ --query '[ipAddress]' \ --output tsv
Web ブラウザーを開きます。
URL
http://<gateway-public-ip-address>/javaee-cafe/
の アプリケーションに移動します。 末尾のスラッシュを忘れないでください。coffees の追加と削除を試みます。
リソースをクリーンアップする
Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 Azure VM にデプロイされた Red Hat JBoss EAP クラスターが不要になったら、Red Hat JBoss EAP サーバーの登録を解除し、Azure リソースを削除します。
以下のコマンドを使用して、Red Hat サブスクリプション管理から Red Hat JBoss EAP サーバーと VM の登録を解除します。
# Unregister domain controller
az vm run-command invoke \
--resource-group $RESOURCE_GROUP_NAME \
--name adminVM \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
# Unregister host controllers
az vm run-command invoke \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM1 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
az vm run-command invoke \
--resource-group $RESOURCE_GROUP_NAME \
--name mspVM2 \
--command-id RunShellScript \
--scripts "sudo subscription-manager unregister"
次のコマンドを使用して、リソース グループ $RESOURCE_GROUP_NAME
を削除します。
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
次のステップ
Azure 上で JBoss EAP を実行するためのオプションについて引き続き調べます。