5.3. JBoss EAP でのユーザー開発レイヤーのプロビジョニング

Red Hat から利用可能なレイヤーのプロビジョニングを行うに加え、開発するカスタムレイヤーをプロビジョニングできます。

手順

  1. Galleon Maven プラグインを使用してカスタムレイヤーを構築します。

    詳細は、Maven プロジェクトの準備 を参照してください。

  2. アクセス可能な Maven リポジトリーにカスタムレイヤーをデプロイします。
  3. カスタム Galleon 機能パック環境変数を使用して、S2I イメージビルドプロセス中に Galleon 機能パックとレイヤーをカスタマイズできます。

    Galleon 機能パックとレイヤーのカスタマイズの詳細は、S2I ビルド中におけるカスタム Galleon 機能パックの使用 を参照してください。

  4. オプション: ユーザー定義のレイヤーとサポートされる JBoss EAP レイヤーを参照するカスタムプロビジョニングファイルを作成し、これをアプリケーションディレクトリーに保存します。

    カスタムプロビジョニングファイルの作成に関する詳細は、JBoss EAP のカスタムプロビジョニングファイル を参照してください。

  5. S2I プロセスを実行して、OpenShift で JBoss EAP サーバーをプロビジョニングします。

    詳細は、S2I ビルド中におけるカスタム Galleon 機能パックをの使用 を参照してください。

5.3.1. JBoss EAP のカスタム Galleon レイヤーのビルドと使用

カスタム Galleon レイヤーは、JBoss EAP 7.4 Beta で実行するように設計された Galleon 機能パック内にパッケージ化されています。

Openshift では、JBoss EAP 7.4 サーバー用の MariaDB ドライバーやデータソースなどをプロビジョニングするためのレイヤーを含む Galleon 機能パックをビルドして使用できます。レイヤーには、サーバーにインストールされているコンテンツが含まれています。レイヤーは、サーバーの XML 設定ファイルを更新し、コンテンツをサーバーのインストールに追加できます。

このセクションでは、JBoss EAP 7.4 サーバーに MariaDB ドライバーとデータソースをプロビジョニングするためのレイヤーを含む Galleon フィーチャーパックを OpenShift で構築して使用する方法について説明します。

5.3.1.1. Maven プロジェクトの準備

Galleon 機能パックは、Maven を使用して作成されます。この手順には、新しい Maven プロジェクトを作成する手順が含まれています。

手順

  1. 新しい Maven プロジェクトを作成するには、次のコマンドを実行します。

    mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DgroupId=org.example.mariadb -DartifactId=mariadb-galleon-pack -DinteractiveMode=false
  2. ディレクトリー mariadb-galleon-pack で、pom.xml ファイルを更新して Red Hat Maven リポジトリーを含めます。

    <repositories>
      <repository>
        <id>redhat-ga</id>
        <name>Redhat GA</name>
        <url>https://maven.repository.redhat.com/ga/</url>
      </repository>
    </repositories>
  3. pom.xml ファイルを更新して、EAP Galleon 機能パックと MariaDB ドライバーへの依存関係を追加します。

    <dependencies>
      <dependency>
        <groupId>org.jboss.eap</groupId>
        <artifactId>wildfly-ee-galleon-pack</artifactId>
        <version>7.4.4.GA-redhat-00011</version>
        <type>zip</type>
      </dependency>
      <dependency>
         <groupId>org.mariadb.jdbc</groupId>
         <artifactId>mariadb-java-client</artifactId>
         <version>3.0.5</version>
      </dependency>
    </dependencies>
  4. pom.xml ファイルを更新して、Galeon 機能パックのビルドに使用される Maven プラグインを含めます。

    <build>            
        <plugins>
             <plugin>
                 <groupId>org.wildfly.galleon-plugins</groupId>
                 <artifactId>wildfly-galleon-maven-plugin</artifactId>
                 <version>5.2.11.Final</version>
                 <executions>
                     <execution>
                         <id>mariadb-galleon-pack-build</id>
                         <goals>
                             <goal>build-user-feature-pack</goal>
                         </goals>
                         <phase>compile</phase>
                     </execution>
                 </executions>
             </plugin>
        </plugins>
    </build>

