このページの内容は Apigee と Apigee ハイブリッドに該当します。
Apigee Edge のドキュメントを表示する。
Apigee を利用するデベロッパーの主要な開発作業には、API またはバックエンド サービスのプロキシとして機能する API プロキシの構成が含まれます。このドキュメントは、API プロキシを構築する際に利用できる、すべての構成要素のリファレンスです。
API プロキシの構築方法を学習する場合は、シンプルな API プロキシの構築のトピックから始めることをおすすめします。
次のいずれかの方法で API プロキシ構成を編集します。
- Apigee UI または API を使用します。
- API プロキシ構成バンドルのダウンロードとアップロードの説明に沿って、API プロキシ構成のバンドルをダウンロードして手動で編集し、新しい構成を Apigee にアップロードします。
API プロキシ構成のディレクトリ構造
API プロキシ構成のディレクトリ構造を以下に示します。
API プロキシ構成は、次の内容で構成されます。
基本構成 | API プロキシのプライマリ構成設定。 |
ProxyEndpoint | インバウンド HTTP 接続(リクエストを行うアプリから Apigee への接続)、リクエストとレスポンスのフロー、ポリシー接続の設定。 |
TargetEndpoint | アウトバウンド HTTP 接続(Apigee からバックエンド サービスへの接続)、リクエストとレスポンスのフロー、ポリシー接続の設定。 |
フロー | ポリシーを接続できる、ProxyEndpoint と TargetEndpoint のリクエストとレスポンスのパイプライン。 |
ポリシー | Apigee ポリシー スキーマに準拠する XML 形式の構成ファイル。 |
リソース | カスタム ロジックを実行するためにポリシーによって参照されるスクリプト、JAR ファイル、XSLT ファイル。 |
基本構成
/apiproxy/weatherapi.xml
API プロキシの基本構成。API プロキシの名前を定義します。名前は組織内で一意でなければなりません。
構成の例:
<APIProxy name="weatherapi"> </APIProxy>
基本構成の要素
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
APIProxy |
|||
name |
API プロキシの名前。組織内で一意にする必要があります。名前に使用できる文字は、A-Za-z0-9_- のみです。 |
なし | ○ |
revision |
API プロキシ構成のリビジョン番号。Apigee では API プロキシの現在のリビジョンが自動的にトラッキングされるため、リビジョン番号を明示的に設定する必要はありません。 | なし | × |
ConfigurationVersion |
この API プロキシが準拠する API プロキシ構成スキーマのバージョン。現在サポートされている値は、majorVersion 4 と minorVersion 0 のみです。この設定は、API プロキシ フォーマットの進化を可能にするため将来使用される可能性があります。 | 4.0 | × |
Description |
API プロキシのテキストによる説明。指定すると、Apigee UI に説明が表示されます。 | なし | × |
DisplayName |
API プロキシ構成の name 属性とは異なる場合がある、わかりやすい名前。 |
なし | × |
Policies |
この API プロキシの /policies ディレクトリにあるポリシーのリスト。通常、Apigee UI を使用して API プロキシを作成した場合にのみこの要素が表示されます。これは単なるマニフェスト設定であり、API プロキシの内容を可視化するように設計されています。 |
なし | × |
ProxyEndpoints |
この API プロキシの /proxies ディレクトリにあるプロキシ エンドポイントのリスト。通常、Apigee UI を使用して API プロキシを作成した場合にのみこの要素が表示されます。これは単なるマニフェスト設定であり、API プロキシの内容を可視化するように設計されています。 |
なし | × |
Resources |
この API プロキシの /resources ディレクトリにあるリソース(JavaScript、Python、Java、XSLT)のリスト。通常、Apigee UI を使用して API プロキシを作成した場合にのみこの要素が表示されます。これは単なるマニフェスト設定であり、API プロキシの内容を可視化するように設計されています。 |
なし | × |
Spec |
API プロキシに関連付けられている OpenAPI 仕様を識別します。値は、URL または仕様ストア内のパスに設定されます。 |
なし | × |
TargetServers |
この API プロキシのターゲット エンドポイントで参照されるターゲット サーバーのリスト。通常、Apigee を使用して API プロキシを作成した場合にのみ、この要素が表示されます。これは単なるマニフェスト設定であり、API プロキシの内容を可視化するように設計されています。 | なし | × |
TargetEndpoints |
この API プロキシの /targets ディレクトリにあるターゲット エンドポイントのリスト。通常、Apigee UI を使用して API プロキシを作成した場合にのみこの要素が表示されます。これは単なるマニフェスト設定であり、API プロキシの内容を可視化するように設計されています。 |
なし | × |
ProxyEndpoint
次の図は、リクエスト / レスポンスのフローを示しています。
/apiproxy/proxies/default.xml
ProxyEndpoint 構成では、API プロキシのインバウンド(クライアントに対する)インターフェースが定義されます。プロキシ エンドポイントを構成する際、クライアント アプリケーション(アプリ)がプロキシされた API をどのように呼び出すかを定義するネットワーク構成を設定します。
次の ProxyEndpoint 構成のサンプルは、/apiproxy/proxies
に保存されます。
<ProxyEndpoint name="default"> <PreFlow/> <Flows/> <PostFlow/> <HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> </HTTPProxyConnection> <FaultRules/> <DefaultFaultRule/> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
基本的なプロキシ エンドポイントに必要な構成要素は次のとおりです。
ProxyEndpoint 構成要素
名前 | 説明 | デフォルト | 必須かどうか | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ProxyEndpoint |
||||||||||||||||||
name |
プロキシ エンドポイントの名前。(まれなケースですが)複数のプロキシ エンドポイントが定義されている場合、API プロキシ構成内で一意でなければなりません。名前に使用できる文字は、A-Za-z0-9._\-$ % のみです。 |
なし | ○ | |||||||||||||||
PreFlow |
リクエストやレスポンスの PreFlow 内のポリシーを定義します。 | なし | ○ | |||||||||||||||
Flows |
リクエストやレスポンスの条件付きフロー内のポリシーを定義します。
|
なし | ○ | |||||||||||||||
PostFlow |
リクエストやレスポンスの PostFlow 内のポリシーを定義します。
|
なし | ○ | |||||||||||||||
HTTPProxyConnection |
API プロキシに関連付けられたネットワーク アドレスと URI パスを定義します。 | |||||||||||||||||
BasePath |
受信メッセージを適切な API プロキシにルーティングする際に Apigee が使用する URI パスを、一意に識別する必須文字列。 BasePath は、API プロキシのベース URL( ベースパスでのワイルドカードの使用 API プロキシのベースパスでワイルドカードとして 1 つ以上の「*」を使用できます。たとえば、ベースパスを 重要: Apigee では、ベースパスの最初の要素としてワイルドカード「*」を使用できません。たとえば、 |
/ | ○ | |||||||||||||||
Properties |
オプションの HTTP 構成設定のセットは、<ProxyEndpoint> のプロパティとして定義できます。
<Property name= \ "request.queryparams.ignore.content.type.charset">true</>
次の表に、
|
なし | × | |||||||||||||||
FaultRules |
プロキシ エンドポイントがエラーに対してどのように反応するかを定義します。障害ルールには以下の 2 つの事項を指定します。
障害の処理をご覧ください。 |
なし | × | |||||||||||||||
DefaultFaultRule |
別の障害ルールによって明示的に処理されないエラー(システム、トランスポート、メッセージング、ポリシー)を処理します。 障害の処理をご覧ください。 |
なし | × | |||||||||||||||
RouteRule |
ProxyEndpoint リクエスト パイプラインによる処理後のインバウンド リクエスト メッセージの宛先を定義します。通常、RouteRule は、名前付きターゲット エンドポイント、IntegrationEndpoint、または URL を指します。 | |||||||||||||||||
Name |
RouteRule に名前を与える必須属性。名前に使用できる文字は、A-Za-z0-9._\-$ % のみです。たとえば、Cat2 %_ は正式名称です。 |
なし | ○ | |||||||||||||||
Condition |
実行時の動的ルーティングに使用されるオプションの条件付きステートメント。条件付きの RouteRules は、コンテンツ ベースのルーティングでバックエンドのバージョニングをサポートできるようにする場合などに便利です。 | なし | × | |||||||||||||||
TargetEndpoint |
名前付き TargetEndpoint 構成を識別するオプションの文字列。名前付きターゲット エンドポイントは、 ターゲット エンドポイントに名前を付けることで、ProxyEndpoint リクエスト パイプラインによる処理後にリクエスト メッセージを転送する場所を指定します。これはオプションの設定であるので注意してください。 プロキシ エンドポイントは、URL を直接呼び出すことができます。たとえば、HTTP クライアントのロールで機能する JavaScript または Java リソースは、リクエストをバックエンド サービスに転送するというターゲット エンドポイントの基本的な機能を実行できます。 |
なし | × | |||||||||||||||
URL |
プロキシ エンドポイントによって呼び出されるアウトバウンド ネットワーク アドレスを定義するオプションの文字列。/targets に保存されている TargetEndpoint 構成をバイパスします。 |
なし | × |
RouteRules の構成方法
名前付きターゲット エンドポイントは /apiproxy/targets
にある構成ファイルを指し、RouteRule はプロキシ エンドポイントによる処理後にリクエストをこの宛先に転送します。
たとえば、次の RouteRule は構成 /apiproxy/targets/myTarget.xml
を指します。
<RouteRule name="default"> <TargetEndpoint>myTarget</TargetEndpoint> </RouteRule>
URL の直接呼び出し
プロキシ エンドポイントは、バックエンド サービスを直接呼び出すこともできます。URL の直接呼び出しは、/apiproxy/targets
にあるすべての名前付き TargetEndpoint 構成をバイパスします。そのため、TargetEndpoint はオプションの API プロキシ構成になっています。ただし、実際にはプロキシ エンドポイントからの直接呼び出しは推奨されません。
たとえば、次の RouteRule は http://api.mycompany.com/v2
に対して HTTP 呼び出しを実行します。
<RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
条件付きルート
実行時に動的ルーティングをサポートするために、RouteRules を連結できます。インバウンド リクエストは、URL に直接ルーティングしたり、あるいは HTTP ヘッダー、メッセージ コンテンツ、クエリ パラメータ、時刻やロケールなどのコンテキスト情報に基づいて指定された TargetEndpoint 構成にルーティングしたり、その 2 つの組み合わせにルーティングしたりできます。
条件付き RouteRules は、Apigee の他の条件文と同様に機能します。条件リファレンスとフロー変数リファレンスをご覧ください。
たとえば、次の RouteRule の組み合わせでは、まずインバウンド リクエストを評価して HTTP ヘッダーの値が確認されます。HTTP ヘッダー routeTo
の値が TargetEndpoint1
の場合、リクエストは TargetEndpoint1
というターゲット エンドポイントに転送されます。そうでない場合、インバウンド リクエストは http://api.mycompany.com/v2
に転送されます。
<RouteRule name="MyRoute"> <Condition>request.header.routeTo = "TargetEndpoint1"</Condition> <TargetEndpoint>TargetEndpoint1</TargetEndpoint> </RouteRule> <RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
null ルート
null の RouteRule を定義して、リクエスト メッセージをターゲット エンドポイントに転送する必要がないシナリオをサポートできます。これは、プロキシ エンドポイントが JavaScript を使用して外部サービスを呼び出したり、Apigee の Key-Value ストアを参照してデータを取得したりするなど、プロキシ エンドポイントが必要なすべての処理を行う場合に役立ちます。
たとえば、次のように null ルートを定義します。
<RouteRule name="GoNowhere"/>
条件付きの null ルートは便利です。次の例では、HTTP ヘッダー request.header.X-DoNothing
に null
以外の値が設定されている場合は null ルートを実行するように構成します。
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
RouteRules は連鎖させることができるので、条件付きの null ルートは通常、条件付きルーティングをサポートするように設計された一連の RouteRules を構成する 1 つのコンポーネントになります。
条件付き null ルートを実際に使用すると、キャッシュをサポートすることになります。キャッシュ ポリシーによって設定された変数の値を使用することにより、エントリがキャッシュから提供されたときに null ルートを実行するように API プロキシを構成できます。
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
TargetEndpoint
ターゲット エンドポイントは、プロキシ エンドポイントのアウトバウンドに相当します。ターゲット エンドポイントは、バックエンド サービスまたは API のクライアントとして機能します。つまり、リクエストを送信してレスポンスを受け取ります。
API プロキシにターゲット エンドポイントは必ずしも必要ではありません。プロキシ エンドポイントから URL を直接呼び出すように構成できます。ターゲット エンドポイントを持たない API プロキシには通常、バックエンド サービスを直接呼び出すか、Java または JavaScript を使用してなんらかのサービスを呼び出すように構成されたプロキシ エンドポイントが含まれています。
TargetEndpoint 構成
/targets/default.xml
ターゲット エンドポイントは、Apigee から別のサービスまたはリソースへのアウトバウンド接続を定義します。
TargetEndpoint の構成例を次に示します。
<TargetEndpoint name="default"> <PreFlow/> <Flows/> <PostFlow/> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <SSLInfo/> <Authentication/> </HTTPTargetConnection> <FaultRules/> <DefaultFaultRule/> <ScriptTarget/> <LocalTargetConnection/> </TargetEndpoint>
TargetEndpoint の構成要素
ターゲット エンドポイントは、次のいずれかの方法でターゲットを呼び出すことができます。
- HTTP または HTTPS 呼び出し用の HTTPTargetConnection
- ローカル プロキシとプロキシ間のチェーン接続用の LocalTargetConnection
これらのいずれかをターゲット エンドポイントで構成します。
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
TargetEndpoint |
|||
name |
ターゲット エンドポイントの名前。API プロキシ構成内で一意である必要があります。ターゲット エンドポイントの名前は、アウトバウンド処理のためにリクエストを転送する宛先として ProxyEndpoint RouteRule で使用されます。名前に使用できる文字は、A-Za-z0-9._\-$ % のみです。 |
なし | ○ |
PreFlow |
リクエストやレスポンスの PreFlow 内のポリシーを定義します。 | なし | ○ |
Flows |
リクエストやレスポンスの条件付きフロー内のポリシーを定義します。
|
なし | ○ |
PostFlow |
リクエストやレスポンスの PostFlow 内のポリシーを定義します。
|
なし | ○ |
HTTPTargetConnection |
その子要素を使用して、HTTP 経由でバックエンド リソースのリーチを指定します。 HTTPTargetConnection を使用する場合は、他のタイプのターゲット接続(ScriptTarget や LocalTargetConnection)を構成しないでください。
|
||
URL |
ターゲット エンドポイントがリクエスト メッセージを転送する宛先バックエンド サービスのネットワーク アドレスを定義します。 | なし | × |
LoadBalancer |
1 つ以上の名前付き TargetServer 構成を定義します。名前付き TargetServer 構成は、2 つ以上のエンドポイント構成接続を定義するロード バランシングに使用できます。 ターゲット サーバーを使用して、具体的なバックエンド サービスのエンドポイント URL から API プロキシ構成を切り離すこともできます。 |
なし | × |
Properties |
オプションの HTTP 構成設定のセットは、<TargetEndpoint> のプロパティとして定義できます。 |
なし | × |
SSLInfo |
必要に応じてターゲット エンドポイントに TLS / SSL 設定を定義して、API プロキシとターゲット サービス間の TLS / SSL 接続を制御します。TLS / SSL TargetEndpoint 構成をご覧ください。 | なし | × |
LocalTargetConnection |
その子要素により、ロード バランシングやメッセージ プロセッサなどのネットワーク特性を考慮することなく、ローカルでアクセスするリソースを指定します。 ターゲット リソースを指定するには、APIProxy 子要素(ProxyEndpoint 要素を含む)または Path 子要素のいずれかを含めます。 詳細については、チェーンによる API プロキシの接続をご覧ください。 HTTPTargetConnection を使用する場合は、他のタイプのターゲット接続(LocalTargetConnection や ScriptTarget)を構成しないでください。 |
||
APIProxy |
リクエストのターゲットとして使用する API プロキシの名前を指定します。ターゲット プロキシは、リクエストを送信するプロキシと同じ組織と環境に属している必要があります。これは Path 要素を使用する代わりに用いられる方法です。 | なし | × |
ProxyEndpoint |
APIProxy とともに使用して、ターゲット プロキシのプロキシ エンドポイントの名前を指定します。 | なし | × |
Path |
リクエストのターゲットとして使用する API プロキシのエンドポイント パスを指定します。ターゲット プロキシは、リクエストを送信するプロキシと同じ組織と環境に属している必要があります。これは、APIProxy を使用する代わりに用いられる方法です。 | なし | × |
FaultRules |
ターゲット エンドポイントがエラーに対してどのように反応するかを定義します。障害ルールには以下の 2 つの事項を指定します。
障害の処理をご覧ください。 |
なし | × |
DefaultFaultRule |
別の FaultRule によって明示的に処理されないエラー(システム、トランスポート、メッセージング、ポリシー)を処理します。 障害の処理をご覧ください。 |
なし | × |
<Authentication>
要素の使用
<TargetEndpoint>
での <Authentication>
要素の使用方法は、ServiceCallout ポリシーでの <Authentication>
要素の使用方法と同じです。<TargetEndpoint>
と ServiceCallout の両方で、<Authentication>
は <HttpTargetConnection>
の部分要素です。詳しくは、ServiceCallout ポリシー リファレンスの Authentication 要素をご覧ください。
<Authentication>
要素のエラー リファレンス
<Authentication>
要素を使用している場合は、ServiceCallout ポリシー ドキュメントのエラーセクションに、デプロイエラーとランタイム エラーのエラー メッセージとトラブルシューティングのヒントが記載されています。
<Authentication>
要素の例
次の例は、Authentication
要素を使用して、ターゲットとして Cloud Run にデプロイされたサービスを呼び出し、呼び出しの認証に必要な OpenID Connect トークンを生成する方法を示しています。
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Properties/> <URL>https://cloudrun-hostname.a.run.app/test</URL> <Authentication> <GoogleIDToken> <Audience>https://cloudrun-hostname.a.run.app/test</Audience> </GoogleIDToken> </Authentication> </HTTPTargetConnection> </TargetEndpoint>
次の例は、Authentication
要素を使用して Cloud Run を指す TargetService を呼び出し、この呼び出しの認証に必要な OpenID Connect トークンを生成する方法を示しています。HeaderName
要素は、生成された署名なしトークンを X-Serverless-Authorization
というヘッダーに追加し、ターゲット システムに送信します。Authorization
ヘッダーが存在する場合は、変更されずにリクエストで送信されます。
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Authentication> <HeaderName>X-Serverless-Authorization</HeaderName> <GoogleIDToken> <Audience ref="flow.variable.audience">https://cloudrun-hostname.a.run.app</Audience> </GoogleIDToken> </Authentication> <LoadBalancer> <Server name="cloud-run-target" /> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
次の例は、Google Secret Manager サービスを参照する TargetService を呼び出す方法を示しています。この例では、GoogleAccessToken 要素は、ターゲット リクエストを認証するための Google Auth Token を生成するように構成されています。
<HTTPTargetConnection> <Authentication> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication> <URL> https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id </URL> </HTTPTargetConnection>
次の例は、GoogleIDToken のオーディエンスを自動的に設定する方法を示しています。useTargetUrl
が true
で、参照される変数が有効な変数に解決されない場合、ターゲット(クエリ パラメータを除く)の URL がオーディエンスとして使用されます。リクエストパスが /foobar
で、ターゲット サーバーの URL が https://xyz.com
の場合、GoogleIDToken のオーディエンスは自動的に https://xyz.com/foobar
に設定されます。
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Authentication> <GoogleIDToken> <Audience ref='myvariable' useTargetUrl="true"/> </GoogleIDToken> </Authentication> <LoadBalancer> <Server name="TS" /> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
TLS / SSL TargetEndpoint 構成
多くの場合、ターゲット エンドポイントでは異種のバックエンド インフラストラクチャで HTTPS 接続を管理する必要があります。このため、多くの TLS / SSL 構成設定がサポートされています。
TLS / SSL TargetEndpoint 構成要素
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
SSLInfo |
|
||
Enabled |
|
<URL> で HTTPS が指定されている場合は true |
× |
Enforce |
Apigee とターゲット バックエンドの間に厳格な SSL を適用します。
未設定または |
false |
× |
TrustStore |
信頼できるルートサーバー証明書を含むキーストア。Apigee から送信された証明書チェーンがこのキーストアに含まれる証明書で終了する場合、リモートピアは信頼できるものとして扱われます。 |
なし | × |
ClientAuthEnabled |
双方向 TLS を有効にするには、通常、Apigee にトラストストアとキーストアの両方を設定する必要があります。 |
false |
× |
KeyStore |
アウトバウンド クライアント認証に使用される秘密鍵を含むキーストア | なし | ○(ClientAuthEnabled が true の場合) |
KeyAlias |
アウトバウンド クライアント認証に使用される秘密鍵のエイリアス | なし | ○(ClientAuthEnabled が true の場合) |
IgnoreValidationErrors |
検証エラーが無視されるかどうかを示します。バックエンド システムが SNI を使用し、ホスト名と一致しないサブジェクトの識別名 (DN) を持つ証明書を返す場合、エラーを無視する方法がなく、接続が失敗します。 注: |
false |
× |
Ciphers |
アウトバウンド TLS / SSL でサポートされている暗号。暗号が指定されていない場合、JVM で使用可能なすべての暗号が許可されます。 暗号を制限するには、以下のサポートされた暗号リストから要素を追加します。 <Ciphers> <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher> <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher> </Ciphers> |
なし | × |
Protocols |
アウトバウンド TLS / SSL でサポートされているプロトコル。プロトコルを指定されていない場合は、JVM で使用可能なすべてのプロトコルが許可されます。 プロトコルを制限するには、明示的に指定します。たとえば、TLS v1.2 または TLS v1.3 のみを許可するには、次のようにします。 <Protocols> <Protocol>TLSv1.2</Protocol> <Protocol>TLSv1.3</Protocol> </Protocols> |
なし | × |
CommonName |
Apigee は、この値をリモートピア証明書の CN(共通名)または SAN(サブジェクト代替名)と照合します。 |
なし | × |
アウトバウンド クライアント認証を有効にしたターゲット エンドポイントの例
<TargetEndpoint name="default"> <HttpTargetConnection> <URL>https://myservice.com</URL> <SSLInfo> <Enabled>true</Enabled> <Enforce>true</Enforce> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>myKeystore</KeyStore> <KeyAlias>myKey</KeyAlias> <TrustStore>myTruststore</TrustStore> </SSLInfo> </HttpTargetConnection> </TargetEndpoint>
詳細な手順については、TLS を構成するためのオプションをご覧ください。
フロー変数を使用した TLS / SSL 値の動的設定
TLS / SSL の詳細を動的に設定して、ランタイム要件を柔軟にサポートすることもできます。たとえば、プロキシが 2 つの異なるターゲット(テスト ターゲットと本番環境ターゲット)に接続する場合、API プロキシがプログラムによって呼び出し元の環境を検出し、適切なキーストアとトラストストアへの参照を動的に設定できます。この事例の詳細については、変数リファレンスを使用した TargetEndpoint の動的 SSLInfo という Apigee コミュニティにある記事をご覧ください。ここでは、デプロイ可能な API プロキシの例も示されています。
TargetEndpoint 構成で <SSLInfo>
タグが設定される仕組みを示す次の例では、Java Callout、JavaScript ポリシー、AssignMessage ポリシーなど、ランタイムで値を指定できます。設定する値を含むメッセージ変数を使用します。
変数は次の要素にのみ使用できます。
<SSLInfo> <Enabled>{myvars.ssl.enabled}</Enabled> <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled> <KeyStore>{myvars.ssl.keystore}</KeyStore> <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias> <TrustStore>{myvars.ssl.trustStore}</TrustStore> </SSLInfo>
参照を使用した TLS / SSL 値の動的設定
HTTPS を使用するターゲット エンドポイントを構成する際は、TLS / SSL 証明書の有効期限が切れる場合や、システム構成の変更で証明書を更新しなければならなくなる場合を考慮する必要があります。
詳細については、期限切れの証明書の処理をご覧ください。
ただし、ターゲット エンドポイントでキーストアまたはトラストストアへの参照を使用するように構成することもできます。参照を使用する利点は、別のキーストアまたはトラストストアを参照するように更新して、メッセージ プロセッサを再起動することなく TLS / SSL 証明書を更新できることです。
たとえば、キーストアへの参照を使用するターゲット エンドポイントの例を次に示します。
<SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo>
次の POST API 呼び出しを使用して、keystoreref
という名前の参照を作成します。
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -d '<ResourceReference name="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>'
ここで、OAuth 2.0 アクセス トークンの取得で説明されているように、$TOKEN
は OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl
オプションの詳細については、curl の使用をご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。
この参照では、キーストアの名前とそのタイプを指定しています。
次の GET API 呼び出しを使用してリファレンスを表示します。
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \ -H "Authorization: Bearer $TOKEN"
ここで、OAuth 2.0 アクセス トークンの取得で説明されているように、$TOKEN
は OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl
オプションの詳細については、curl の使用をご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \ -H "Authorization: Bearer $TOKEN"
ここで、OAuth 2.0 アクセス トークンの取得で説明されているように、$TOKEN
は OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl
オプションの詳細については、curl の使用をご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。
後で別のキーストアを参照するように変更し、エイリアスの名前が同じになるようにするには、次の PUT 呼び出しを使用します。
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \ -X PUT \ -H "Authorization: Bearer $TOKEN" \ -d '<ResourceReference name="keystoreref"> <Refers>myNewKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>'
ここで、OAuth 2.0 アクセス トークンの取得で説明されているように、$TOKEN
は OAuth 2.0 アクセス トークンに設定されます。この例で使用されている curl
オプションの詳細については、curl の使用をご覧ください。使用される環境変数の説明については、Apigee API リクエストの環境変数の設定をご覧ください。
ターゲット ロード バランシングを行う TargetEndpoint
ターゲット エンドポイントは、3 種類のロード バランシング アルゴリズムを使用した複数の名前付きターゲット サーバー間のロード バランシングをサポートしています。
詳細な手順については、バックエンド サーバー間のロード バランシングをご覧ください。
IntegrationEndpoint
IntegrationEndpoint は、Apigee Integration を特別に実行するターゲット エンドポイントです。IntegrationEndpoint が構成されている場合、Apigee は、リクエストを実行するためにリクエスト オブジェクトを Apigee Integration Platform に送信します。統合を実行するには、IntegrationEndpoint を構成するだけでなく、プロキシフローに SetIntegrationRequest ポリシーを追加する必要もあります。
IntegrationEndpoint 構成で <AsyncExecution>
要素を設定すると、同期的または非同期的に実行するように統合を構成できます。詳しくは、同期的実行と非同期的実行をご覧ください。統合の実行後、Apigee はレスポンスをレスポンス メッセージに保存します。
IntegrationEndpoint の構成
統合エンドポイントをターゲット エンドポイントとして構成するには、IntegrationEndpoint 要素を ProxyEndpoint 構成に追加します。ProxyEndpoint 構成の例を次に示します。
<ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request> <Step> <Name>my-set-integration-request-policy</Name> </Step> </Request> </PreFlow> <Flows/> <PostFlow name="PostFlow"/> <HTTPProxyConnection> <BasePath>/integration-endpoint-test</BasePath> <Properties/> </HTTPProxyConnection> <RouteRule name="default"> <IntegrationEndpoint>my-int-endpoint</IntegrationEndpoint> </RouteRule> </ProxyEndpoint>
この ProxyEndpoint 構成の例では、Apigee は次のタスクを行います。
- PreFlow で、
my-set-integration-request-policy
という名前のポリシーを実行します。これにより、統合リクエスト オブジェクトと統合フロー変数が設定されます。 RouteRule
で指定されているように、my-int-endpoint
をターゲット エンドポイントとして使用します。my-set-integration-request-policy
によって作成された統合リクエスト オブジェクトを読み取ります。- SetIntegrationRequest ポリシーで設定されたリクエスト オブジェクトとフロー変数を使用して、リクエストを Apigee Integration Platform に送信します。
- 統合のレスポンスをレスポンス メッセージに保存します。
<IntegrationEndpoint>
宣言を含む XML ファイルは APIGEE_BUNDLE_DIRECTORY/apiproxy/integration-endpoints/
ディレクトリにありますDevelop > API Proxies > CREATE NEW > Integration target
オプションを使用して API プロキシを作成すると、Apigee は宣言を /apiproxy/integration-endpoints/default.xml
ファイルに保存します。UI から統合エンドポイント XML を作成する場合は、XML ファイルにカスタム名を指定できます。
次の例では、XML ファイル内の <IntegrationEndpoint>
要素の宣言を示します。
<IntegrationEndpoint name="my-int-endpoint"> <AsyncExecution>false</AsyncExecution> </IntegrationEndpoint>
IntegrationEndpoint の構成要素
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
IntegrationEndpoint |
|||
name |
IntegrationEndpoint の名前。名前に使用できる文字は A-Za-z0-9._\-$ % のみです。 |
なし | ○ |
AsyncExecution |
統合を同期モードと非同期モードのどちらで実行するかを指定するブール値。詳しくは、同期的実行と非同期的実行をご覧ください。 | false | × |
同期実行と非同期実行
この統合は、同期モードまたは非同期モードのいずれかで実行されるように構成できます。同期実行モードと非同期実行モードの相違については、<AsyncExecution> をご覧ください。
</IntegrationEndpoint>
内で <AsyncExecution>
要素を使用して、同期的実行または非同期的実行を指定します。<AsyncExecution>
を true
に設定すると、統合は非同期的に実行されます。false
に設定すると、統合は同期的に実行されます。
次の例では、AsyncExecution
を true
に設定しています。
<IntegrationEndpoint name="my-int-endpoint"> <AsyncExecution>true</AsyncExecution> </IntegrationEndpoint>
ポリシー
API プロキシの /policies
ディレクトリには、API プロキシのフローに接続できるすべてのポリシーが含まれています。
ポリシー構成要素
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
Policy |
|||
name |
ポリシーの内部名。名前に使用できる文字は 必要に応じて、 |
なし | ○ |
enabled |
ポリシーを適用するには、 ポリシーを無効にするには、 |
true |
× |
continueOnError |
ポリシーが失敗したときにエラーを返す場合は、 ポリシーが失敗した後もフローの実行を続行する場合は、 |
false |
× |
async |
API プロキシで非同期の動作を使用するには、JavaScript オブジェクト モデルをご覧ください。 |
false |
× |
ポリシー接続
次の図は、API プロキシフローの実行順序を示しています。
上記のフローの説明:
ポリシーは Flow への処理ステップとして接続されます。ポリシーの名前は、処理ステップとして実施されるポリシーを参照するために使用されます。ポリシー接続の形式は次のとおりです。
<Step><Name>MyPolicy</Name></Step>
ポリシーは Flow に接続されている順序で適用されます。次に例を示します。
<Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step>
ポリシー接続の構成要素
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
Step |
|||
Name |
このステップ定義によって実行されるポリシーの名前。 | なし | ○ |
Condition |
ポリシーが適用されているかどうかを判断する条件文。ポリシーに関連する条件がある場合、条件文が true と評価されればポリシーが実行されます。 | なし | × |
フロー
ProxyEndpoint と TargetEndpoint は、リクエストとレスポンスのメッセージを処理するためのパイプラインを定義します。処理パイプラインは、リクエスト フローとレスポンス フローで構成されます。各リクエスト フローとレスポンス フローは PreFlow、1 つ以上のオプションの条件または名前付フローと PostFlow に細分化されます。
- PreFlow: 常に実行します。条件付きフローの前に実行されます。
- PostFlow: 常に実行されます。条件付きフローの後に実行されます。
さらに、プロキシ エンドポイントに PostClientFlow を追加できます。このフローは、レスポンスが要求元のクライアント アプリに返された後に実行されます。このフローには、MessageLogging ポリシーのみを接続できます。PostClientFlow により、API プロキシのレイテンシが短縮されます。このフローでは、レスポンスがクライアントに返されるまで計算されないロギングの情報(client.sent.start.timestamp
や client.sent.end.timestamp
など)を使用できます。このフローは主に、レスポンス メッセージの開始と終了のタイムスタンプの間隔を測定するために使用されます。
Message Logging ポリシーが接続されている PostClientFlow の例を次に示します。
... <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <PostClientFlow> <Request/> <Response> <Step> <Name>Message-Logging-1</Name> </Step> </Response> </PostClientFlow> ...
API プロキシ処理パイプラインは、次の順序でフローを実行します。
リクエスト パイプライン:
- プロキシ リクエスト PreFlow
- プロキシ リクエストの条件付きフロー(オプション)
- プロキシ リクエスト PostFlow
- ターゲット リクエスト PreFlow
- ターゲット リクエストの条件付きフロー(オプション)
- ターゲット リクエスト PostFlow
レスポンス パイプライン:
- ターゲット レスポンス PreFlow
- ターゲット レスポンスの条件付きフロー(オプション)
- ターゲット レスポンス PostFlow
- プロキシ レスポンス PreFlow
- プロキシ レスポンスの条件付きフロー(オプション)
- プロキシ レスポンス PostFlow
- PostClientFlow レスポンス(オプション)
ProxyEndpoint または TargetEndpoint の構成では、ポリシー接続を持つフローのみを構成する必要があります。PreFlow または PostFlow 処理中にポリシーを適用する必要がある場合は、PreFlow と PostFlow を ProxyEndpoint または TargetEndpoint 構成でのみ指定します。
条件フローとは対照的に、PreFlow 要素と PostFlow 要素の順序は重要ではありません。API プロキシは、エンドポイント構成のどこに表示されるかにかかわらず、パイプラインの適切なポイントでそれぞれを常に実行します。
条件フロー
プロキシ エンドポイントとターゲット エンドポイントは、条件フロー(または名前付きフロー)を無制限にサポートします。
API プロキシでは、条件フローに指定されている条件がテストされます。条件が満たされると、条件フローの処理ステップが API プロキシによって実行されます。条件が満たされない場合は、条件付きフローのその処理ステップは省略されます。条件付きフローは API プロキシで定義されている順に評価され、条件が最初に満たされたフローが実行されます。
条件付きフローを定義することにより、次に基づいて、API プロキシに処理ステップを適用できます。
- リクエスト URI
- HTTP 動詞(
GET
/PUT
/POST
/DELETE
) - クエリ パラメータ、ヘッダー、フォーム パラメータの値
- その他多くのタイプの条件
たとえば、次の条件付きフローは、リクエスト リソースのパスが /accesstoken
の場合にのみ実行されるように指定します。パスが /accesstoken
のインバウンド リクエストの場合、このフローは、フローに追加されているすべてのポリシーとともに実行されます。リクエストパスに接尾辞 /accesstoken
が含まれていない場合、フローは実行されません(ただし、別の条件きフローが実行される可能性があります)。
<Flows> <Flow name="TokenEndpoint"> <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> </Flow> </Flows>
フロー構成要素
名前 | 説明 | デフォルト | 必須かどうか |
---|---|---|---|
Flow |
プロキシ エンドポイントまたはターゲット エンドポイントによって定義されたリクエストまたはレスポンス処理パイプライン | ||
Name |
フローの一意の名前。 | なし | ○ |
Condition |
true または false を評価するための変数を評価する条件文。事前定義済みの PreFlow と PostFlow タイプ以外のすべてのフローは、実行条件を定義する必要があります。ただし、一連のフローの末尾に条件のない単一のフローを含めると、そのフローは、一連のフローの末尾に配置された「Else」ステートメントとして機能します。 | なし | ○ |
Request |
リクエスト メッセージ処理に関連するパイプライン | なし | × |
Response |
レスポンス メッセージ処理に関連するパイプライン | なし | × |
ステップ処理
条件フローの順序づけは、Apigee によって適用されます。条件フローは上から下に実行されます。条件が true
と評価される最初の条件付きフローが実行され、1 つの条件付きフローのみが実行されます。
たとえば、次のフロー構成では、パス接尾辞 /first
または /second
を含まないインバウンド リクエストの場合、ThirdFlow
が実行され、Return404
というポリシーが適用されます。
<Flows> <Flow name="FirstFlow"> <Condition>proxy.pathsuffix MatchesPath "/first"</Condition> <Request> <Step><Name>FirstPolicy</Name></Step> </Request> </Flow> <Flow name="SecondFlow"> <Condition>proxy.pathsuffix MatchesPath "/second"</Condition> <Request> <Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step> </Request> </Flow> <Flow name="ThirdFlow"> <Request> <Step><Name>Return404</Name></Step> </Request> </Flow> </Flows>
リソース
「リソース」(API プロキシで使用するリソース ファイル)は、ポリシーを使用してフローに接続できるスクリプト、コード、XSL 変換です。これらは、Apigee UI の API プロキシ エディタの [Scripts] セクションに表示されます。
サポートされるリソースタイプについては、リソースの管理をご覧ください。
リソースは、API プロキシ、環境、組織のいずれかに保存できます。いずれの場合も、リソースはポリシー内で名前によって参照されます。Apigee は、API プロキシから環境、組織レベルに移動して名前を解決します。
組織レベルで格納されたリソースは、どの環境のポリシーでも参照できます。環境レベルで格納されたリソースは、その環境のポリシーによって参照されます。API プロキシレベルで格納されたリソースは、その API プロキシ内のポリシーによってのみ参照できます。