第5章 3scale の検出についての API サービスの準備

Red Hat 3scale API Management を使用すると、パブリックインターネット上の API サービスへのアクセスを制御できます。3scale の機能には、サービスレベルアグリーメント (SLA) の実施、API バージョンの管理、セキュリティーおよび認証サービスの提供などが含まれます。Fuse は 3scale の サービス検出機能をサポートします。これにより、3scale 管理ポータル UI から Fuse サービスを簡単に検出できます。サービス検出を使用して、同じ OpenShift クラスターで実行されている Fuse アプリケーションをスキャンし、関連付けられた API 定義を 3scale に自動的にインポートできます。

前提条件

  • API サービスを提供する Fuse アプリケーションが OpenShift でデプロイされ、実行されています。
  • Fuse アプリケーションには、3scale によって検出されるように必須のアノテーションが付けられています。

    注記

    API Designer によって生成される Fuse プロジェクトは、必要なアノテーションを自動的に提供するように事前に設定されています。

    API Designer によって生成されない Fuse プロジェクトの場合、API Designer によって生成されない Fuse プロジェクトのアノテーションの追加 の説明どおりに、プロジェクトを設定する必要があります。

  • 3scale API Management システムは、検出される API サービスと 同じ OpenShift クラスターにデプロイされます。

3scale で API サービスを検出する手順についての詳細は、Red Hat 3scale API Management 管理ポータルガイドの サービスディスカバリー を参照してください。

5.1. API Designer によって生成されない Fuse プロジェクトのアノテーションの追加

3scale が API サービスを検出できるようにするには、API サービスを提供する Fuse アプリケーションに、検出を可能にする Kubernetes サービスアノテーションが含まれている必要があります。これらのアノテーションは、Fabric8 Maven Plugin の一部である Fabric8 Service Discovery Enricher によって提供されます。

Apache Camel Rest DSL プロジェクトの場合、Fabric8 Maven Plugin はデフォルトで Fabric8 Service Discovery Enricher を実行します。

API Designer によって生成される Fuse プロジェクトは、必要なアノテーションを自動的に提供するよう事前に設定されます。

手順

API Designer によって生成されていない Fuse Rest DSL プロジェクトの場合、プロジェクトを以下のように設定します。

  1. 以下の例のように、Fuse プロジェクトの pom.xml ファイルを編集し、fabric8-maven-plugin 依存関係を組み込みます。

    <plugin>
            <groupId>org.jboss.redhat-fuse</groupId>
            <artifactId>fabric8-maven-plugin</artifactId>
            <version>${fuse.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>resource</goal>
                  <goal>build</goal>
                </goals>
              </execution>
            </executions>
      </plugin>

    Fabric8 Maven Plugin は、特定のプロジェクトレベルの条件が満たされる場合は Fabric8 Service Discovery Enricher を実行します (例: プロジェクトは Camel Rest DSL プロジェクトである必要があります)。API サービスアノテーション値のカスタマイズ の説明にあるように、 Enricher の動作をカスタマイズする必要がない場合は、Fabric8 Service Discovery Enricher を pom.xml ファイルで依存関係として指定する必要はありません。

  2. Fuse Rest DSL プロジェクトの camel-context.xml ファイルで、以下の属性を restConfiguration 要素に指定します。

    • scheme: サービスがホストされる URL のスキームの部分です。http または https を指定できます。
    • contextPath: API サービスがホストされる URL のパスの部分です。
    • apiContextPath: API サービスの記述ドキュメントがホストされる場所へのパスです。ドキュメントがセルフホストされている場合は相対パスを指定でき、ドキュメントが外部でホストされる場合は完全な URL を指定できます。

      サンプル camel-context.xml ファイルからの以下の抜粋には、アノテーションの属性値が restConfiguration 要素に表示されています。

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://camel.apache.org/schema/spring       http://camel.apache.org/schema/spring/camel-spring.xsd">
      
          <camelContext xmlns="http://camel.apache.org/schema/spring">
              <restConfiguration component="servlet" scheme="https"
                    contextPath="myapi" apiContextPath="myapi/openapi.json"/>
      ...

Enricher は、これらの restConfiguration 要素の属性値で指定される情報を使用し、discovery.3scale.net/schemediscovery.3scale.net/path、および discovery.3scale.net/description-path アノテーションの値を作成します。これにより、Red Hat 3scale API Management管理ポータルガイド のサービスディスカバリーの説明にあるように、プロジェクトのデプロイされた OpenShift サービスを 3scale で検出可能にすることができます。

Enricher は以下のラベルとアノテーションを追加して、サービスが 3scale で検出できるようにします。

  • discovery.3scale.net ラベル: デフォルトで、Enricher はこの値を true に設定します。3scale はセレクター定義を実行して検出を必要とするすべてのサービスを検索する際にこのラベルを使用します。
  • また、以下のアノテーションが含まれている必要があります。

    • discovery.3scale.net/discovery-version: (オプション)3scale 検出プロセスのバージョンです。Enricher はデフォルトでこの値を v1 に設定します。
    • discovery.3scale.net/scheme: サービスがホストされる URL のスキーム部分です。Enricher は、restConfiguration 要素の scheme 属性で上書きしない限り、デフォルトの http を使用します。他の使用できる値は https です。
    • discovery.3scale.net/path: サービスがホストされる URL のパスの部分です。このアノテーションは、パスがルート/にある場合に省略されます。Enricher は、この値を restConfiguration 要素の path 属性から取得します。
    • discovery.3scale.net/port: サービスのポートです。Enricher はこの値を Kubernetes サービス定義から取得します。これには、公開するサービスのポート番号が含まれます。Kubernetes サービス定義が複数のサービスを公開する場合、Enricher は一覧表示される最初のポートを使用します。
    • discovery.3scale.net/description-path: (オプション) OpenAPI サービス記述ドキュメントへのパスです。Enricher は、この値を restConfiguration 要素の contextPath 属性から取得します。

API サービスアノテーション値のカスタマイズ の説明どおりに、Fabric8 Service Discovery Enricher の動作をカスタマイズできます。