5.3.1.2. 機能パックコンテンツの追加

この手順は、カスタム Galleon 機能パック (MariaDB ドライバーとデータソースレイヤーを含む機能パックなど) にレイヤーを追加するのに役立ちます。

前提条件

手順

  1. カスタム機能パック Maven プロジェクト内に src/main/resources ディレクトリーを作成します。Maven プロジェクトの準備 を参照してください。このディレクトリーは、機能パックのコンテンツを含むルートディレクトリーです。
  2. ディレクトリー src/main/resources/modules/org/mariadb/jdbc/main を 作成します。
  3. main ディレクトリーに、次の内容の module.xml という名前のファイルを作成します。

    <?xml version="1.0" encoding="UTF-8"?>
    <module name="org.mariadb.jdbc" xmlns="urn:jboss:module:1.8">
       <resources>
           <artifact name="${org.mariadb.jdbc:mariadb-java-client}"/> 1
       </resources>
       <dependencies> 2
           <module name="javax.api"/>
           <module name="javax.transaction.api"/>
       </dependencies>
    </module>
    1
    MariaDB ドライバーの groupIdartifactId。プロビジョニング時に、実際のドライバー JAR ファイルがインストールされます。ドライバーのバージョンは、pom.xml ファイルから参照されます。
    2
    MariaDB ドライバーの JBoss Modules モジュールの依存関係。
  4. ディレクトリー src/main/resources/layers/standalone/を 作成します。これは、ガレオン機能パックが定義しているすべてのレイヤーのルートディレクトリーです。
  5. ディレクトリー src/main/resources/layers/standalone/mariadb-driver を 作成します。
  6. mariadb-driver ディレクトリーで、次の内容で layer-spec.xml ファイルを作成します。

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-driver">
     <feature spec="subsystem.datasources"> 1
           <feature spec="subsystem.datasources.jdbc-driver">
                 <param name="driver-name" value="mariadb"/>
                 <param name="jdbc-driver" value="mariadb"/>
                 <param name="driver-xa-datasource-class-name" value="org.mariadb.jdbc.MariaDbDataSource"/>
                 <param name="driver-module-name" value="org.mariadb.jdbc"/>
           </feature>
     </feature>
     <packages> 2
           <package name="org.mariadb.jdbc"/>
     </packages>
    </layer-spec>
    1
    モジュール org.mariadb.jdbc によって実装された MariaDB という名前の JDBC ドライバーを使用して、datasources サブシステムの設定を更新します。
    2
    レイヤーのプロビジョニング時にインストールされるドライバークラスを含む JBoss Modules モジュール。

    mariadb-driver レイヤーは、JBoss Modules モジュールによって実装された JDBC ドライバーの設定で datasources サブシステムを更新します。

  7. ディレクトリー src/main/resources/layers/standalone/mariadb-datasource を作成します。
  8. mariadb-datasource ディレクトリーで、次の内容で layer-spec.xml ファイルを作成します。

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-datasource">
    <dependencies>
         <layer name="mariadb-driver"/> 1
    </dependencies>
        
    <feature spec="subsystem.datasources.data-source"> 2
           <param name="data-source" value="MariaDBDS"/>
           <param name="jndi-name" value="java:jboss/datasources/${env.MARIADB_DATASOURCE:MariaDBDS}"/>
           <param name="connection-url" value="jdbc:mariadb://${env.MARIADB_HOST:localhost}:${env.MARIADB_PORT:3306}/${env.MARIADB_DATABASE}"/> 3
           <param name="driver-name" value="mariadb"/>
           <param name="user-name" value="${env.MARIADB_USER}"/>4
           <param name="password" value="${env.MARIADB_PASSWORD}"/>
    </feature>
    </layer-spec>
    1
    この依存関係により、データソースがプロビジョニングされるときに MariaDB ドライバーのプロビジョニングが強制されます。レイヤーが依存するすべてのレイヤーは、そのレイヤーがプロビジョニングされるときに自動的にプロビジョニングされます。
    2
    MariaDBDS という名前のデータソースを使用してデータソースサブシステム設定を更新します。
    3
    データソースの名前、ホスト、ポート、およびデータベースの値は、サーバーの起動時に設定される環境変数 MARIADB_DATASOURCEMARIADB_HOSTMARIADB_PORT、および MARIADB_DATABASE から解決されます。
    4
    ユーザー名とパスワードの値は、環境変数 MARIADB_USER および MARIADB_PASSWORD から解決されます。
  9. 次のコマンドを実行して、Galeon 機能パックをビルドします。

    mvn clean install

    ファイル target/mariadb-galleon-pack-1.0-SNAPSHOT.zip が作成されます。

