次の方法で共有


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

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

  • Java、Java EE、Jakarta EE を Oracle WebLogic Server (WLS) で実行する。
  • Azure Marketplace プランを使用して 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) インスタンス
  • WebLogic 演算子
  • WebLogic ランタイムを含むコンテナー イメージ
  • アプリケーションのない WebLogic Server クラスター

この記事の次の部分では、既存の WebLogic Server クラスターを更新するための補助イメージのビルドを段階的に紹介します。 補助イメージは、アプリケーション モデルと WDT モデルを提供します。

完全に自動化するには、オファーのデプロイ前にアプリケーションを選択し、Azure portal からデータソース接続を構成できます。 オファーを表示するには、Azure portal にアクセスします。

Azure Kubernetes Serviceでの WebLogic Server の設定に関するステップ バイ ステップ ガイダンスについては、Azure Kubernetes Serviceの Oracle の公式ドキュメントを参照してください。

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

前提条件

  • Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
  • サインインしてこの記事を完了するために使用する Azure ID に、現在のサブスクリプションの所有者ロールか、現在のサブスクリプションの共同作成者ロールとユーザー アクセス管理者ロールがあることを確認します。 Azure ロールの概要については、「Azure ロールベースのアクセス制御 (Azure RBAC) とは」を参照してください。AKS 上の WLS で必要な特定のロールの詳細については、「Azure 組み込みロール」を参照してください。

    Note

    これらのロールは、リソース グループ レベルではなく、サブスクリプション レベルで付与する必要があります。

  • 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 でテストされました。
    • Docker。 このドキュメントは、Docker バージョン 20.10.7 でテストされました。 docker info を使用して、Docker デーモンが実行されているかどうかをテストします。
    • kubectlkubectl version を使用して、kubectl が機能するかどうかをテストします。 このドキュメントは、バージョン v1.21.2 でテストされました。
    • 実行する予定の WebLogic Server のバージョンと互換性のある Java JDK。 この記事では、JDK 11 を使用するバージョンの WebLogic Server をインストールするように指示します。 Azure では、Microsoft Build of OpenJDK が推奨されています。 コマンドを実行するシェルで JAVA_HOME 環境変数が正しく設定されていることを確認します。
    • Maven 3.5.0 以降。
    • zip/ファイル解凍ユーティリティがインストールされていることを確認します。 zip/unzip -v を使用して zip/unzip が正常に機能するかをテストします。
  • この記事の手順はすべて、Azure Cloud Shell で実行することもできます (Docker に関係する手順を除く)。 Azure Cloud Shell の詳細については、「Azure Cloud Shell とは」をご覧ください。

WebLogic Server on AKS をデプロイする

このセクションの手順では、最も簡単な方法で WebLogic Server on AKS をデプロイします。 WebLogic Server on AKS には、Azure 統合の広範かつ豊富な選択肢が用意されています。 詳細については、「Azure Kubernetes Service で Oracle WebLogic Server を実行するためのソリューションとは」を参照してください。

次の手順は、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. [基本] ペインの下部までスクロールし、ドキュメント、コミュニティ サポート、問題の報告方法に関する役立つリンクを確認します。

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

次の手順では、デプロイ プロセスを開始する方法を説明します。

  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 イングレス コントローラーとは」をご覧ください。

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

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

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

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

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

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

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

  6. 他のフィールドは既定値のままにします。

  7. [Review + create](レビュー + 作成) を選択します。 検証が失敗しないことを確認します。 失敗した場合は、検証の問題を修正してから、[確認および作成] をもう一度選択します。

  8. [作成] を選択します

  9. [デプロイが進行中です] ページで、デプロイの進行状況を追跡します。

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

待機中に「Azure SQL Database を作成する」のセクションの手順を実行できます。 データベースの作成が完了したら、このセクションに戻ります。

デプロイの出力を調べる

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

[デプロイが進行中です] ページから移動した場合は、次の手順でそのページに戻る方法について説明します。 "デプロイが完了しました" と表示されたページのままの場合は、次のスクリーンショットの後の手順 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 コマンドです。 これにより、kubectl を使用してクラスターを管理できます。

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

Azure SQL Database の作成

