次の方法で共有


Azure Kubernetes Service (AKS) クラスターに WebLogic Server を使用する Java アプリケーションをデプロイする

この記事では、次の方法を示します。

  • Oracle WebLogic Server (WLS) で Java アプリケーションを実行する。
  • Azure Marketplace プランを使用して AKS で WebLogic Server クラスターを立ち上げる。
  • WebLogic Deploy Tooling (WDT) モデルを含むアプリケーション Docker イメージをビルドする。
  • Microsoft Azure SQL に接続して、コンテナー化されたアプリケーションを AKS 上の WebLogic Server クラスターにデプロイする。

この記事では、WebLogic Server 向けの Azure Marketplace プランを使用して、AKS への移行を加速させます。 このオファーでは、次のリソースを含む複数の Azure リソースが自動的にプロビジョニングされます。

  • Azure Container Registry インスタンス
  • AKS クラスター
  • Azure App Gateway イングレス コントローラー (AGIC) インスタンス
  • The WebLogic Kubernetes Operator
  • WebLogic ランタイムを含むコンテナー イメージ
  • アプリケーションのない WebLogic Server クラスター

次に、この記事では、WebLogic Server クラスターを更新するためのイメージのビルドについて説明します。 このイメージは、アプリケーション モデルと WDT モデルを提供します。

自動化をあまり使用しない手法で AKS に WebLogic をデプロイする場合は、Azure Kubernetes Service に関する Oracle の公式ドキュメントに記載されている手順を追った詳しいガイダンスを参照してください。

フィードバックの提供や、WebLogic Server on AKS ソリューションを開発しているエンジニアリング チームと共に密接に自身の移行シナリオに取り組むことに関心がある場合は、こちらの WebLogic の移行に関する短いアンケートに記入し、連絡先情報を含めてください。 プログラム マネージャー、アーキテクト、エンジニアのチームからすぐに連絡があり、緊密なコラボレーションが開始されます。

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
  • サインインしてこの記事を完了するために使用する Azure ID に、現在のサブスクリプションの所有者ロールか、現在のサブスクリプションの共同作成者ロールとユーザー アクセス管理者ロールがあることを確認します。 Azure ロールの概要については、「Azure ロールベースのアクセス制御 (Azure RBAC) とは」を参照してください。AKS 上の WLS で必要な特定のロールの詳細については、「Azure 組み込みロール」を参照してください。
  • Oracle シングル サインオン (SSO) アカウントの資格情報を持っている。 作成するには、Oracle アカウントの作成ページを参照してください。
  • WebLogic Server のライセンス条項に同意します。
    • Oracle Container Registry にアクセスしてサインインします。
    • サポート エンタイトルメントをお持ちの場合は、[ミドルウェア] を選択してから、weblogic_cpu を検索して選択します。
    • Oracle のサポート エンタイトルメントを持っていない場合は、[ミドルウェア] を選択してから、weblogic を検索して選択します。
    • 使用許諾契約書に同意します。

    Note

    運用環境に移行する前に、Oracle からサポート エンタイトルメントを取得してください。 これを行わないと、セキュリティ上のクリティカルな欠陥に対してパッチが適用されていない安全でないイメージを実行することになります。 Oracle のクリティカルなパッチ更新プログラムの詳細については、Oracle の 「Critical Patch Updates, Security Alerts and Bulletins」(クリティカル パッチ更新プログラム、セキュリティ アラートおよび掲示板) を参照してください。

  • Unix のようなオペレーティング システム (Ubuntu、Azure Linux、macOS、Linux 用 Windows サブシステムなど) がインストールされているローカル マシンを準備します。
    • Azure CLIaz --version を使用して、az が機能するかどうかをテストします。 このドキュメントは、バージョン 2.55.1 でテストされました。
    • kubectlkubectl version を使用して、kubectl が機能するかどうかをテストします。 このドキュメントは、バージョン v1.21.2 でテストされました。
    • A Java Development Kit (JDK)。 この記事では、Microsoft Build of OpenJDK 11 のインストール方法について説明しています。 コマンドを実行するシェルで JAVA_HOME 環境変数が正しく設定されていることを確認します。
    • Maven 3.5.0 以降。
    • zip/ファイル解凍ユーティリティがインストールされていることを確認します。 zip/unzip -v を使用して zip/unzip が正常に機能するかをテストします。

Azure SQL Database の作成

このセクションでは、マネージド ID 接続が有効な Microsoft Entra 認証を使用して Azure SQL Database を作成します。

リソース グループを作成する

az group create を使用して、リソース グループを作成します。 リソース グループはサブスクリプション内で一意である必要があるため、一意の名前を選択します。 一意の名前を付ける簡単な方法は、自分の名前のイニシャル、今日の日付、何らかの識別子を組み合わせて使用することです。 たとえば、abc1228rg のようにします。 この例では、 eastus の場所に abc1228rg という名前のリソース グループを作成します。

export RESOURCE_GROUP_NAME="abc1228rg"
az group create \
    --name ${RESOURCE_GROUP_NAME} \
    --location eastus

データベース サーバーとデータベースの作成

az sql server create コマンドを使用してサーバーを作成します。 この例では、管理者ユーザー azureuser と管理者パスワードを使用して、myazuresql20130213 という名前のサーバーを作成します。 <your-password> を、ご利用のパスワードに置き換えます。 詳しくは、「クイックスタート: 単一データベースを作成する - Azure SQL Database」をご覧ください。

Note

ここでユーザー名とパスワードを使用している場合でも、これらの資格情報はデータベースの外部には公開されません。 アプリケーション層とデータベース間の接続は、マネージド ID で保護されています。

