PDK デバッグプレイグラウンドでのカスタムポリシーのデバッグ

ポリシーの機能をテストできるように、Flex Gateway ポリシー開発キット (PDK) は ​<root-directory>/playground/config​ ディレクトリに設定済みの API インスタンスを用意しています。

PDK デバッグプレイグラウンドは、Docker コンテナのローカルモードで実行されている Flex Gateway のみをサポートします。接続モードで動作する Flex Gateway や別のプラットフォームにポリシーをデプロイする場合でも、まず Docker コンテナのローカルモードで実行されている Flex Gateway を使用して PDK でポリシーをテストしてください。

ポリシーの開発とテストのみが目的であれば、Windows の Docker で Flex Gateway をローカルモードで実行することもできます。ただし、Flex Gateway は本番環境では Windows をサポートしていません。

ポリシーをテストするには、次のタスクを実行します。

始める前に

次の準備が整っていることを確認します。

ローカルモードでの Flex Gateway インスタンスの登録

make run​ コマンドを使用してカスタムポリシーのデバッグを開始するには、ローカルモードで Flex Gateway を登録します。

run​ コマンドが動作するためには、​<root-directory>/playground/config​ ディレクトリに Flex Gateway の ​registration.yaml​ ファイルが存在する必要があります。このディレクトリで登録コマンドを実行してこのファイルを作成するか、または以前に登録してある Flex Gateway の ​registration.yaml​ ファイルをこのディレクトリに移動します。

make run​ コマンドは Docker コンテナのローカルモードで動作する Flex Gateway のみをサポートします。Flex Gateway の登録については、以下を参照してください。

登録コマンドのみを実行してください。Docker の開始コマンドは、​make run​ コマンドがこのステップを完了するため、実行しないでください。

ポリシーをテストするデバイスごとに異なる登録ファイルを作成してください。

登録ファイルはリモートリポジトリへの保存では無視され、プロジェクトディレクトリのルートにある ​.gitignore​ ファイルにリストされます。

ポリシーの設定

policy-pdk-create-schema-definition.adocで設定した ​definition/gcl.yaml​ ファイルにリストされている設定内容によっては、ポリシーをローカルで実行する前にいくつかのパラメーターを設定する必要があります。

たとえば、​gcl.yaml​ ファイルが次のようになっている場合:

apiVersion: gateway.mulesoft.com.v1alpha1
kind: Extension
metadata:
  labels:
    title: my-custom-policy
    category: Security
spec:
  extends:
    - name: extension-definition
  properties:
    user:
      type: string
      default: user1
    password:
      type: string
    description:
      type: string
  required:
    - user
    - password

/playground/config/api.yaml​ ファイルを設定値で更新します。

apiVersion: gateway.mulesoft.com/v1alpha1
kind: ApiInstance
metadata:
  name: ingress-http
spec:
  address: http://0.0.0.0:8081
  services:
    upstream:
      address: http://backend
      routes:
        - config:
            destinationPath: /anything/echo/
  policies:
    - policyRef:
        name: my-custom-policy
      config:
        password: 12345678

この例では、​ユーザー名​はデフォルト値の ​user1​、​パスワード​は ​12345678​ に設定され、説明は提供されません。

ポリシーの追加

テスト用の API インスタンスにポリシーを追加して、他のポリシーと一緒にカスタムポリシーの動作をテストすることもできます。

ただし、開発中のポリシーを最初に指定する必要があります。例:

  policies:
    - policyRef:
        name: my-custom-policy
      config:
        password: 12345678
    - policyRef:
        name: additional-policy
      config:

PDK によるポリシーのデプロイ

これまでのステップを完了したら、ポリシーのルートディレクトリから ​make run​ コマンドを実行して、ポリシーをデプロイします。

make run

このコマンドは、​<root-directory>/playground/docker-compose.yaml​ ファイルで 2 つの Docker コンテナを開始します。

  • Local-flex​: カスタムポリシーを実行する Flex Gateway インスタンス Docker コンテナ。この Flex Gateway は ​localhost:8081​ への要求をリスンします。

  • Backend​: Flex Gateway インスタンスのバックエンドサービスを実行する Docker コンテナ。このバックエンドサービスは、受信した要求をエコーします。

Docker コンテナを停止するには、コンテナを実行している端末から、使用しているデバイスに応じて ​Cmd+c​ または ​Ctrl+c​ を押します。

コンテナが動作を開始したら、API インスタンスへの要求を実行できます。例:

curl --location --request POST 'http://0.0.0.0:8081/some/route' \
--header 'Token: mytoken'

バックエンドのサービスは、要求のルート、ボディ、ヘッダーを含むエコー応答を、カスタムポリシーや追加ポリシーによって実行された修正とともに返します。カスタムポリシーのソースコードに含まれるすべてのログは、コンテナが実行されている端末で表示されます。

loglevel の設定

PDK のデバッグ環境のデフォルトでは、​debugloglevel​ (デバッグログレベル) が設定された状態でログが有効になっています。

loglevel​ を変更するには、​<root-directory>/playground/config/logging.yaml​ の ​logging.runtimeLogs.logLevel​ を編集します。

Flex Gateway のログ設定ファイルの編集についての詳細は、Configuring External Logs for Flex Gateway in Local Modeを参照してください。

Rust デバッガーの使用

Visual Studio Code (VS Code) には、ユニットテストを実行できる Rust デバッガーが含まれています。ポリシーが Flex Gateway にデプロイされている間は、VS Code Debugger を使用できません。API のモックを作成するには、デバッグが必要なロジックに対してユニットテストを使用する必要があります。

VS Code で Rust コードをデバッグするには、 CodeLLDB Debugger Extension​ または同じ機能の他の VS Code 拡張機能をインストールする必要があります。VS Code での Rust のデバッグについての詳細は、 「Rust in Visual Studio Code (Visual Studio Code の Rust)」​を参照してください。