5.3.1.3. S2I ビルド中にカスタム Galleon 機能パックを使用する

カスタム機能パックは、OpenShift S2I ビルド中に発生する Maven ビルドで使用できるようにする必要があります。これは通常、カスタム機能パックをアーティファクトとして (例: org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT) アクセス可能な Maven リポジトリーにデプロイすることによって実現されます。

導入前に機能パックをテストするには、ローカルで構築された Galleon 機能パックを利用できるようにする EAP S2I ビルダーイメージ機能を使用できます。次の手順例を使用して、PostgreSQL ドライバーの代わりに MariaDB ドライバーを使用して todo-backend EAP クイックスタートをカスタマイズします。

注記

前提条件

  • OpenShift コマンドラインがインストールされている
  • OpenShift クラスターにログインしている 
  • クラスターに JBoss EAP OpenShift イメージがインストールされている
  • Red Hat Container レジストリーへのアクセスを設定しました。詳細については、Red Hat Container Registry を参照してください。
  • カスタムガレオン機能パックを作成しました。詳細は、Maven プロジェクトの準備 を参照してください。

手順

  1. 次のコマンドを実行して、MariaDB データベースを開始します。

    oc new-app -e MYSQL_USER=admin -e MYSQL_PASSWORD=admin -e MYSQL_DATABASE=mariadb registry.redhat.io/rhscl/mariadb-101-rhel7

    OpenShift サービス mariadb-101-rhel7 が作成され、開始されます。

  2. Maven プロジェクトディレクトリー mariadb-galleon-pack 内で次のコマンドを実行して、カスタム機能パック Maven ビルドによって生成された機能パック ZIP アーカイブからシークレットを作成します。

    oc create secret generic mariadb-galleon-pack --from-file=target/mariadb-galleon-pack-1.0-SNAPSHOT.zip

    秘密の mariadb-galleon-pack が作成されます。S2I ビルドを開始するときに、このシークレットを使用してフィーチャーパックの .zip ファイルを Pod にマウントし、サーバーのプロビジョニングフェーズでファイルを使用できるようにします。

  3. 新しい OpenShift ビルドを作成して、Galleon でトリミングされたサーバー内で実行される todo-backend クイックスタートデプロイメントを含むアプリケーションイメージをビルドするには、次のコマンドを実行します。

    oc new-build jboss-eap74-openjdk11-openshift:latest~https://github.com/jboss-developer/jboss-eap-quickstarts#EAP_7.4.0.GA \
    --context-dir=todo-backend \
    --env=GALLEON_PROVISION_FEATURE_PACKS="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT" \ 1
    --env=GALLEON_PROVISION_LAYERS="jaxrs-server,mariadb-datasource" \ 2
    --env=GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO="/tmp/repo" \ 3
    --env=MAVEN_ARGS_APPEND="-Dcom.redhat.xpaas.repo.jbossorg" \
    --build-secret=mariadb-galleon-pack:/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT \ 4
    --name=todos-app-build
    1
    機能パックの Maven 座標のコンマ区切りリストを含むカスタム機能パック環境変数 (groupId:artifactId:version など)。
    2
    サーバーのプロビジョニングに使用される Galleon レイヤーのセット。jaxrs-server は基本サーバー層で、mariadb-datasource は MariaDB ドライバーと新しいデータソースをサーバーインストールにもたらすカスタム層です。
    3
    MariaDB 機能パックを含むイメージ内のローカル Maven リポジトリーの場所。このリポジトリーは、イメージ内にシークレットをマウントするときに設定されます。
    4
    mariadb-galleon-pack シークレットは、/tmp/repo/org/example/mariadb/mariadb-galleon-pack/1.0-SNAPSHOT ディレクトリーにマウントされます。
  4. 作成した OpenShift ビルドから新しいビルドを開始するには、次のコマンドを実行します。

    oc start-build todos-app-build

    コマンドが正常に実行されると、イメージ todos-app-build が作成されます。

  5. 新しいデプロイメントを作成するには、次のコマンドを実行して、実行中の MariaDB データベースにデータソースをバインドするために必要な環境変数を指定します。

    oc new-app --name=todos-app todos-app-build \
    --env=MARIADB_PORT=3306 \
    --env=MARIADB_USER=admin \
    --env=MARIADB_PASSWORD=admin \
    --env=MARIADB_HOST=mariadb-101-rhel7 \
    --env=MARIADB_DATABASE=mariadb  \
    --env=MARIADB_DATASOURCE=ToDos 1
    1
    クイックスタートでは、データソースの名前が ToDos であることを想定しています。
    注記

    カスタム Galleon 機能パック環境変数の詳細は、カスタム Galleon 機能パック環境変数 を参照してください。

  6. todos-app アプリケーションを公開するには、次のコマンドを実行します。

    oc expose svc/todos-app
  7. 新しいタスクを作成するには、次のコマンドを実行します。

    curl -X POST http://$(oc get route todos-app --template='{{ .spec.host }}') \
       -H 'Content-Type: application/json' \
       -d '{"title":"todo1"}'
  8. タスクのリストにアクセスするには、次のコマンドを実行します。

    curl http://$(oc get route todos-app --template='{{ .spec.host }}')

    追加されたタスクがブラウザーに表示されます。