export AZURESQL_SERVER_NAME="myazuresql20130213"
export AZURESQL_ADMIN_USER="azureuser"
export AZURESQL_ADMIN_PASSWORD="<your-password>"
export DATABASE_NAME="mysingledatabase20230213"
az sql server create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $AZURESQL_SERVER_NAME \
    --location westus \
    --admin-user $AZURESQL_ADMIN_USER \
    --admin-password $AZURESQL_ADMIN_PASSWORD

az sql db create コマンドでサーバーレス コンピューティング レベルにデータベースを作成します。

az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $AZURESQL_SERVER_NAME \
    --name $DATABASE_NAME \
    --sample-name AdventureWorksLT \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Microsoft Entra 管理者を構成する

Azure SQL Server がマネージド ID を使用する方法については、Microsoft Entra 認証を使用した接続に関するページをご覧ください。

Azure portal から Azure SQL Server への Microsoft Entra 管理者アカウントを構成するには、次の手順に従います。

  1. Azure portal で、Azure SQL Server インスタンス myazuresql20130213 を開きます。
  2. [設定] を選択し、[Microsoft Entra ID] を選択します。 Microsoft Entra ID ページで、[管理者の設定] を選択します。
  3. 管理者の追加ページで、ユーザーを検索し、管理者にするユーザーまたはグループを選択してから [選択] を選択します。
  4. Microsoft Entra ID ページの上部にある [保存] を選択します。 Microsoft Entra ユーザーとグループの場合は、管理者名の横にオブジェクト IDが表示されます。
  5. 管理者を変更する処理には数分かかる場合があります。 その後、新しい管理者が [Microsoft Entra ID] ボックスに表示されます。

ユーザー割り当てマネージド ID を作成する

次に、Azure CLI で az identity create コマンドを使って、サブスクリプションの ID を作成します。 このマネージド ID を使って、データベースに接続します。

az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name myManagedIdentity

マネージド ID のデータベース ユーザーの作成

ここでは、Microsoft Entra 管理者ユーザーとして Azure portal から Azure SQL データベースに接続し、マネージド ID のユーザーを作成します。

まず、次の手順に示すように、ポータルから Azure SQL Server にアクセスするためのファイアウォール規則を作成します。

  1. Azure portal で、Azure SQL Server インスタンス myazuresql20130213 を開きます。
  2. [セキュリティ] を選択し、[ネットワーク] を選択します。
  3. [ファイアウォール規則][クライアント IPV4 IP アドレスの追加] を選択します。
  4. [例外] で、[Azure サービスおよびリソースにこのサーバーへのアクセスを許可する] をオンにします。
  5. [保存] を選択します。

ファイアウォール規則が作成されると、ポータルから Azure SQL Server にアクセスできます。 次の手順に従って、データベース ユーザーを作成します。

  1. [設定] を選択し、[SQL データベース] を選択します。 [mysingledatabase20230213] を選択します。

  2. [クエリ エディター] を選択します。 SQL Database クエリ エディター へようこそページの [Active Directory 認証] で、Logged in as user@contoso.com のようなメッセージを見つけます。

  3. [user@contoso.com として続行] を選択します。ここで、user は AD 管理者アカウント名です。

  4. サインインしたら、[クエリ 1] エディターで以下のコマンドを実行して、マネージド ID myManagedIdentity 用のデータベース ユーザーを作成します。

    CREATE USER "myManagedIdentity" FROM EXTERNAL PROVIDER
    ALTER ROLE db_datareader ADD MEMBER "myManagedIdentity";
    ALTER ROLE db_datawriter ADD MEMBER "myManagedIdentity";
    ALTER ROLE db_ddladmin ADD MEMBER "myManagedIdentity";
    GO
    
  5. [クエリ 1] エディターで、[実行] を選択して SQL コマンドを実行します。

  6. コマンドが正常に完了すると、Query succeeded: Affected rows: 0 というメッセージが表示されます。

以下のコマンドを使用して、次のセクションで使用する接続文字列を取得します。

export CONNECTION_STRING="jdbc:sqlserver://${AZURESQL_SERVER_NAME}.database.windows.net:1433;database=${DATABASE_NAME};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
echo ${CONNECTION_STRING}

サンプル アプリケーションのスキーマを作成する

[新しいクエリ] を選択し、クエリ エディターで次のクエリを実行します。

CREATE TABLE COFFEE (ID NUMERIC(19) NOT NULL, NAME VARCHAR(255) NULL, PRICE FLOAT(32) NULL, PRIMARY KEY (ID));
CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT NUMERIC(28) NULL, PRIMARY KEY (SEQ_NAME));
INSERT INTO SEQUENCE VALUES ('SEQ_GEN',0);

正常に実行されると、"クエリが成功しました: 影響を受ける行: 1" というメッセージが表示されます。 このメッセージが表示されない場合は、先に進む前に問題のトラブルシューティングと解決を行ってください。

AKS プランへの WLS のデプロイに進むことができます。

WebLogic Server on AKS をデプロイする

