第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 サービスアノテーションが含まれている必要があります。これらのアノテーションは、OpenShift Maven Plugin の一部である Service Discovery Enricher により提供されます。
Apache Camel Rest DSL プロジェクトの場合、OpenShift Maven Plugin はデフォルトで Service Discovery Enricher を実行します。
API Designer によって生成される Fuse プロジェクトは、必要なアノテーションを自動的に提供するよう事前に設定されます。
手順
API Designer によって生成されていない Fuse Rest DSL プロジェクトの場合、プロジェクトを以下のように設定します。
以下の例のように、Fuse プロジェクトの
pom.xml
ファイルを編集し、openshift-maven-plugin
依存関係を組み込みます。<plugin> <groupId>org.jboss.redhat-fuse</groupId> <artifactId>openshift-maven-plugin</artifactId> <version>${fuse.version}</version> <executions> <execution> <goals> <goal>resource</goal> <goal>build</goal> </goals> </execution> </executions> </plugin>
OpenShift Maven Plugin は、特定のプロジェクトレベルの条件が満たされる場合は Service Discovery Enricher を実行します (例: プロジェクトは Camel Rest DSL プロジェクトである必要があります)。API サービスアノテーション値のカスタマイズ の説明にあるように、Enricher の動作をカスタマイズする必要がない場合は、Service Discovery Enricher を
pom.xml
ファイルで依存関係として指定する必要はありません。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/scheme
、discovery.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 サービスアノテーション値のカスタマイズ の説明どおりに、Service Discovery Enricher の動作をカスタマイズできます。