アプリで使用する Azure SQL Database の単一データベースを作成するには、「クイックスタート: Azure SQL Database で単一データベースを作成する」の手順に従います。 以下の相違点に特に注意してください。

  • [基本] の手順の [リソース グループ][データベース名]<サーバー名>.database.windows.net[サーバー管理者ログイン][パスワード] の値をメモします。 この記事では、データベース リソース グループ値を <db-resource-group> とします。

  • [ネットワーク] の手順の [接続方法][パブリック エンドポイント] に、[Azure サービスおよびリソースにこのサーバーへのアクセスを許可する][はい] に、[現在のクライアント IP アドレスを追加する][はい] に設定します。

    [接続方法] と [ファイアウォール規則] の設定が強調表示された [SQL データベースの作成] ページの [ネットワーク] タブを示す Azure portal のスクリーンショット。

Note

このデータベースに対して選んだサーバーレス コンピューティング レベルでは、非アクティブな期間中にデータベースをスリープ状態にすることでコストを節約できます。 アプリの起動時にデータベースがスリープ状態になると、サンプル アプリは失敗します。

データベースを強制的にウェイクアップするには、クエリ エディターを使用してクエリを実行します。 データベースのクエリに関する記事の手順に従います。 クエリの例を次に示します: SELECT * FROM COFFEE;

  1. サンプル アプリケーションのスキーマを作成します。 「データベースのクエリを実行する」に従って、[クエリ エディター] ペインを開きます。 次のクエリを入力して実行します。

    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);
    

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

データベース、テーブル、AKS クラスター、WebLogic Server クラスターが作成されます。 必要に応じて、ブラウザーを開き、adminConsoleExternalUrl のアドレスに移動して、管理コンソールを調べることができます。 WebLogic Server on AKS のデプロイ時に入力した値を使用してサインインします。

WebLogic アプリケーションをホストするための AKS の準備に進むことができます。

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

このプランでは、イメージ内のモデルを使用して 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 にあります。 パッケージが表示されない場合は、続行する前に問題のトラブルシューティングと解決を行う必要があります。