次の手順に従って、WebLogic Server on AKS プランを見つけて、[基本] ペインに入力します。

  1. Azure portal の上部にある検索バーに「weblogic」と入力します。 自動提案された検索結果の [Marketplace] セクションにある [WebLogic Server on AKS] を選びます。

    検索結果内の WebLogic Server を示す Azure portal のスクリーンショット。

    WebLogic Server on AKS に直接アクセスすることもできます。

  2. オファー ページで、[作成] を選択します。

  3. [基本] ペインで、[サブスクリプション] フィールドに表示される値が Azure へのサインインに使用したものと同じであることを確認します。 サブスクリプションについて、前提条件セクションに記載されているロールを持っていることを確認します。

    AKS 上の WebLogic Server を示す Azure portal のスクリーンショット。

  4. このオファーを空のリソース グループにデプロイする必要があります。 [リソース グループ] フィールドで、[新規作成] を選択し、リソース グループの値を入力します。 リソース グループはサブスクリプション内で一意である必要があるため、一意の名前を選択します。 一意の名前を付ける簡単な方法は、自分の名前のイニシャル、今日の日付、何らかの識別子を組み合わせて使用することです (ejb0723wls など)。

  5. [インスタンスの詳細] で、デプロイのリージョンを選択します。 AKS が利用可能な Azure リージョンの一覧については、AKS リージョンの可用性に関するページを参照してください。

  6. [WebLogic の資格情報][WebLogic 管理者のユーザー名] は、既定値のままにします。

  7. [WebLogic 管理者のパスワード] には「wlsAksCluster2022」を入力します。 同じ値を、確認フィールドと [WebLogic モデルの暗号化のパスワード] フィールドに使用します。

  8. [次へ] を選択します。

次の手順に従って、デプロイ プロセスを開始します。

  1. [Provide an Oracle Single Sign-On (SSO) account](Oracle シングル サインオン (SSO) アカウントの指定) というラベルが付いたセクションまでスクロールします。 前提条件から Oracle SSO 資格情報を入力します。

    構成された SSO ペインを示す Azure portal のスクリーンショット。

  2. 情報ボックスの "先に進む前に、Oracle 標準の使用条件と制限に同意する必要があります" から始まる手順に従います。

  3. Oracle SSO アカウントに Oracle サポート資格があるかどうかに応じて、[WebLogic Server イメージの種類の選択] で適切なオプションを選択します。 アカウントにサポート資格がある場合は、[パッチ適用済みの WebLogic Server イメージ] を選択します。 それ以外の場合は、[一般的な WebLogic Server イメージ] を選択します。

  4. [WebLogic Server の目的の組み合わせを選択...] の値は既定値のままにします。 WebLogic Server、JDK、OS のバージョンには幅広い選択肢があります。

  5. [アプリケーション] セクションの [アプリケーションをデプロイしますか?] の横にある [いいえ] を選択します。

次の手順では、WebLogic Server 管理コンソールとサンプル アプリが組み込みの Application Gateway イングレス アドオンを使用してパブリック インターネットに公開されるようにします。 詳細については、「Application Gateway イングレス コントローラーとは」をご覧ください。

  1. [次へ] を選択して、[TLS/SSL]ペインを選択します。

  2. [次へ] を選択すると、[負荷分散] ペインが表示されます。

  3. [負荷分散のオプション] の横にある [Application Gateway イングレス コントローラー] を選択します。

    [Oracle WebLogic Server on Azure Kubernetes Service の作成] ページ上の最も単純なロード バランサー構成を示す Azure portal のスクリーンショット。

  4. [Application Gateway イングレス コントローラー] で、すべてのフィールドが事前に設定され、[仮想ネットワーク][サブネット] には既定値が設定されているのが表示されます。 既定値のままにします。

  5. [管理コンソールのイングレスを作成する] には [はい] を選択します。

    [Oracle WebLogic Server on Azure Kubernetes Service の作成] ページ上の Application Gateway イングレス コントローラーの構成を示す Azure portal のスクリーンショット。

  6. [次へ] を選択して、[DNS] ペインを表示します。

  7. [次へ] を選択して、[データベース] ペインを表示します。

マネージド ID を使用してデータベース接続を構成するには、次の手順に従います。

  1. [データベースに接続しますか?][はい] を選択します。
  2. [接続設定][データベースの種類の選択] でドロップダウン メニューを開き、[Microsoft SQL Server (パスワードレス接続をサポート)] を選択します。
  3. [JNDI 名] には、jdbc/WebLogicCafeDB と入力します。
  4. [DataSource 接続文字列] に、前回のセクションで取得した接続文字列を入力します。
  5. [パスワードレス データソース接続を使用する] を選択します。
  6. [ユーザーが割り当てたマネージド ID] で、前の手順で作成したマネージド ID を選択します。 この例では、その名前は myManagedIdentity です。
  7. [追加] を選択します。

[接続設定] セクションは、次のスクリーンショットのようになります。

Azure Kubernetes Service 上に Oracle WebLogic Server を作成するページの [データベース] タブを示す Azure portal のスクリーンショット。

次の手順に従って、デプロイを完了します。

  1. [Review + create](レビュー + 作成) を選択します。 検証が失敗しないことを確認します。 失敗した場合は、検証の問題を修正してから、[確認および作成] をもう一度選択します。
  2. [作成] を選択します
  3. [デプロイが進行中です] ページで、デプロイの進行状況を追跡します。

選択したリージョンのネットワーク条件やその他のアクティビティによっては、デプロイが完了するまでに最大 50 分かかる場合があります。

Note

組織がパブリック IP を許可しない企業の仮想ネットワーク内にワークロードをデプロイする必要がある場合は、内部 Load Balancer サービスを選択できます。 内部 Load Balancer サービスを構成するには、[負荷分散] タブで次の手順を使用します。

  1. [負荷分散オプション] の横にある [Standard Load Balancer サービス] を選択します。

  2. [内部 Load Balancer を使用] を選択します。

  3. テーブルに次の行を追加します:

    サービス名プレフィックス 移行先 Port
    wls-admin-internal admin-server 7001
    wls-cluster-internal cluster-1 8001

[負荷分散] タブは、次のスクリーンショットのようになります。

Azure Kubernetes Service 上に Oracle WebLogic Server を作成するページの [負荷分散] タブを示す Azure portal のスクリーンショット。

