4.4. カスタム 3scale API Management APIcast ポリシー
APIcast の動作を変更するためのカスタムポリシーを設定します。まず、カスタムポリシーを含む APIcast ポリシーを設定するポリシーチェーンを定義し、続いてポリシーチェーンを APIcast に追加します。
Red Hat 3scale でカスタムポリシーを追加することは可能ですが、そのカスタムポリシーはサポートの対象ではありません。
APIcast のカスタムポリシーは、3scale デプロイメントの設定によって異なります。
- インストールした OpenShift およびコンテナー環境の APIcast 等の Self-managed APIcast デプロイメントに、カスタムポリシーを追加します。
- カスタムポリシーを Hosted APIcast に追加することはできません。
決して、実稼働環境のゲートウェイで直接ポリシーを変更しないでください。変更を必ずテストしてください。
4.4.1. 3scale API Management APIcast デプロイメントのカスタムポリシーについて
カスタム APIcast ポリシーを新規に作成することや、標準ポリシーを変更することができます。
カスタムポリシーを作成するには、以下の点を理解している必要があります。
- ポリシーは Lua で記述される。
- ポリシーは適切なファイルディレクトリーに保管しなければならない。
- ポリシーチェーン内での設定場所により、ポリシーの動作が異なる。
- カスタムポリシーを追加するインターフェイスは完全にサポートされているが、カスタムポリシー自体はサポートされていない。
3scale API Management インスタンスにカスタムポリシーを追加するには、3scale API Management Operator を使用したカスタムポリシーの挿入 を参照してください。
4.4.2. 別の OpenShift Container Platform 上の 3scale API Management へのカスタムポリシーの追加
カスタムポリシーを OpenShift Container Platform (OCP) 上の APIcast に追加することができます。そのためには、ご自分のカスタムポリシーが含まれる APIcast イメージを 統合 OpenShift Container Platform レジストリー から取得します。
手順
- 3scale API Management Operator を使用してカスタムポリシーを挿入 します。
- APIcast ゲートウェイをメインの OpenShift クラスターにデプロイしていない場合には、メインの OpenShift クラスター上の内部レジストリーへの アクセスを確立します。
- 3scale 2.15 APIcast OpenShift テンプレートを ダウンロードします。
テンプレートを変更するには、デフォルトの
image
ディレクトリーを内部レジストリーの完全なイメージ名に置き換えます。image: <registry>/<project>/amp-apicast:latest
カスタマイズしたイメージを指定し、OpenShift テンプレートを使用して APIcast をデプロイします。
$ oc new-app -f customizedApicast.yml
カスタムポリシーが APIcast に追加されて新しいイメージがビルドされ、そのイメージを使用して APIcast がデプロイされると、管理ポータルではそれらのポリシーが利用可能なポリシーとして自動的に表示されます。既存のサービスはこの新しいポリシーを利用可能なポリシーリストで認識できるので、任意のポリシーチェーンで使用することができます。
カスタムポリシーがイメージから削除され、APIcast が再起動されると、そのポリシーはリスト上で利用可能なポリシーとは表示されなくなるので、ポリシーチェーンに追加することができなくなります。
4.4.3. 3scale API Management カスタムポリシーへの外部 Lua 依存関係の追加
外部の Lua 依存関係をカスタムポリシーに追加して、APIcast がまだ 3scale イメージにない Lua ライブラリーを使用できるようにすることができます。
以下の手順では、レスポンスボディーを JSON から XML に変換するカスタムポリシーの例 を使用して、この作業を行う方法を説明します。カスタムポリシーの例には、Lua で書かれた xml2lua
XML パーサーが必要です。完全な例は、ビルドおよびテストを簡潔に示していますが、サンプル手順のみに従ってカスタムポリシーをデプロイすることはできません。外部 Lua 依存関係を持つカスタムポリシーをデプロイするには、この手順の手順とともに、別の OpenShift Container Platform の 3scale API Management へのカスタムポリシーの追加 の手順を実行する必要があります。
JSON to XML
カスタムポリシーは、例としてのみ提示しています。実稼働環境で使用するためのものではありません。
前提条件
- 3scale カスタムポリシー。
- 外部 Lua ライブラリーへのアクセス。
手順
カスタムポリシーが含まれるディレクトリーに、外部 Lua ライブラリーを識別するファイルを追加します。
ファイルの名前は
Roverfile
である必要があります。JSON to XML
カスタムポリシーの例では、Roverfile
の内容は以下のようになります。luarocks { group 'production' { module { 'xml2lua' }, } }
lua-rover
は、LuaRocks に関するラッパーです。lua-rover
は、依存関係の推移ロックを提供します。LuaRocks は、Lua モジュールのパッケージマネージャーです。カスタムポリシーが含まれるディレクトリーに、
lua-rover
ロックファイルを追加します。ファイルの名前は
Roverfile.lock
である必要があります。JSON to XML
カスタムポリシーの例では、Roverfile.lock
の内容は以下のようになります。xml2lua 1.5-2||productionbash-4.4
Roverfile
およびRoverfile.lock
を併用することで、APIcast または 3scale Operator が依存関係ライブラリーをフェッチできます。カスタムポリシーを定義するファイルで、Lua 依存関係を指定する行を追加します。
JSON to XML
カスタムポリシーの例では、以下の行を指定します。local xml2lua = require("xml2lua")
カスタムポリシーの構築に使用する Dockerfile で、
Roverfile
およびRoverfile.lock
をコピーし、rover install
を実行します。JSON to XML
カスタムポリシーの例では、以下の行を Dockerfile に追加します。COPY Roverfile . COPY Roverfile.lock . RUN rover install --roverfile=/opt/app-root/src/Roverfile
Dockerfile は、APIcast または 3scale Operator を使用してポリシーをビルドすることができます。
カスタムポリシーの
Makefile
で、他のカスタムポリシーと同様にbuild
ターゲットを指定します。たとえば、
build
ターゲットは以下のようになります。TARGET_IMAGE="apicast/json_to_xml:latest" # IP="http://localhost:8080" build: docker build . --build-arg IMAGE=registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.15 -t $(TARGET_IMAGE)
次のステップ
外部 Lua 依存関係を持つカスタムポリシーをデプロイする残りの手順は、他のカスタムポリシーのデプロイと同じです。つまり、イメージをリポジトリーにプッシュし、APIcast イメージをビルドしたばかりのイメージに置き換える必要があります。