5.3.1.4. JBoss EAP のカスタムプロビジョニングファイル

カスタムプロビジョニングファイルは、galleon サブディレクトリーに保存されている provisioning.xml というファイル名の XML ファイルです。

Provisioning.xml ファイルの使用は、GALLEON_PROVISION_FEATURE_PACKS および GALLEON_PROVISION_LAYERS 環境変数を使用する代わりに使用できます。S2I ビルド中に、provisioning.xml ファイルを使用してカスタム EAP サーバーをプロビジョニングします。

重要

GALLEON_PROVISION_LAYERS 環境変数を使用する場合は、カスタムプロビジョニングファイルを作成しないでください。この環境変数は、ファイルを無視するように S2I ビルドプロセスを設定するためです。

以下のコードは、カスタムプロビジョニングファイルを示しています。

<?xml version="1.0" ?>
<installation xmlns="urn:jboss:galleon:provisioning:3.0">
    <feature-pack location="eap-s2i@maven(org.jboss.universe:s2i-universe)">1
        <default-configs inherit="false"/>2
        <packages inherit="false"/>3
    </feature-pack>
    <feature-pack location="org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT">4
        <default-configs inherit="false"/>
        <packages inherit="false"/>
    </feature-pack>
    <config model="standalone" name="standalone.xml">5
        <layers>
            <include name="jaxrs-server"/>
            <include name="mariadb-datasource"/>
        </layers>
    </config>
    <options>6
        <option name="optional-packages" value="passive+"/>
    </options>