デプロイ後、出力から adminConsoleExternalUrlclusterExternalUrl というラベルの付いた管理サーバーとクラスターのアクセス URL 見つけることができます。

デプロイの出力を調べる

このセクションの手順を使用して、デプロイが正常に完了したことを確認します。

[デプロイが進行中です] ページから移動した場合は、次の手順でそのページに戻る方法について説明します。 "デプロイが完了しました" と表示されたページのままの場合は、次のスクリーンショットの後の手順 5 にスキップできます。

  1. Azure portal ページの隅にあるハンバーガー メニューを選択し、[リソース グループ] を選択します。

  2. [任意のフィールドのフィルター] というテキストが表示されているボックスに、前に作成したリソース グループの最初の数文字を入力します。 推奨される方法に従った場合は、名前のイニシャルを入力してから、適切なリソース グループを選択します。

  3. ナビゲーション ウィンドウの [設定] セクションで、[デプロイ] を選択します。 このリソース グループへのデプロイの順序指定済みリストが表示され、最新のデプロイが最初に表示されます。

  4. このリストの一番古いエントリまでスクロールします。 このエントリは、前のセクションで開始したデプロイに対応します。 次のスクリーンショットに示すように、一番古いデプロイを選択します。

    リソース グループのデプロイ一覧を示す Azure portal のスクリーンショット。

  5. ナビゲーション ウィンドウで、[出力] を選択します。 このリストには、そのデプロイの出力値が表示されます。 出力には有用な情報が含まれています。

  6. adminConsoleExternalUrl 値は、この AKS クラスターの WebLogic Server 管理コンソールへの完全修飾パブリック インターネット表示リンクです。 このフィールド値の横にあるコピー アイコンを選択して、クリップボードにリンクをコピーします。 この値は、後で使用するために保存しておきます。

  7. clusterExternalUrl 値は、この AKS クラスター上の WebLogic Server にデプロイされたサンプル アプリへの完全修飾パブリック インターネット表示リンクです。 このフィールド値の横にあるコピー アイコンを選択して、クリップボードにリンクをコピーします。 この値は、後で使用するために保存しておきます。

  8. shellCmdtoOutputWlsImageModelYaml 値は、コンテナー イメージのビルドに使用される WDT モデルの base64 文字列です。 この値は、後で使用するために保存しておきます。

  9. shellCmdtoOutputWlsImageProperties 値は、コンテナー イメージのビルドに使用される WDT モデル プロパティの base64 文字列です。 この値は、後で使用するために保存しておきます。

  10. shellCmdtoConnectAks 値は、この特定の AKS クラスターに接続するための Azure CLI コマンドです。

出力に含まれるその他の値についてはこの記事の対象外ですが、AKS 上の WebLogic に関するユーザー ガイドで詳しく説明されています。

サンプル アプリケーションを構成してデプロイする

このプランでは、イメージ内のモデルを使用して WebLogic Server クラスターをプロビジョニングします。 現在、WebLogic Server クラスターにはアプリケーションがデプロイされていません。

このセクションでは、補助イメージを使用してサンプル アプリケーションをデプロイすることで、WebLogic Server クラスターを更新します。

アプリケーションをチェックアウトする

このセクションでは、このガイドのサンプル コードをクローンします。 サンプルは、GitHub の javaee/weblogic-cafe/ フォルダーにある weblogic-on-azure リポジトリにあります。 アプリケーションのファイル構造を次に示します。

weblogic-cafe
├── pom.xml
└── src
    └── main
        ├── java
        │   └── cafe
        │       ├── model
        │       │   ├── CafeRepository.java
        │       │   └── entity
        │       │       └── Coffee.java
        │       └── web
        │           ├── rest
        │           │   └── CafeResource.java
        │           └── view
        │               └── Cafe.java
        ├── resources
        │   ├── META-INF
        │   │   └── persistence.xml
        │   └── cafe
        │       └── web
        │           ├── messages.properties
        │           └── messages_es.properties
        └── webapp
            ├── WEB-INF
            │   ├── beans.xml
            │   ├── faces-config.xml
            │   └── web.xml
            ├── index.xhtml
            └── resources
                └── components
                    └── inputPrice.xhtml

次のコマンドを使用して、リポジトリをクローンします。

# cd <parent-directory-to-check-out-sample-code>
export BASE_DIR=$PWD

git clone --single-branch https://github.com/microsoft/weblogic-on-azure.git --branch 20240201 $BASE_DIR/weblogic-on-azure

HEAD がデタッチされた状態であることを示すメッセージが表示された場合、このメッセージは無視しても問題ありません。 これは、タグをチェックアウトしたという意味です。

次のコマンドを使用して、javaee/weblogic-cafe/ をビルドします。

mvn clean package --file $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/pom.xml

パッケージは正常に生成され、$BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war にあります。 パッケージが表示されない場合は、続行する前に問題のトラブルシューティングと解決を行う必要があります。

Azure Container Registry を使用して補助イメージを作成する

このセクションの手順では、補助イメージをビルドする方法について説明します。 このイメージには、次のコンポーネントが含まれます。

  • "イメージ内のモデル" モデル ファイル
  • アプリケーション
  • Java Database Connectivity (JDBC) ドライバー アーカイブ ファイル
  • WebLogic Deploy Tooling のインストール

補助イメージは、アプリと構成を含む Docker コンテナー イメージです。 WebLogic Kubernetes Operator は、補助イメージを、WebLogic Server、JDK、オペレーティング システムを含む AKS クラスター内の domain.spec.image と結合させます。 補助イメージの詳細については、Oracle ドキュメントの「補助イメージ」をご覧ください。

