4.3. カスタム 3scale APIcast ポリシー


APIcast の動作を変更するためのカスタムポリシーを設定します。まず、カスタムポリシーを含む APIcast ポリシーを設定するポリシーチェーンを定義し、続いてポリシーチェーンを APIcast に追加します。

注記

Red Hat 3scale でカスタムポリシーを追加することは可能ですが、そのカスタムポリシーはサポートの対象ではありません。

APIcast のカスタムポリシーは、3scale デプロイメントの設定によって異なります。

  • インストールした OpenShift およびコンテナー環境の APIcast 等の Self-managed APIcast デプロイメントに、カスタムポリシーを追加します。
  • カスタムポリシーを Hosted APIcast に追加することはできません。
警告

決して、実稼働環境のゲートウェイで直接ポリシーを変更しないでください。変更を必ずテストしてください。

4.3.1. 3scale APIcast デプロイメントのカスタムポリシーについて

カスタム APIcast ポリシーを新規に作成することや、標準ポリシーを変更することができます。

カスタムポリシーを作成するには、以下の点を理解している必要があります。

  • ポリシーは Lua で記述される。
  • ポリシーは適切なファイルディレクトリーに保管しなければならない。
  • ポリシーチェーン内での設定場所により、ポリシーの動作が異なる。
  • カスタムポリシーを追加するインターフェイスは完全にサポートされているが、カスタムポリシー自体はサポートされていない。

4.3.2. 3scale Embedded APIcast へのカスタムポリシーの追加

オンプレミスデプロイメントにカスタム APIcast ポリシーを追加するには、カスタムポリシーが含まれる OpenShift イメージをビルドし、それをデプロイメントに追加する必要があります。3scale では、サンプルリポジトリーを提供しています。このリポジトリーを、カスタムポリシーを作成してオンプレミスデプロイメントに追加するためのフレームワークとして使用することができます。

このサンプルリポジトリーには、カスタムポリシー用の正しいディレクトリー構造に加えて、イメージストリームを作成するテンプレート、および作成するカスタムポリシーが含まれる新しい APIcast OpenShift イメージをビルドするための BuildConfigs が含まれています。

警告

apicast-custom-policies をビルドすると、ビルドプロセスは新しいイメージを amp-apicast:latest タグにプッシュします。このイメージストリームでイメージが変更されると、デフォルトでは apicast-staging および apicast-production タグの両方が自動的に新しいデプロイメントを開始するように設定されています。ステージング環境または実稼働環境のサービスが中断されるのを避けるためには、Automatically start a new deployment when the image changesチェックボックスの選択を解除して、自動デプロイメントを無効にします。あるいは、実稼働環境用に別のイメージストリームタグ (例: amp-apicast:production) を設定します。

手順

  1. Creating a registry service accountで作成したクレデンシャルを使用して、docker-registry シークレットを作成します。その際に、以下の点に留意してください。

    • your-registry-service-account-username12345678|username のフォーマットで作成したユーザー名に置き換えてください。
    • your-registry-service-account-passwordToken Information タブでユーザー名の下に表示されるパスワードの文字列に置き換えてください。
    • イメージストリームが存在し registry.redhat.io を使用するすべての新規 namespace について、docker-registry シークレットを作成します。

      以下のコマンドを実行して docker-registry シークレットを作成します。

      oc create secret docker-registry threescale-registry-auth \
        --docker-server=registry.redhat.io \
        --docker-username="your-registry-service-account-username" \
        --docker-password="your-registry-service-account-password"
  2. ポリシーの例が含まれる公開リポジトリー をフォークするか、そのコンテンツが含まれるプライベートリポジトリーを作成します。OpenShift がイメージをビルドするには、Git リポジトリーでカスタムポリシーのコードが必要です。プライベート Git リポジトリーを使用するには、OpenShift でシークレットを設定する必要がある点に注意してください。
  3. リポジトリーをローカルにクローンし、ポリシーの実装を追加し、変更をご自分の Git リポジトリーにプッシュします。
  4. openshift.yml テンプレートを更新します。具体的には、以下のパラメーターを変更します。

    1. spec.source.git.uri: https://github.com/3scale/apicast-example-policy.git (ポリシーの BuildConfig): ご自分の Git リポジトリーの場所に変更します。
    2. spec.source.images[0].paths.sourcePath: /opt/app-root/policies/example (カスタムポリシーの BuildConfig): example をリポジトリーの policies ディレクトリーに追加したカスタムポリシーの名前に変更します。
    3. オプションで、OpenShift オブジェクト名およびイメージタグを更新します。ただし、変更の一貫性が維持されるようにする必要があります。例: apicast-example-policy BuildConfig が apicast-policy:example イメージをビルドおよびプッシュし、それを apicast-custom-policies BuildConfig がソースとして使用する。これによりダグの一貫性が維持されます。
  5. 以下のコマンドを実行して OpenShift オブジェクトを作成します。

    oc new-app -f openshift.yml --param AMP_RELEASE=2.13
  6. ビルドが自動的に開始されない場合には、以下の 2 つのコマンドを実行します。apicast-example-policy を変更している場合には、ご自分の BuildConfig 名に置き換えます (例: apicast-<name>-policy)。最初のコマンドが完了するのを待ってから、2 番目のコマンドを実行してください。

    oc start-build apicast-example-policy
    oc start-build apicast-custom-policies

    Embedded APIcast のイメージに amp-apicast:latest イメージストリームの変更を追跡するトリガーがある場合には、APIcast の新しいデプロイメントが開始されます。apicast-staging が再開されたら Integration > Policies の順に移動し、Add Policy ボタンをクリックしてご自分のカスタムポリシーがリストに表示されるのを確認します。カスタムポリシーを選択して設定したら、Update Policy Chain をクリックし、カスタムポリシーをステージング APIcast で動作状態にします。

4.3.3. 別の OpenShift Container Platform 上の 3scale へのカスタムポリシーの追加

カスタムポリシーを OpenShift Container Platform (OCP) 上の APIcast に追加することができます。そのためには、ご自分のカスタムポリシーが含まれる APIcast イメージを 統合 OpenShift Container Platform レジストリー から取得します。

手順

  1. Embedded APIcast にポリシーを追加します
  2. APIcast ゲートウェイをメインの OpenShift クラスターにデプロイしていない場合には、メインの OpenShift クラスター上の内部レジストリーへの アクセスを確立します
  3. 3scale 2.13 APIcast OpenShift テンプレートを ダウンロードします
  4. テンプレートを変更するには、デフォルトの image ディレクトリーを内部レジストリーの完全なイメージ名に置き換えます。

    image: <registry>/<project>/amp-apicast:latest
  5. カスタマイズしたイメージを指定し、OpenShift テンプレートを使用して APIcast をデプロイします

    oc new-app -f customizedApicast.yml
注記

カスタムポリシーが APIcast に追加されて新しいイメージがビルドされ、そのイメージを使用して APIcast がデプロイされると、管理ポータルではそれらのポリシーが利用可能なポリシーとして自動的に表示されます。既存のサービスはこの新しいポリシーを利用可能なポリシーリストで認識できるので、任意のポリシーチェーンで使用することができます。

カスタムポリシーがイメージから削除され、APIcast が再起動されると、そのポリシーはリスト上で利用可能なポリシーとは表示されなくなるので、ポリシーチェーンに追加することができなくなります。

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.13 -t $(TARGET_IMAGE)

次のステップ

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.