</installation>
1
この要素は、現在の eap-s2i feature-pack をプロビジョニングするようにプロビジョニングプロセスに指示します。ビルダーイメージには単一の機能パックのみが含まれていることに注意してください。
2
この要素は、デフォルト設定を除外するようにプロビジョニングプロセスに指示します。
3
この要素は、デフォルトパッケージを除外するようにプロビジョニングプロセスに指示します。
4
この要素は、プロビジョニングプロセスに org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT フィーチャーパックをプロビジョニングするように指示します。子要素は、デフォルトの設定およびデフォルトパッケージを除外するようプロセスに指示します。
5
この要素は、カスタムスタンドアロン設定を作成するようにプロビジョニングプロセスに指示します。この設定には、jaxrs-server 基本レイヤーと org.example.mariadb:mariadb-galleon-pack:1.0-SNAPSHOT フィーチャーパックの mariadb-datasource カスタムレイヤーが含まれています。
6
この要素は、JBoss EAP モジュールのプロビジョニングを最適化するようプロビジョニングプロセスに指示します。

関連情報

5.3.2. 高度な環境変数を使用して Galleon を設定

高度なカスタム Galleon 機能パック環境変数を使用して、S2I イメージビルドプロセス中にカスタム Galleon 機能パックとレイヤーを保存する場所をカスタマイズできます。これらの高度なカスタム Galleon 機能パック環境変数は次のとおりです。

  • GALLEON_DIR=<path>: これは、デフォルトの <project_root_dir>/galleon ディレクトリーパスを <project_root_dir>/<GALLEON_DIR> に上書きします。
  • GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO = <path>。これは、<project root dir>/galleon/repository ディレクトリーパスを、Maven ローカルリポジトリーキャッシュディレクトリーへの絶対パスでオーバーライドします。このリポジトリーには、カスタム Galleon 機能パックが含まれています。

Galleon 機能パックのアーカイブファイルは、Maven ローカルキャッシュファイルシステム設定に準拠したサブディレクトリー内に配置する必要があります。たとえば、path-to-repository/org/examples/my-feature-pack/1.0.0.Final/my-feature-pack-1.0.0.Final.zip パス内の org.examples:my-feature-pack:1.0.0.Final 機能パックを見つけます。

<project_root>/<GALLEON_DIR> ディレクトリーに settings.xml ファイルを作成することにより、Maven プロジェクト設定を設定できます。GALLEON_DIR のデフォルト値は <project_root_dir>/galleon です。Maven はこのファイルを使用して、アプリケーション用のカスタム Galleon 機能パックをプロビジョニングします。settings.xml ファイルを作成しない場合、Maven は S2I イメージによって作成されたデフォルトの settings.xml ファイルを使用します。

重要

S2I ビルダーイメージはローカル Maven リポジトリーの場所を指定するため、settings.xml ファイルでローカル Maven リポジトリーの場所を指定しないでください。S2I ビルダーイメージは、S2I ビルドプロセス中にこの場所を使用します。

関連情報

5.3.3. カスタム Galleon feature-pack 環境変数

以下のカスタム Galleon 機能パック環境変数のいずれかを使用して、JBoss EAP S2I イメージの使用方法をカスタマイズできます。

表5.1 カスタム Galleon 機能パック環境変数の説明

環境変数説明

GALLEON_DIR=<path>

ここで、<path> は、アプリケーションプロジェクトの root ディレクトリーに相対的なディレクトリーです。<path> ディレクトリーには、settings.xml ファイルやローカル Maven リポジトリーキャッシュなどのオプションの Galleon カスタムコンテンツが含まれています。このキャッシュには、カスタム Galleon 機能パックが含まれています。

デフォルトのディレクトリーは galleon です。

GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path>

<path> は、カスタム feature-packs を含む Maven ローカルリポジトリーディレクトリーの絶対パスです。ディレクトリーのデフォルトは galleon/repository に設定されます。

GALLEON_PROVISION_FEATURE_PACKS=<list_of_galleon_feature_packs>

<list_of_galleon_feature_packs> は、Maven コーディネートによって識別されるカスタム Galleon feature-packs のコンマ区切りリストです。一覧表示されている feature-packs は、ビルダーイメージにある JBoss EAP 7.4 サーバーのバージョンと互換性がある必要があります。

GALLEON_PROVISION_LAYERS 環境変数を使用して、サーバーのカスタム feature-packs によって定義された Galleon レイヤーを設定できます。