このセクションでは、Azure CLI と kubectl がインストールされた Linux ターミナルが必要です。

次の手順に従って、イメージをビルドします。

  1. 次のコマンドを使用して、モデルとアプリケーションをステージングするディレクトリを作成します。

    mkdir -p ${BASE_DIR}/mystaging/models
    cd ${BASE_DIR}/mystaging/models
    
  2. デプロイ出力から保存した shellCmdtoOutputWlsImageModelYaml 値をコピーして Bash ウィンドウに貼り付け、コマンドを実行します。 コマンドは次の例のようになります。

    echo -e IyBDb3B5cmlna...Cgo= | base64 -d > model.yaml
    

    このコマンドにより、次の例のような内容の ${BASE_DIR}/mystaging/models/model.yaml ファイルが生成されます。

    # Copyright (c) 2020, 2021, Oracle and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    
    # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.yaml
    # in https://github.com/oracle/weblogic-kubernetes-operator.
    
    domainInfo:
      AdminUserName: "@@SECRET:__weblogic-credentials__:username@@"
      AdminPassword: "@@SECRET:__weblogic-credentials__:password@@"
      ServerStartMode: "prod"
    
    topology:
      Name: "@@ENV:CUSTOM_DOMAIN_NAME@@"
      ProductionModeEnabled: true
      AdminServerName: "admin-server"
      Cluster:
        "cluster-1":
          DynamicServers:
            ServerTemplate: "cluster-1-template"
            ServerNamePrefix: "@@ENV:MANAGED_SERVER_PREFIX@@"
            DynamicClusterSize: "@@PROP:CLUSTER_SIZE@@"
            MaxDynamicClusterSize: "@@PROP:CLUSTER_SIZE@@"
            MinDynamicClusterSize: "0"
            CalculatedListenPorts: false
      Server:
        "admin-server":
          ListenPort: 7001
      ServerTemplate:
        "cluster-1-template":
          Cluster: "cluster-1"
          ListenPort: 8001
      SecurityConfiguration:
        NodeManagerUsername: "@@SECRET:__weblogic-credentials__:username@@"
        NodeManagerPasswordEncrypted: "@@SECRET:__weblogic-credentials__:password@@"
    
    resources:
      SelfTuning:
        MinThreadsConstraint:
          SampleMinThreads:
            Target: "cluster-1"
            Count: 1
        MaxThreadsConstraint:
          SampleMaxThreads:
            Target: "cluster-1"
            Count: 10
        WorkManager:
          SampleWM:
            Target: "cluster-1"
            MinThreadsConstraint: "SampleMinThreads"
            MaxThreadsConstraint: "SampleMaxThreads"
    
  3. 同様に、shellCmdtoOutputWlsImageProperties 値をコピーして Bash ウィンドウに貼り付け、コマンドを実行します。 コマンドは次の例のようになります。

    echo -e IyBDb3B5cml...pFPTUK | base64 -d > model.properties
    

    このコマンドにより、次の例のような内容の ${BASE_DIR}/mystaging/models/model.properties ファイルが生成されます。

    # Copyright (c) 2021, Oracle Corporation and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    
    # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.properties
    # in https://github.com/oracle/weblogic-kubernetes-operator.
    
    CLUSTER_SIZE=5
    
  4. 次の手順に従って、アプリケーション モデルを作成します。

    1. 次のコマンドを使用して weblogic-cafe.war をコピーし、wlsdeploy/applications に保存します。

      mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/applications
      cp $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war ${BASE_DIR}/mystaging/models/wlsdeploy/applications/weblogic-cafe.war
      
    2. 次のコマンドを使用して、示されている内容を含むアプリケーション モデルを作成します。 モデル ファイルを ${BASE_DIR}/mystaging/models/appmodel.yaml に保存します。

      cat <<EOF >appmodel.yaml
      appDeployments:
        Application:
          weblogic-cafe:
            SourcePath: 'wlsdeploy/applications/weblogic-cafe.war'
            ModuleType: ear
            Target: 'cluster-1'
      EOF
      
  5. 次の手順に従って、データソース接続を構成します。

    1. 次の手順に従って、Azure マネージド ID を使用してデータベース接続を有効にする Microsoft SQL Server JDBC ドライバーと Azure Identity Extension をダウンロードしてインストールします。

      1. 次のコマンドを使用して、Microsoft SQL Server JDBC ドライバーを wlsdeploy/externalJDBCLibraries にダウンロードし、インストールします。

        export DRIVER_VERSION="10.2.1.jre8"
        export MSSQL_DRIVER_URL="https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/${DRIVER_VERSION}/mssql-jdbc-${DRIVER_VERSION}.jar"
        
        mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries
        curl -m 120 -fL ${MSSQL_DRIVER_URL} -o ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries/mssql-jdbc-${DRIVER_VERSION}.jar
        
      2. 次のコマンドを使用して、Azure ID 拡張機能を wlsdeploy/classpathLibraries にインストールします。

        curl -LO https://github.com/oracle/weblogic-azure/raw/refs/heads/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml
        
        mvn dependency:copy-dependencies -f azure-identity-extensions.xml
        
        mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/azureLibraries
        mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson
        # fix JARs conflict issue in GA images, put jackson libraries to PRE_CLASSPATH to upgrade the existing libs.
        mv target/dependency/jackson-annotations-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        mv target/dependency/jackson-core-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        mv target/dependency/jackson-databind-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        mv target/dependency/jackson-dataformat-xml-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        # Thoes jars will be appended to CLASSPATH
        mv target/dependency/*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/azureLibraries/
        
      3. リソースをクリーンアップするには、次のコマンドを使用します。

        rm target -f -r
        rm azure-identity-extensions.xml
        
    2. AKS クラスターに接続します。これを行うには、前に保存した shellCmdtoConnectAks 値をコピーして Bash ウィンドウに貼り付け、コマンドを実行します。 コマンドは次の例のようになります。

      az account set --subscription <subscription>;
      az aks get-credentials \
          --resource-group <resource-group> \
          --name <name>
      

      次の例のような出力が表示されます。 この出力が表示されない場合は、続行する前にトラブルシューティングを行って問題を解決してください。

      Merged "<name>" as current context in /Users/<username>/.kube/config
      
    3. データベース接続モデルをエクスポートし、${BASE_DIR}/mystaging/models/dbmodel.yaml に保存します。 次の手順では、ConfigMap sample-domain1-wdt-config-map からデータベース構成モデルを抽出します。 名前は形式 <domain-uid>-wdt-config-map に従います。プランのデプロイ中に <domain-uid> が設定されます。 既定値を変更した場合は、独自のドメイン UID に置き換えてください。

      1. データ キーは <db-secret-name>.yaml です。 次のコマンドを使用して、データベース シークレット名を取得します。

        export WLS_DOMAIN_UID=sample-domain1
        export WLS_DOMAIN_NS=${WLS_DOMAIN_UID}-ns
        export DB_K8S_SECRET_NAME=$(kubectl get secret -n ${WLS_DOMAIN_NS} | grep "ds-secret" | awk '{print $1}')
        
      2. 次に、このコマンドを使用してデータベース モデルを抽出します。

        kubectl get configmap sample-domain1-wdt-config-map -n ${WLS_DOMAIN_NS} -o=jsonpath="{['data']['${DB_K8S_SECRET_NAME}\.yaml']}" >${BASE_DIR}/mystaging/models/dbmodel.yaml
        
      3. 最後に、次のコマンドを使用して、dbmodel.yaml の内容を確認します。

        cat ${BASE_DIR}/mystaging/models/dbmodel.yaml
        

        このコマンドの出力は、次のような構造になります。

        # Copyright (c) 2020, 2021, Oracle and/or its affiliates.
        # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
        
        resources:
          JDBCSystemResource:
            jdbc/WebLogicCafeDB:
              Target: 'cluster-1'
              JdbcResource:
              JDBCDataSourceParams:
                 JNDIName: [
                    jdbc/WebLogicCafeDB
                 ]
                 GlobalTransactionsProtocol: OnePhaseCommit
              JDBCDriverParams:
                 DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver
                 URL: '@@SECRET:ds-secret-sqlserver-1727147748:url@@'
                 PasswordEncrypted: '@@SECRET:ds-secret-sqlserver-1727147748:password@@'
                 Properties:
                    user:
                    Value: '@@SECRET:ds-secret-sqlserver-1727147748:user@@'
              JDBCConnectionPoolParams:
                    TestTableName: SQL SELECT 1
                    TestConnectionsOnReserve: true
        
  6. 次のコマンドを使用して、アーカイブ ファイルを作成し、その後、不要になった wlsdeploy フォルダーを削除します。

    cd ${BASE_DIR}/mystaging/models
    zip -r archive.zip wlsdeploy
    
    rm -f -r wlsdeploy
    
  7. 次のコマンドを使用して、ステージング ディレクトリに WebLogic Deploy Tooling (WDT) をダウンロードしてインストールし、UNIX 環境で使用されていない weblogic-deploy/bin/*.cmd ファイルを削除します。

    cd ${BASE_DIR}/mystaging
    curl -m 120 -fL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip -o weblogic-deploy.zip
    
    unzip weblogic-deploy.zip -d .
    rm ./weblogic-deploy/bin/*.cmd
    
  8. WDT インストーラーをクリーンアップするには、次のコマンドを使用します。

    rm weblogic-deploy.zip
    
  9. Docker ファイルを作成するには、次のコマンドを使用します。

    cd ${BASE_DIR}/mystaging
    cat <<EOF >Dockerfile
    FROM busybox
    ARG AUXILIARY_IMAGE_PATH=/auxiliary
    ARG USER=oracle
    ARG USERID=1000
    ARG GROUP=root
    ENV AUXILIARY_IMAGE_PATH=\${AUXILIARY_IMAGE_PATH}
    RUN adduser -D -u \${USERID} -G \$GROUP \$USER
    COPY --chown=\$USER:\$GROUP ./ \${AUXILIARY_IMAGE_PATH}/
    USER \$USER
    EOF
    
  10. 次の例に示すように、${BASE_DIR}/mystaging/Dockerfile を使用して az acr build コマンドを実行します。

    export ACR_NAME=<value-from-clipboard>
    export IMAGE="wlsaks-auxiliary-image:1.0"
    
  11. ステージング ファイルを再確認するには、次のコマンドを使用します。

    cd ${BASE_DIR}/mystaging
    find -maxdepth 2 -type f -print
    

    これらのコマンドは、次の例のような出力を生成します。

    ./models/model.properties
    ./models/model.yaml
    ./models/appmodel.yaml
    ./models/dbmodel.yaml
    ./models/archive.zip
    ./Dockerfile
    ./weblogic-deploy/VERSION.txt
    ./weblogic-deploy/LICENSE.txt
    
  12. 次の例に示すように、az acr build を使用してイメージをビルドします。

    az acr build -t ${IMAGE} --build-arg AUXILIARY_IMAGE_PATH=/auxiliary -r ${ACR_NAME} --platform linux/amd64 .
    

    イメージを正常にビルドすると、出力は次の例のようになります。

    ...
    Step 1/9 : FROM busybox
    latest: Pulling from library/busybox
    Digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7
    Status: Image is up to date for busybox:latest
    ---> 65ad0d468eb1
    Step 2/9 : ARG AUXILIARY_IMAGE_PATH=/auxiliary
    ---> Running in 1f8f4e82ccb6
    Removing intermediate container 1f8f4e82ccb6
    ---> 947fde618be9
    Step 3/9 : ARG USER=oracle
    ---> Running in dda021591e41
    Removing intermediate container dda021591e41
    ---> f43d84be4517
    Step 4/9 : ARG USERID=1000
    ---> Running in cac4df6dfd13
    Removing intermediate container cac4df6dfd13
    ---> e5513f426c74
    Step 5/9 : ARG GROUP=root
    ---> Running in 8fec1763270c
    Removing intermediate container 8fec1763270c
    ---> 9ef233dbe279
    Step 6/9 : ENV AUXILIARY_IMAGE_PATH=${AUXILIARY_IMAGE_PATH}
    ---> Running in b7754f58157a
    Removing intermediate container b7754f58157a
    ---> 4a26a97eb572
    Step 7/9 : RUN adduser -D -u ${USERID} -G $GROUP $USER
    ---> Running in b6c1f1a81af1
    Removing intermediate container b6c1f1a81af1
    ---> 97d3e5ad7540
    Step 8/9 : COPY --chown=$USER:$GROUP ./ ${AUXILIARY_IMAGE_PATH}/
    ---> 21088171876f
    Step 9/9 : USER $USER
    ---> Running in 825e0abc9f6a
    Removing intermediate container 825e0abc9f6a
    ---> b81d6430fcda
    Successfully built b81d6430fcda
    Successfully tagged wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0
    2024/08/28 03:06:19 Successfully executed container: build
    2024/08/28 03:06:19 Executing step ID: push. Timeout(sec): 3600, Working directory: '', Network: ''
    2024/08/28 03:06:19 Pushing image: wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0, attempt 1
    The push refers to repository [wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image]
    ee589b3cda86: Preparing
    c1fd1adab3b9: Preparing
    d51af96cf93e: Preparing
    c1fd1adab3b9: Pushed
    d51af96cf93e: Pushed
    ee589b3cda86: Pushed
    1.0: digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac size: 946
    2024/08/28 03:06:21 Successfully pushed image: wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0
    2024/08/28 03:06:21 Step ID: build marked as successful (elapsed time in seconds: 8.780235)
    2024/08/28 03:06:21 Populating digests for step ID: build...
    2024/08/28 03:06:22 Successfully populated digests for step ID: build
    2024/08/28 03:06:22 Step ID: push marked as successful (elapsed time in seconds: 1.980158)
    2024/08/28 03:06:22 The following dependencies were found:
    2024/08/28 03:06:22
    - image:
       registry: wlsaksacru6jyly7kztoqu.azurecr.io
       repository: wlsaks-auxiliary-image
       tag: "1.0"
       digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac
    runtime-dependency:
       registry: registry.hub.docker.com
       repository: library/busybox
       tag: latest
       digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7
    git: {}
    
    Run ID: ca1 was successful after 14s
    

    ビルドが成功すると、イメージが ACR にプッシュされます。

  13. 次の例に示すように、az acr repository show を実行して、イメージがリモート リポジトリに正常にプッシュされたかどうかをテストできます。

    az acr repository show --name ${ACR_NAME} --image ${IMAGE}
    

    このコマンドで、次の例のような出力が生成されるはずです。

    {
       "changeableAttributes": {
          "deleteEnabled": true,
          "listEnabled": true,
          "readEnabled": true,
          "writeEnabled": true
       },
       "createdTime": "2024-01-24T06:14:19.4546321Z",
       "digest": "sha256:a1befbefd0181a06c6fe00848e76f1743c1fecba2b42a975e9504ba2aaae51ea",
       "lastUpdateTime": "2024-01-24T06:14:19.4546321Z",
       "name": "1.0",
       "quarantineState": "Passed",
       "signed": false
    }
    

補助イメージを適用する

前の手順では、モデルと WDT を含む補助イメージを作成しました。 次の手順で、補助イメージを WebLogic Server クラスターに適用します。

  1. kubectl patch コマンドを使用してドメイン カスタム リソース定義 (CRD) にパッチを適用して、補助イメージを適用します。

    補助イメージは、次の例に示すように、spec.configuration.model.auxiliaryImages で定義されます。

    spec:
      clusters:
      - name: sample-domain1-cluster-1
      configuration:
        model:
          auxiliaryImages:
          - image: wlsaksacrafvzeyyswhxek.azurecr.io/wlsaks-auxiliary-image:1.0
            imagePullPolicy: IfNotPresent
            sourceModelHome: /auxiliary/models
            sourceWDTInstallHome: /auxiliary/weblogic-deploy
    

    次のコマンドを使用して、restartVersion 値を増やし、kubectl patch を使用します。これにより、次の定義を使用して、補助イメージをドメイン CRD に適用します。

    export VERSION=$(kubectl -n ${WLS_DOMAIN_NS} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"")
    export VERSION=$((VERSION+1))
    
    export ACR_LOGIN_SERVER=$(az acr show --name ${ACR_NAME} --query "loginServer" --output tsv)
    
    cat <<EOF >patch-file.json
    [
      {
        "op": "replace",
        "path": "/spec/restartVersion",
        "value": "${VERSION}"
      },
      {
        "op": "add",
        "path": "/spec/configuration/model/auxiliaryImages",
        "value": [{"image": "$ACR_LOGIN_SERVER/$IMAGE", "imagePullPolicy": "IfNotPresent", "sourceModelHome": "/auxiliary/models", "sourceWDTInstallHome": "/auxiliary/weblogic-deploy"}]
      },
      {
       "op": "remove",
       "path": "/spec/configuration/model/configMap"
      }
    ]
    EOF
    
    kubectl -n ${WLS_DOMAIN_NS} patch domain ${WLS_DOMAIN_UID} \
        --type=json \
        --patch-file patch-file.json
    
  2. 補助イメージでデータベース接続が構成されているため、次のコマンドを実行して ConfigMap を削除します。

    kubectl delete configmap sample-domain1-wdt-config-map -n ${WLS_DOMAIN_NS}
    

続行する前に、次のコマンドが管理サーバーとマネージド サーバーに対して次の出力を生成するまで待ちます。

kubectl get pod -n ${WLS_DOMAIN_NS} -w
NAME                             READY   STATUS    RESTARTS   AGE
sample-domain1-admin-server      1/1     Running   0          20m
sample-domain1-managed-server1   1/1     Running   0          19m
sample-domain1-managed-server2   1/1     Running   0          18m

システムがこの状態になるまでに 5 - 10 分かかる場合があります。 次の一覧は、待機中に実行される内容の概要を示しています。

  • まず、sample-domain1-introspector が実行されていることが表示されます。 このソフトウェアは、Kubernetes クラスターで必要なアクションを実行できるように、ドメイン カスタム リソースへの変更を検索します。
  • 変更が検出されると、ドメイン イントロスペクターが強制終了し、新しいポッドを開始して変更をロールアウトします。
  • 次に、sample-domain1-admin-server ポッドが終了して再起動することがわかります。
  • その後、2 つのマネージド サーバーが終了して再起動することがわかります。
  • 3 つのポッドすべてが 1/1 Running 状態を示す場合にのみ、続行しても問題ありません。

デプロイの機能を確認する

次の手順に従って WebLogic Server 管理コンソールとサンプル アプリを表示し、デプロイの機能を確認します。

  1. インターネットに接続された Web ブラウザーのアドレス バーに adminConsoleExternalUrl の値を貼り付けます。 見慣れた WebLogic Server 管理コンソールのサインイン画面が表示されるはずです。

  2. Azure portal から WebLogic Server をデプロイするときに入力したユーザー名 weblogic とパスワードを使用してサインインします。 この値が wlsAksCluster2022 であることにご注意ください。

  3. [ドメインの構造] ボックスで、[サービス] を選択します。

  4. [サービス] で、[データ ソース] を選択します。

  5. [JDBC データ ソースの概要] パネルで、[監視] を選択します。 画面は次の例のようになります。 データ ソースの状態がマネージド サーバーで実行中となっていることがわかります。

    データ ソースの状態のスクリーンショット。

  6. [ドメインの構造] ボックスで、[デプロイ] を選択します。

  7. [デプロイ] テーブルには、1 つの行が表示されるはずです。 名前は、appmodel.yaml ファイル内の Application 値と同じ値であるはずです。 名前を選択します。

  8. [テスト] タブを選択します。

  9. [weblogic-cafe] を選択します。

  10. [weblogic-cafe の設定] パネルで、[テスト] タブを選択します。

  11. [weblogic-cafe] の隣にある + アイコンを展開します。 画面は次の例のようになります。 特に、[テスト ポイント] 列に、http://sample-domain1-managed-server1:8001/weblogic-cafe/index.xhtml に似た値が表示されます。

    weblogic-cafe のテスト ポイントのスクリーンショット。

    Note

    [テスト ポイント] 列のハイパーリンクは、実行されている外部 URL で管理コンソールを構成していないため、選択できません。 この記事では、単にデモンストレーションとして WebLogic Server 管理コンソールを表示しています。 WebLogic Server on AKS を実行している場合、永続的な構成の変更には WebLogic Server 管理コンソールを使用しないでください。 WebLogic Server on AKS のクラウドネイティブ設計では、Oracle のドキュメントで説明されているように、永続的な構成は、最初の Docker イメージで表すか、モデルの更新などの CI/CD 手法を使用して実行中の AKS クラスターに適用する必要があります。

  12. デプロイしたサンプル アプリの context-path 値を確認します。 推奨されているサンプル アプリをデプロイした場合、context-pathweblogic-cafe になります。

  13. context-pathclusterExternalUrl 値に追加して、サンプル アプリの完全修飾 URL を作成します。 推奨されているサンプル アプリをデプロイした場合、完全修飾 URL は http://wlsgw202401-wls-aks-domain1.eastus.cloudapp.azure.com/weblogic-cafe/ のようになります。

  14. この完全修飾 URL を、インターネットに接続された Web ブラウザーに貼り付けます。 推奨されているサンプル アプリをデプロイした場合、次のスクリーンショットのような結果が表示されます。

    Web アプリのテストのスクリーンショット。

リソースをクリーンアップする

Azure の課金を回避するには、不要なリソースをクリーンアップする必要があります。 クラスターが不要になったら、az group delete コマンドを使用します。 次のコマンドを実行すると、リソース グループ、コンテナー サービス、コンテナー レジストリ、データベース、関連するすべてのリソースが削除されます。

az group delete --name <resource-group-name> --yes --no-wait
az group delete --name <db-resource-group-name> --yes --no-wait

次のステップ

WebLogic Server on AKS または Virtual Machines を実行する方法の詳細については、次のリンクを参照してください。

Azure Marketplace の Oracle WebLogic プランの詳細については、Oracle WebLogic Server on Azure に関するページを参照してください。 これらのプランはすべて "ライセンス持ち込み" です。 また、Oracle で既に適切なライセンスを取得していること、かつ Azure でプランを実行できる適切なライセンスをお持ちであることを前提としています。