Docker を使用して補助イメージを作成する

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

  • "イメージ内のモデル" モデル ファイル
  • アプリケーション
  • 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. 次のコマンドを使用して、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
    
  6. 次に、次のコマンドを使用して、示されている内容を含むデータベース接続モデルを作成します。 モデル ファイルを ${BASE_DIR}/mystaging/models/dbmodel.yaml に保存します。 このモデルでは、データベースのユーザー名、パスワード、URL にプレースホルダー (シークレット sqlserver-secret) を使用します。 次のフィールドが正しく設定されていることを確認します。 次のモデルでは、リソースに jdbc/WebLogicCafeDB という名前を付けます。

    Item Name フィールド
    JNDI 名 resources.JDBCSystemResource.<resource-name>.JdbcResource.JDBCDataSourceParams.JNDIName jdbc/WebLogicCafeDB
    運転者名 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.DriverName com.microsoft.sqlserver.jdbc.SQLServerDriver
    データベース URL resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.URL @@SECRET:sqlserver-secret:url@@
    データベースのパスワード resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.PasswordEncrypted @@SECRET:sqlserver-secret:password@@
    データベース ユーザー名 resources.JDBCSystemResource.<resource-name>.JDBCDriverParams.Properties.user.Value '@@SECRET:sqlserver-secret:user@@'
    cat <<EOF >dbmodel.yaml
    resources:
      JDBCSystemResource:
        jdbc/WebLogicCafeDB:
          Target: 'cluster-1'
          JdbcResource:
            JDBCDataSourceParams:
              JNDIName: [
                jdbc/WebLogicCafeDB
              ]
              GlobalTransactionsProtocol: None
            JDBCDriverParams:
              DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver
              URL: '@@SECRET:sqlserver-secret:url@@'
              PasswordEncrypted: '@@SECRET:sqlserver-secret:password@@'
              Properties:
                user:
                  Value: '@@SECRET:sqlserver-secret:user@@'
            JDBCConnectionPoolParams:
              TestTableName: SQL SELECT 1
              TestConnectionsOnReserve: true
    EOF
    
  7. 次のコマンドを使用して、アプリケーション アーカイブ ファイルを作成し、wlsdeploy フォルダーを削除します。このフォルダーは不要です。

    cd ${BASE_DIR}/mystaging/models
    zip -r archive.zip wlsdeploy
    
    rm -f -r wlsdeploy
    
  8. 次のコマンドを使用して、ステージング ディレクトリに 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
    
  9. 次のコマンドを使用して WDT インストーラーを削除します。

    rm weblogic-deploy.zip
    
  10. 次のコマンドを使用して、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
    # ARG expansion in COPY command's --chown is available in docker version 19.03.1+.
    # For older docker versions, change the Dockerfile to use separate COPY and 'RUN chown' commands.
    COPY --chown=\$USER:\$GROUP ./ \${AUXILIARY_IMAGE_PATH}/
    USER \$USER
    EOF
    
  11. 次の例に示すように、${BASE_DIR}/mystaging/Dockerfile を使用して docker buildx build コマンドを実行します。

    cd ${BASE_DIR}/mystaging
    docker buildx build --platform linux/amd64 --build-arg AUXILIARY_IMAGE_PATH=/auxiliary --tag model-in-image:WLS-v1 .
    

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

    [+] Building 12.0s (8/8) FINISHED                                   docker:default
    => [internal] load build definition from Dockerfile                          0.8s
    => => transferring dockerfile: 473B                                          0.0s
    => [internal] load .dockerignore                                             1.1s
    => => transferring context: 2B                                               0.0s
    => [internal] load metadata for docker.io/library/busybox:latest             5.0s
    => [1/3] FROM docker.io/library/busybox@sha256:6d9ac9237a84afe1516540f40a0f  0.0s
    => [internal] load build context                                             0.3s
    => => transferring context: 21.89kB                                          0.0s
    => CACHED [2/3] RUN adduser -D -u 1000 -G root oracle                        0.0s
    => [3/3] COPY --chown=oracle:root ./ /auxiliary/                             1.5s
    => exporting to image                                                        1.3s
    => => exporting layers                                                       1.0s
    => => writing image sha256:2477d502a19dcc0e841630ea567f50d7084782499fe3032a  0.1s
    => => naming to docker.io/library/model-in-image:WLS-v1                      0.2s
    
  12. イメージが正常に作成された場合は、ローカル コンピューターの Docker リポジトリ内に配置されます。 次のコマンドを使用して、イメージの作成を確認できます。

    docker images model-in-image:WLS-v1
    

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

    REPOSITORY       TAG       IMAGE ID       CREATED       SIZE
    model-in-image   WLS-v1    76abc1afdcc6   2 hours ago   8.61MB
    

    イメージが作成されたら、/auxiliary/weblogic-deploy に WDT 実行可能ファイルが、/auxiliary/models に WDT モデル、プロパティ、アーカイブ ファイルが配置されるはずです。 Docker イメージに次のコマンドを実行して、この結果を確認します。

    docker run -it --rm model-in-image:WLS-v1 find /auxiliary -maxdepth 2 -type f -print
    

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

    /auxiliary/models/model.properties
    /auxiliary/models/dbmodel.yaml
    /auxiliary/models/model.yaml
    /auxiliary/models/archive.zip
    /auxiliary/models/appmodel.yaml
    /auxiliary/Dockerfile
    /auxiliary/weblogic-deploy/LICENSE.txt
    /auxiliary/weblogic-deploy/VERSION.txt
    
  13. 補助イメージを Azure Container Registry にプッシュするには、次の手順に従います。

    1. Azure portal を開き、「WebLogic Server on AKS をデプロイする」セクションでプロビジョニングしたリソース グループに移動します。

    2. リソースの一覧から、[コンテナー レジストリ] という種類のリソースを選択します。

    3. [ログイン サーバー] の横にある値にマウス カーソルを合わせ、テキストの横にあるコピー アイコンを選択します。

    4. 次のコマンドを使用して、ACR_LOGIN_SERVER 環境変数の値を保存します。

      export ACR_LOGIN_SERVER=<value-from-clipboard>
      
    5. 次のコマンドを実行して、イメージをタグおよびプッシュします。 これらのコマンドを実行する前に、Docker が実行されていることをご確認ください。

      export ACR_NAME=$(echo ${ACR_LOGIN_SERVER} | cut -d '.' -f 1)
      az acr login -n $ACR_NAME
      docker tag model-in-image:WLS-v1 $ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0
      docker push $ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0
      
    6. 次の例に示すように、az acr repository show を実行して、イメージがリモート リポジトリに正常にプッシュされたかどうかをテストできます。

      az acr repository show --name ${ACR_NAME} --image wlsaks-auxiliary-image:1.0
      

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

      {
        "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 クラスターに補助イメージを適用する前に、次の手順に従ってデータソースの URL、ユーザー名、パスワードのシークレットを作成します。 このシークレットは、dbmodel.yaml のプレースホルダーの一部として使用されます。

  1. 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
    
  2. 次の手順を実行して、次の表に示す変数の値を取得します。 これらの値は、後でデータソース接続のシークレットを作成するために使用します。

    変数 説明
    DB_CONNECTION_STRING SQL Server の接続文字列。 jdbc:sqlserver://server-name.database.windows.net:1433;database=wlsaksquickstart0125
    DB_USER SQL Server にサインインするためのユーザー名。 welogic@sqlserverforwlsaks
    DB_PASSWORD SQL Server にサインインするためのパスワード。 Secret123456
    1. Azure portal の SQL データベース リソースにアクセスします。

    2. ナビゲーション ウィンドウで、[設定][接続文字列] を選択します。

    3. [JDBC] タブを選択します。

    4. コピー アイコンを選択して、接続文字列をクリップボードにコピーします。

    5. DB_CONNECTION_STRING には、接続文字列全体を使用しますが、プレースホルダー {your_password_here} をデータベースのパスワードに置き換えます。

    6. DB_USER には、接続文字列の azureuser から ;password={your_password_here} の前までの部分を使用します。

    7. DB_PASSWORD には、データベースの作成時に入力した値を使用します。

  3. 次のコマンドを使用して、Kubernetes シークレットを作成します。 この記事では、データソース接続のシークレットにシークレット名 sqlserver-secret を使用します。 別の名前を使用する場合は、dbmodel.yaml の値と同じ値であることを確認します。

    次のコマンドでは、プレースホルダーの例を前の手順で説明した値に置き換えることで、必ず変数 DB_CONNECTION_STRINGDB_USERDB_PASSWORD を正しく設定してください。 シェルが値に影響を与えることを防ぐために、DB_ 変数の値を一重引用符で囲んでください。

    export DB_CONNECTION_STRING='<example-jdbc:sqlserver://server-name.database.windows.net:1433;database=wlsaksquickstart0125>'
    export DB_USER='<example-welogic@sqlserverforwlsaks>'
    export DB_PASSWORD='<example-Secret123456>'
    export WLS_DOMAIN_NS=sample-domain1-ns
    export WLS_DOMAIN_UID=sample-domain1
    export SECRET_NAME=sqlserver-secret
    
    kubectl -n ${WLS_DOMAIN_NS} create secret generic \
        ${SECRET_NAME} \
        --from-literal=password="${DB_PASSWORD}" \
        --from-literal=url="${DB_CONNECTION_STRING}" \
        --from-literal=user="${DB_USER}"
    
    kubectl -n ${WLS_DOMAIN_NS} label secret \
        ${SECRET_NAME} \
        weblogic.domainUID=${WLS_DOMAIN_UID}
    

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

    secret/sqlserver-secret created
    secret/sqlserver-secret labeled
    
  4. 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))
    
    cat <<EOF >patch-file.json
    [
      {
        "op": "replace",
        "path": "/spec/restartVersion",
        "value": "${VERSION}"
      },
      {
        "op": "add",
        "path": "/spec/configuration/model/auxiliaryImages",
        "value": [{"image": "$ACR_LOGIN_SERVER/wlsaks-auxiliary-image:1.0", "imagePullPolicy": "IfNotPresent", "sourceModelHome": "/auxiliary/models", "sourceWDTInstallHome": "/auxiliary/weblogic-deploy"}]
      },
      {
        "op": "add",
        "path": "/spec/configuration/secrets",
        "value": ["${SECRET_NAME}"]
      }
    ]
    EOF
    
    kubectl -n ${WLS_DOMAIN_NS} patch domain ${WLS_DOMAIN_UID} \
        --type=json \
        --patch-file patch-file.json
    
    kubectl get pod -n ${WLS_DOMAIN_NS} -w
    
  5. 次の出力ブロックに管理サーバーと管理対象サーバーの値が表示されるまで待機してから、続行します。

    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 でプランを実行できる適切なライセンスをお持ちであることを前提としています。