4.3.4. 3scale カスタムポリシーへの外部 Lua 依存関係の追加

外部の Lua 依存関係をカスタムポリシーに追加して、APIcast がまだ 3scale イメージにない Lua ライブラリーを使用できるようにすることができます。

以下の手順では、レスポンスボディーをJSON から XML に変換するカスタムポリシーの例 を使用して、この作業を行う方法を説明します。カスタムポリシーの例には、Lua で書かれた xml2lua XML パーサーが必要です。完全な例は、ビルドおよびテストを簡潔に示していますが、サンプル手順のみに従ってカスタムポリシーをデプロイすることはできません。外部の Lua 依存関係を持つカスタムポリシーをデプロイするには、この手順と共に 別の OpenShift Container Platform 上の 3scale へのカスタムポリシーの追加 の手順を実施する必要があります。

JSON to XML カスタムポリシーは、例としてのみ提示しています。実稼働環境で使用するためのものではありません。

前提条件

  • 3scale カスタムポリシー
  • 外部 Lua ライブラリーへのアクセス

手順

  1. カスタムポリシーが含まれるディレクトリーに、外部 Lua ライブラリーを識別するファイルを追加します。

    ファイルの名前は Roverfile である必要があります。JSON to XML カスタムポリシーの例では、Roverfile の内容は以下のようになります。

    luarocks {
    	group 'production' {
    		module { 'xml2lua' },
    	}
    }

    lua-rover は、LuaRocks に関するラッパーです。lua-rover は、依存関係の推移ロックを提供します。LuaRocks は、Lua モジュールのパッケージマネージャーです。

  2. カスタムポリシーが含まれるディレクトリーに、lua-rover ロックファイルを追加します。

    ファイルの名前は Roverfile.lock である必要があります。JSON to XML カスタムポリシーの例では、Roverfile.lock の内容は以下のようになります。

    xml2lua 1.5-2||productionbash-4.4

    Roverfile および Roverfile.lock を併用することで、APIcast または 3scale operator が依存関係ライブラリーをフェッチできます。

  3. カスタムポリシーを定義するファイルで、Lua 依存関係を指定する行を追加します。JSON to XML カスタムポリシーの例では、以下の行を指定します。

    local xml2lua = require("xml2lua")
  4. カスタムポリシーの構築に使用する 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 を使用してポリシーをビルドすることができます。

  5. カスタムポリシーの 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.11 -t $(TARGET_IMAGE)

次のステップ

外部 Lua 依存関係を持つカスタムポリシーをデプロイする残りの手順は、他のカスタムポリシーのデプロイと同じです。つまり、イメージをリポジトリーにプッシュし、APIcast イメージをビルドしたばかりのイメージに置き換える必要があります。