デプロイメントオプション

Red Hat 3scale API Management 2.4

APIcast API Gateway を OpenShift にネイティブにデプロイするか、Docker を使用してデプロイします。

概要

このガイドでは、Red Hat 3scale API Management 2.4 のデプロイオプションについて説明します。

第1章 APIcast の概要

APIcast は、内部および外部の API サービスを 3scale API Management Platform と統合するのに使用される NGINX ベースの API ゲートウェイです。APIcast は、ラウンドロビン形式で負荷分散を行います。本章では、デプロイメントオプション、提供される環境、および使用を開始する方法について詳しく説明します。

APIcast の最新リリースおよびサポートされるバージョンに関する情報は、Red Hat 3scale API Management Supported Configurations および Red Hat 3scale API Management - Component Details の記事を参照してください。

1.1. 前提条件

APIcast はスタンドアロンの API ゲートウェイではなく、3scale API Manager への接続が必要です。

1.2. デプロイメントのオプション

ホスト型または自己管理型の APIcast を使用できます。どちらの場合も、残りの 3scale API 管理プラットフォームへの接続が必要です。

  • APIcast built-in: 3scale API Management インストールにはデフォルトで 2 つの APIcast ゲートウェイ (ステージングと実稼働) が含まれています。これらのゲートウェイは事前設定されているため、そのまま使用することができます。
  • Self-managed APIcast: APIcast を好きな場所にデプロイできます。APIcast のデプロイメントにおける推奨オプションの一部は以下のとおりです。

    • Docker コンテナー環境: そのまま使用できる Docker 形式のコンテナーイメージをダウンロードします。これには、Docker 形式のコンテナーで APIcast を実行するための依存関係がすべて含まれています。
    • OpenShift: APIcast を サポート対象バージョン の OpenShift で実行します。セルフマネージド APIcast は、3scale API Management オンプレミスインストールまたは 3scale がホストするアカウントの両方に接続できます。

1.3. 環境

デフォルトでは、3scale アカウントを作成すると、2 つの異なる環境の built-in APIcast が提供されます。

  • ステージング: API インテグレーションの設定中またはテスト中にのみ使用することが目的です。設定が想定どおりに動作していることが確認されたら、実稼働環境にデプロイすることができます。OpenShift テンプレートは、設定が各 API 呼び出し (APICAST_CONFIGURATION_LOADER: lazyAPICAST_CONFIGURATION_CACHE: 0) で再読み込みされるよう、ステージング APIcast のパラメーターを設定します。APIcast の設定変更を即座にテストするのに便利です。
  • 実稼働: 実稼働向けの環境です。APICAST_CONFIGURATION_LOADER: boot および APICAST_CONFIGURATION_CACHE: 300 パラメーターは、OpenShift テンプレートの実稼働 APIcast のために設定されています。そのため、APIcast の開始時に設定が完全に読み込まれ、300 秒 (5 分) 間キャッシュに保存されます。設定は 5 分後に再読み込みされます。これにより、設定を実稼働環境にプロモートすると、APIcast の新しいデプロイメントを実行しない限り、設定の適用に 5 分程度かかる場合があります。

1.4. インテグレーション設定

[your_API_name] > Integration > Configuration の順に移動します。

統合オプションは、統合ページの右上に表示されます。デフォルトのデプロイメントオプションは APIcast hosted で、デフォルトの認証モードは API キーです。右上隅の edit integration settings をクリックすると、設定を変更することができます。OAuth 2.0 認証は、セルフマネージドデプロイメントでのみ使用できることに注意してください。

1.5. サービスの設定

Private Base URL フィールドに API バックエンドのエンドポイントホストを指定して、API バックエンドを宣言する必要があります。すべての認証、承認、流量制御、および統計が処理された後、APIcast はすべてのトラフィックを API バックエンドにリダイレクトします。

通常、API のプライベートベース URL は、管理するドメイン (yourdomain.com) 上で https://api-backend.yourdomain.com:443 のようになります。たとえば、Twitter API と統合する場合、プライベートベース URL は https://api.twitter.com/ になります。この例では、3scale によってホストされる Echo API を使用します。この API は、すべてのパスを許可し、リクエストに関する情報 (パス、リクエストパラメーター、ヘッダーなど) を返すシンプルな API です。このプライベートベース URL は https://echo-api.3scale.net:443 になります。

プライベートベース URL

プライベート (アンマネージド) API が動作することをテストします。たとえば、Echo API の場合には curl コマンドを使用して以下の呼び出しを行うことができます。

curl "https://echo-api.3scale.net:443"

以下のレスポンスが返されます。

{
    "method": "GET",
    "path": "/",
    "args": "",
    "body": "",
    "headers": {
      "HTTP_VERSION": "HTTP/1.1",
      "HTTP_HOST": "echo-api.3scale.net",
      "HTTP_ACCEPT": "*/*",
      "HTTP_USER_AGENT": "curl/7.51.0",
      "HTTP_X_FORWARDED_FOR": "2.139.235.79, 10.0.103.58",
      "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net",
      "HTTP_X_FORWARDED_PORT": "443",
      "HTTP_X_FORWARDED_PROTO": "https",
      "HTTP_FORWARDED": "for=10.0.103.58;host=echo-api.3scale.net;proto=https"
    },
    "uuid": "ee626b70-e928-4cb1-a1a4-348b8e361733"
  }

API が機能していることを確認したら、ホストされたステージング環境のテストコールを設定する必要があります。API に存在するパスを API test GET request フィールドに入力します (例: /v1/word/good.json)。

ページ右下の Update & test in Staging Environment ボタンをクリックして、設定を保存します。これにより、APIcast の設定が 3scale Hosted ステージング環境にデプロイされます。すべてが正しく設定されていれば、左側の縦線が緑色に変わります。

1.5.1. 認証の設定

self-managed デプロイメントオプションの 1 つを使用してる場合 は、GUI から設定を保存し、Staging Public Base URL フィールドまたは Production Public Base URL フィールドに正しいホストを追加して、デプロイされた API ゲートウェイをポイントするようにします。運用ゲートウェイへの呼び出しを行う前に、Promote v.x to Production ボタンをクリックします。

ステージングセクションの最後にある curl コマンドの例を確認し、コンソールからコマンドを実行します。

curl "https://XXX.staging.apicast.io:443/v1/word/good.json?user_key=YOUR_USER_KEY"
注記

上記と同じレスポンスを取得するはずですが、今回はリクエストが 3scale Hosted APIcast インスタンスを通ります。注記: サービスの有効な資格情報を持つアプリケーションが必要です。3scale の登録時に作成されたデフォルトの API サービスを使用している場合はアプリケーションがすでにあるはずです。テストの curl に USER_KEY または APP_IDAPP_KEY の値が出力された場合は、最初にこのサービスのアプリケーションを作成する必要があります。

これで API が 3scale と統合されました。

3scale Hosted APIcast ゲートウェイはクレデンシャルを検証し、アプリケーションのアプリケーションプランで定義した流量制御を適用します。クレデンシャルがない、あるいは無効なクレデンシャルで呼び出しを行うと、エラーメッセージが表示されます。メッセージのコードとテキストは設定できます。詳細については、高度な APIcast 設定 の記事を参照してください。

1.6. マッピングルール

マッピングルールでは、API に対するリクエストに応じてどのメトリクス (およびメソッド) を報告するかを定義します。

デフォルトでは、非常に単純なマッピングルールから開始します。

Mapping Rules

このルールは、/で始まるすべての GET リクエストが、メトリクス hits の値を 1 つ増やすという意味です。このマッピングルールは、API へのすべてのリクエストに一致します。一般的すぎるため、このルールを変更する可能性が高いです。

APIcast は以下のようにパラメーターを取得します。

  • GET メソッドの場合: APIcast はクエリー文字列からパラメーターをフェッチします。
  • これらのメソッド (POST、DELETE、PUT) の場合: APIcast は本体からパラメーターをフェッチします。

パラメーターには名前付きワイルドカードを含めることもできます。ワイルドカードは、スラッシュとスラッシュの間またはスラッシュとピリオドの間に使用することができます。

以下の例は、Echo API のルールです。

Hello World Mapping Rules

マッピングルールには、クエリー文字列または本文にパラメーターを含めることもできます: /{word}?value={value}

ルールのマッチングは接頭辞によって行われ、任意に複雑にすることができます (表記は Swagger および ActiveDocs の仕様に従います)。

  • リテラル文字列のパスで一致を行うことができます: /hello
  • マッピングルールには名前付きワイルドカードを含めることができます: /{word}

このルールは、プレースホルダー {word} で定義する任意の文字にマッチします。たとえば、/morning のようなリクエストがルールにマッチします。

ワイルドカードは、スラッシュとスラッシュの間またはスラッシュとピリオドの間に使用することができます。

  • マッピングルールには、クエリー文字列または本文にパラメーターを含めることもできます: /{word}?value={value}

APIcast は、GET の場合はクエリー文字列から、POST、DELETE、PUT の場合は本体からパラメーターを取得しようとします。

パラメーターには名前付きワイルドカードを含めることもできます。

デフォルトでは、指定したソート法に従ってすべてのマッピングルールが順番に評価されます。上の図の例にルール /v1 を追加すると、パスが /v1/word/v1/sentence かを考慮して、パスが/v1 で始まるリクエストに一致します。

1.7. マッピングルールのワークフロー

マッピングルールを定義するワークフローは次のとおりです。

  • Add Mapping Rule ボタンをクリックして、新しいルールを追加できます。次に、HTTP メソッド、パターン、メトリック (またはメソッド) を選択し、最後にその増分を選択します。完了したら、Update & Test Staging Configuration をクリックして変更を適用します。
  • 誤って変更されないように、次回のリロード時にマッピングルールはグレーアウト表示されます。
  • 既存のマッピングルールを編集するには、右側にある鉛筆アイコンをクリックして、まずそのルールを有効にする必要があります。
  • ルールを削除するには、ゴミ箱アイコンをクリックします。
  • Update & Test Staging Configuration ボタンをクリックすると、変更と削除が保存されます。

このワークフローに加えて、次の 2 つの機能があります。

  • マッピングルールを並べ替えるには、Last? 列の各マッピングルールのチェックボックスの横にある緑色の矢印を使用してドラッグ&ドロップします。指定した並べ替えはデータベースに保存され、Update & test in Staging Environment ボタンをクリックした後、プロキシー設定仕様の内容に保持されます。
  • Last? チェックボックスをオンにして、他のマッピングルールの処理を停止します。たとえば、API Integration Settings で以下のマッピングルールを定義し、それぞれのルールに異なるメトリクスが関連付けられている場合。
(get) /path/to/example/search
(get) /path/to/example/{id}

(get) /path/to/example/search の呼び出しを行う場合、残りのマッピングルールを処理してルールがマッチした際にそのメトリクスのカウントを増やすのを停止します。

より高度な設定オプションについては、APIcast の高度な設定 のチュートリアルを確認してください。

1.8. Host Header

このオプションは、Host ヘッダーが指定した値にマッチしない限りトラフィックを拒否する API バックエンドにのみ必要です。このような場合には、Host がゲートウェイの 1 つなので、ゲートウェイが API バックエンドの前にあると問題が生じます (例: xxx-yyy.staging.apicast.io)。

この問題を避けるには、AUTHENTICATION SETTINGS の Host Header フィールドで API バックエンドが想定するホストを定義します。これにより、Hosted APIcast インスタンスはホストを書き換えます。

Host Rewrite

1.9. 実稼働環境用のデプロイメント

API インテグレーションを設定しステージング環境で動作することを確認したら、実稼働環境用 APIcast デプロイメントのいずれかに進むことができます。この記事の冒頭にある デプロイメントオプション を参照してください。

Integration ページの最後に Production セクションがあります。ここに、2 つのフィールド Private Base URL (Staging セクションで設定したものと同じ) および Public Base URL があります。

1.10. 公開ベース URL

公開ベース URL は、3scale により保護されたご自分の API に開発者がリクエストを行うのに使用する URL です。これは、ご自分の APIcast インスタンスの URL になります。

self-managed デプロイメントオプションのいずれかを使用している場合には、それぞれの環境 (ステージングおよび実稼働環境) について、ご自分の管理するドメインに属する専用の公開ベース URL を選択することができます。この URL はご自分の API バックエンドの URL とは別で、たとえば https://api.yourdomain.com:443 のようになります。ここで、yourdomain.com はご自分のドメインです。公開ベース URL を設定したら必ず変更を保存し、必要に応じてステージング環境の変更を実稼働環境にプロモートしてください。

APIcast は Public Base URL で指定したホスト名に対する呼び出ししか受け付けない点に注意してください。たとえば、上記で使用した Echo API の例で、パブリックベース URL として https://echo-api.3scale.net:443 を指定すると、正しい呼び出しは次のようになります。

curl "https://echo-api.3scale.net:443/hello?user_key=YOUR_USER_KEY"

まだ API 用の公開ドメインがない場合には、リクエストに APIcast IP を使用することもできますが、それでも Public Base URL フィールドには値を指定する必要があります (実際のドメインではなくても)。その場合には Host ヘッダーでホストを指定する必要があります。以下に例を示します。

curl "http://192.0.2.12:80/hello?user_key=YOUR_USER_KEY" -H "Host: echo-api.3scale.net"

ローカルマシンにデプロイしている場合には、ドメインに「localhost」を使用することもできます。この場合には公開ベース URL は http://localhost:80 のようになり、以下のようにリクエストを行うことができます。

curl "http://localhost:80/hello?user_key=YOUR_USER_KEY"

API サービスが複数ある場合には、それぞれのサービスについてこの公開ベース URL を適切に設定する必要があります。APIcast はホスト名に基づきリクエストをルーティングします。

1.11. API バックエンドの保護

APIcast が実稼動環境で動作するようになったら、クレデンシャルが提供されない API バックエンドへの直接アクセスを制限することが望まれる場合があります。そのための最も簡単な方法は、APIcast が設定するシークレットトークンを使用することです。シークレットトークンの設定方法については、「高度な APIcast 設定」を参照してください。

1.12. プライベート API を扱う APIcast の使用

APIcast を使用すると、インターネットから公開されていない API を保護できます。要件は次のとおりです。

  • 展開オプションとして Self-managed APIcast を使用する必要があります。
  • 一般のインターネットから APIcast へのアクセスが可能で、APIcast が 3scale Service Management API に発信の呼び出しを行うことができる。
  • APIcast が API バックエンドにアクセスすることができる。

この場合には、Private Base URL フィールドに API の内部ドメイン名または IP アドレスを設定し、他の手順は通常どおりに実施することができます。ただし、ステージング環境のメリットが得られない点およびテストコールが成功しない点に注意して下さい。ステージング用 APIcast インスタンスは 3scale がホストし、プライベート API のバックエンドにはアクセスすることができないためです。しかし、APIcast を実稼働環境にデプロイして正しく設定すれば、APIcast は想定どおりに機能します。

1.13. APIcast への OpenTracing の設定

OpenTracing は API の仕様でマイクロサービスのプロファイリングおよびモニタリングに使用されるメソッドです。バージョン 3.3 以降の APIcast には、OpenTracing ライブラリーおよび Jaeger Tracer ライブラリー が含まれています。

1.13.1. 前提条件

APIcast デプロイメントに分散トレーシング機能を追加するには、以下の前提条件が満たされている必要があります。

  • それぞれの外部リクエストに、固有のリクエスト ID がアタッチされている (通常は HTTP ヘッダー経由)。
  • それぞれのサービスがリクエスト ID を他のサービスに転送する。
  • それぞれのサービスがリクエスト ID をログに出力する。
  • それぞれのサービスがリクエストの開始/終了時刻等の補足情報を記録する。
  • ログが集約され、HTTP リクエスト ID を使用して解析する手段を提供する。

1.13.2. 手順

OpenTracing を設定するには、以下の環境変数を使用します。

  • OPENTRACING_TRACER: 使用するトレーサーの実装を定義します。現在、利用することができるのは Jaeger だけです。
  • OPENTRACING_CONFIG: 使用するトレーサーのデフォルト設定ファイルを指定します。ここ に例を示します。
  • OPENTRACING_HEADER_FORWARD: オプション。実際の OpenTracing 設定に応じて、この環境変数を設定することができます。

これらの変数に関する詳細は、APIcast の環境変数 を参照してください。

インテグレーションが適切に機能しているかどうかをテストするには、トレースが Jaeger トレースインターフェースで報告されるかどうかを確認する必要があります。

1.13.3. 補足情報

OpenTracing および Jaeger インテグレーションは、アップストリームプロジェクト (https://github.com/3scale/apicast) で公開されています。

1.13.4. OpenShift インスタンスへの Jaeger のインストール

本セクションでは、実行中の OpenShift インスタンスへの Jaeger のインストールについて説明します。

警告

Jaeger はサードパーティーコンポーネントであり、APIcast と共に使用する場合を除き 3scale はサポートを提供しません。以下の手順は参考例としてのみ提供され、実稼働環境での使用には適しません。

  1. 現在の namespace に Jaeger オールインワンをインストールします。

    oc process -f https://raw.githubusercontent.com/jaegertracing/jaeger-openshift/master/all-in-one/jaeger-all-in-one-template.yml | oc create -f -
  2. 以下の内容で Jaeger 設定ファイル jaeger_config.json を作成します。

    {
        "service_name": "apicast",
        "disabled": false,
        "sampler": {
          "type": "const",
          "param": 1
        },
        "reporter": {
          "queueSize": 100,
          "bufferFlushInterval": 10,
          "logSpans": false,
          "localAgentHostPort": "jaeger-agent:6831"
        },
        "headers": {
          "jaegerDebugHeader": "debug-id",
          "jaegerBaggageHeader": "baggage",
          "TraceContextHeaderName": "uber-trace-id",
          "traceBaggageHeaderPrefix": "testctx-"
        },
        "baggage_restrictions": {
            "denyBaggageOnInitializationFailure": false,
            "hostPort": "127.0.0.1:5778",
            "refreshInterval": 60
        }
     }
    • すべてのリクエストをサンプリングするために、sampler 定数を 1 に設定します。
    • reporter の場所およびキューサイズを設定します。
    • リクエストを追跡するのに使用する TraceContextHeaderName を含め、headers を設定します。
  3. Jaeger 設定ファイルから ConfigMap を作成し、それを APIcast にマウントします。

    oc create configmap jaeger-config --from-file=jaeger_config.json
    oc volume dc/apicast --add -m /tmp/jaeger/ --configmap-name jaeger-config
  4. 前のステップで追加した設定で、OpenTracing および Jaeger を有効にします。

    oc env deploymentConfig/apicast OPENTRACING_TRACER=jaeger OPENTRACING_CONFIG=/tmp/jaeger/jaeger_config.json
  5. Jaeger インターフェースが動作している URL を確認します。

    oc get route
    (…) jaeger-query-myproject.127.0.0.1.nip.io
  6. 前のステップで確認した URL から Jaeger インターフェースを開きます。Openshift のヘルスチェックから読み込まれているデータが表示されます。
  7. 最後のステップは、リクエストのトレースをすべて表示できるように、OpenTracing および Jaeger のサポートをバックエンド API に追加することです。この操作は、使用されるフレームワークおよび言語に応じてバックエンドごとに異なります。例として「Using OpenTracing with Jaeger to collect Application Metrics in Kubernetes」を参照してください。

Jaeger の設定は、以下を参照してください。* Jaeger on OpenShift development setup * Jaeger on OpenShift production setup * Distributed tracing on OpenShift Service Mesh を参照してください。

第2章 Docker コンテナー環境における APIcast

ここでは、3scale API ゲートウェイとして使用する準備が整っている Docker 形式のコンテナー内部に APIcast をデプロイする方法をステップごとに説明します。

2.1. 前提条件

APIcast の概要 に従って、3scale 管理ポータルで APIcast を設定する必要があります。

2.2. ステップ 1: Docker コンテナー環境のインストール

ここでは、Red Hat Enterprise Linux (RHEL) 7 に Docker コンテナー環境を設定する方法をステップごとに説明します。

Red Hat が提供する Docker 形式のコンテナーは、RHEL の Extras チャンネルの一部としてリリースされています。追加のリポジトリーを有効にするには、Subscription Manager または yum-config-manager を使用できます。詳細は、RHEL の製品ドキュメント を参照してください。

AWS EC2 インスタンスで RHEL 7 をデプロイするには、以下の手順を実行します。

  1. sudo yum repolist all ですべてのリポジトリーを一覧表示します。
  2. *-extras リポジトリーを探します。
  3. sudo yum-config-manager --enable rhui-REGION-rhel-server-extras を実行し、extras リポジトリーを有効にします。
  4. sudo yum install docker を実行し、Docker コンテナー環境のパッケージをインストールします。

他のオペレーティングシステムをお使いの場合は、以下の Docker ドキュメントを参照してください。

2.3. ステップ 2: Docker コンテナー化環境ゲートウェイを実行する

  1. Docker デーモンを開始します。

    sudo systemctl start docker.service

  2. Docker デーモンが実行されているか確認します。

    sudo systemctl status docker.service

    Red Hat レジストリーから、使用する準備ができている Docker 形式のコンテナーイメージをダウンロードします。

    sudo docker pull registry.access.redhat.com/3scale-amp24/apicast-gateway.

  3. Docker 形式のコンテナーで APIcast を実行します。

    sudo docker run --name apicast --rm -p 8080:8080 -e THREESCALE_PORTAL_ENDPOINT=https://<access_token>@<domain>-admin.3scale.net registry.access.redhat.com/3scale-amp24/apicast-gateway.

    ここで、<access_token> は 3scale Account Management API の アクセストークン に置き換えます。アクセストークンの代わりに プロバイダーキー を使用することもできます。<domain>-admin.3scale.net は 3scale 管理ポータルの URL です。

このコマンドは、「apicast」という Docker 形式のコンテナーをポート 8080 で実行し、3scale ポータルから JSON 設定ファイルを取得します。その他の設定オプションについては、APIcast の概要 ガイドを参照してください。

2.3.1. Docker コマンドオプション

docker run コマンドでは、以下のオプションを使用できます。

  • --rm: 終了時にコンテナーを自動的に削除します。
  • -d または --detach: コンテナーをバックグラウンドで実行し、コンテナー ID を出力します。このオプションを指定しないと、コンテナーはフォアグラウンドモードで実行され、CTRL+c を使用して停止することができます。デタッチモードで起動された場合、docker attach コマンド (例: docker attach apicast) を使用するとコンテナーに再アタッチすることができます。
  • -p または --publish: コンテナーのポートをホストに公開します。値の書式は <host port="">:<container port=""> とする必要があります。したがって、-p 80:8080 の場合は、コンテナーのポート 8080 をホストマシンのポート 80 にバインドします。たとえば、Management API はポート 8090 を使用するため、-p 8090:8090docker run コマンドに追加してこのポートを公開します。
  • -e または --env: 環境変数を設定します。
  • -v または --volume: ボリュームをマウントします。値は通常 <host path="">:<container path="">[:<options>] で表されます。<options> はオプションの属性で、ボリュームを読み取り専用に指定するには、:ro に設定します (デフォルトでは読み取り/書き込みモードでマウントされます)。たとえば、-v /host/path:/container/path:ro と設定します。

使用できるオプションの詳細については、Docker run reference を参照してください。

2.4. ステップ 3: APIcast のテスト

次の手順は、Docker 形式のコンテナーが独自の設定ファイルと、3scale レジストリーからの Docker 形式のイメージで実行されるようにします。呼び出しは APIcast を介してポート 8080 でテストでき、3scale アカウントから取得できる正しい認証クレデンシャルを提供できます。

テストコールは、APIcast が適切に実行されていることを確認するだけでなく、認証とレポートが正常に処理されたことも確認します。

注記

呼び出しに使用するホストが Integration ページの Public Base URL フィールドに設定されたホストと同じであるようにしてください。

2.5. ステップ 4: Docker コンテナー環境上の APIcast に関するトラブルシューティング

2.5.1. Cannot connect to the Docker daemon エラー

docker: Cannot connect to the Docker daemon.Is the docker daemon running on this host? というエラーメッセージが表示された場合には、Docker サービスが起動していない可能性があります。sudo systemctl status docker.service コマンドを実行して、Docker デーモンのステータスを確認することができます。

RHEL で Docker コンテナー環境の操作を行う場合、デフォルトでは root 権限が必要なので、このコマンドは必ず root ユーザーとして実行してください。詳細については、このドキュメント を参照してください。

2.5.2. 基本的な Docker コマンドラインインターフェースコマンド

デタッチモードでコンテナーを起動し (-d オプション)、実行中の APIcast インスタンスのログを確認する場合には、log コマンド (sudo docker logs <container>) を使用することができます。ここで、<container> はコンテナー名 (上記の例では「apicast」) またはコンテナー ID です。sudo docker ps コマンドを使用して、実行中のコンテナーならびにその ID および名前を一覧表示することができます。

コンテナーを停止するには、sudo docker stop <container> コマンドを実行します。sudo docker rm <container> コマンドを実行して、コンテナーを削除することもできます。

使用できるコマンドの詳細は、Docker コマンドのリファレンス を参照してください。

第3章 Red Hat OpenShift 上での APIcast の実行

本チュートリアルでは、Red Hat OpenShift に APIcast API ゲートウェイをデプロイする方法について説明します。

3.1. 前提条件

以下のチュートリアルの手順を行うには、APIcast の概要 に従って、まず 3scale 管理ポータルで APIcast を設定する必要があります。インテグレーション設定でデプロイメントオプションに Self-managed Gateway が選択されていることを確認してください。手順を進めるには、ステージング環境と実稼働環境の両方を設定している必要があります。

3.2. ステップ 1: OpenShift をセットアップする

OpenShift クラスターが稼働中である場合は、本手順を省略できます。稼働中でなければ、以下の手順に従ってください。

実稼働デプロイメントの場合は、OpenShift のインストール手順 に従います。

本チュートリアルでは、OpenShift クラスターは以下を使用してインストールされます。

  • Red Hat Enterprise Linux (RHEL) 7
  • Docker コンテナー環境 (v1.10.3)
  • OpenShift Origin コマンドラインインターフェース (CLI) v1.3.1

3.2.1. Docker コンテナー環境のインストール

Red Hat が提供する Docker 形式のコンテナーイメージは、RHEL の Extras チャンネルの一部としてリリースされています。追加のリポジトリーを有効にするには、Subscription Manager または yum-config-manager を使用できます。詳細は、RHEL の製品ドキュメント を参照してください。

AWS EC2 インスタンスにデプロイされた RHEL 7 では、以下の手順を使用します。

  1. すべてのリポジトリーを一覧表示します。

    sudo yum repolist all
  2. *-extras リポジトリーを探し、有効にします。

    sudo yum-config-manager --enable rhui-REGION-rhel-server-extras
  3. Docker 形式のコンテナーイメージをインストールします。

    sudo yum install docker docker-registry
  4. /etc/sysconfig/docker ファイルに以下の行を追加するか、アンコメントして、172.30.0.0/16 のセキュアでないレジストリーを追加します。

    INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'
  5. Docker サービスを開始します。

    sudo systemctl start docker

以下のコマンドを使用すると、コンテナーサービスが実行していることを確認できます。

sudo systemctl status docker

3.2.2. OpenShift クラスターを開始する

OpenShift リリースページ から、クライアントツールの最新の安定版リリース (openshift-origin-client-tools-VERSION-linux-64bit.tar.gz) をダウンロードし、アーカイブから抽出した Linux oc バイナリーを PATH に置きます。

注記
  • コマンドの oc cluster セットは、1.3 以降のリリースでのみ使用できることに注意してください。
  • docker コマンドは root ユーザーとして実行されるため、oc または docker コマンドはすべて root 権限で実行する必要があります。

docker コマンドを実行する権限のあるユーザーでターミナルを開き、以下のコマンドを実行します。

oc cluster up

出力の最後に、デプロイされたクラスターの情報が表示されます。

    -- Server Information ...
      OpenShift server started.
      The server is accessible via web console at:
      https://172.30.0.112:8443

      You are logged in as:
        User:     developer
        Password: developer

      To login as administrator:
        oc login -u system:admin

OpenShift サーバーに割り当てられた IP アドレスを書き留めておきます。本チュートリアルでは OPENSHIFT-SERVER-IP をその IP アドレスに置き換えてください。

3.2.2.1. リモートサーバーでの OpenShift クラスターのセットアップ

OpenShift クラスターをリモートサーバーにデプロイする場合、クラスターの起動時にパブリックホスト名とルーティング接尾辞を明示的に指定し、OpenShift Web コンソールへリモートアクセスできるようにする必要があります。

たとえば、AWS EC2 インスタンスでデプロイする場合は、以下のオプションを指定する必要があります。

oc cluster up --public-hostname=ec2-54-321-67-89.compute-1.amazonaws.com --routing-suffix=54.321.67.89.xip.io

ec2-54-321-67-89.compute-1.amazonaws.com はパブリックドメイン、54.321.67.89 はインスタンスの IP アドレスに置き換えます。これにより、https://ec2-54-321-67-89.compute-1.amazonaws.com:8443 で OpenShift Web コンソールにアクセスできるようになります。

3.3. ステップ 2: OpenShift テンプレートを使用して APIcast をデプロイする

  1. デフォルトでは、developer としてログインしていて、次のステップに進むことができます。

    そうでなければ、前の手順でダウンロードおよびインストールした OpenShift クライアントツールから oc login コマンドを使用して OpenShift にログインします。デフォルトのログインクレデンシャルは username = "developer"password = "developer" です。

    oc login https://OPENSHIFT-SERVER-IP:8443

    出力に Login successful. が表示されるはずです。

  2. プロジェクトを作成します。この例では表示名を gateway と設定します。

    oc new-project "3scalegateway" --display-name="gateway" --description="3scale gateway demo"

    応答は以下のようになります。

    Now using project "3scalegateway" on server "https://172.30.0.112:8443".

    コマンドプロンプトのテキスト出力で提案される次のステップを無視し、以下に示す次のステップに進みます。

  3. プロジェクトを参照する新しいシークレットを作成します。<access_token> および <domain> はご自分のクレデンシャルに置き換えます。<access_token> および <domain> の詳細は、以下を参照してください。

    oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<access_token>@<admin_portal_domain>  --type=kubernetes.io/basic-auth

    ここでは、<access_token> は 3scale Account Management API の アクセストークン で (サービストークンではありません)、<domain>-admin.3scale.net は 3scale 管理ポータルの URL になります。

    応答は以下のようになります。

    secret/apicast-configuration-url-secret
  4. テンプレートから APIcast ゲートウェイのアプリケーションを作成し、デプロイメントを開始します。

    oc new-app -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.4.0.GA/apicast-gateway/apicast.yml

    出力の最後に以下のメッセージが表示されるはずです。

    --> Creating resources with label app=3scale-gateway ...
        deploymentconfig "apicast" created
        service "apicast" created
    --> Success
        Run 'oc status' to view your app.

3.4. ステップ 3: OpenShift コンソールでルートを作成する

  1. ブラウザーで OpenShift クラスターの Web コンソール https://OPENSHIFT-SERVER-IP:8443/console/ を開きます。

    OpenShift クラスターをリモートサーバーで起動した場合は、OPENSHIFT-SERVER-IP ではなく、--public-hostname で指定した値を使用します。

    ログイン画面が表示されます。

    OpenShift Login Screen
    注記

    信頼できない Web サイトに関する警告が表示される可能性があります。有効な証明書を設定せずに、セキュアなプロトコルで Web コンソールにアクセスしようとしているため、この警告は想定内です。これは本番環境で行うべきではありませんが、このテスト設定では続行してこのアドレスの例外を作成することができます。

  2. 上記の Red Hat OpenShift の設定 セクションで作成または取得した developer のクレデンシャルを使用してログインします。

    上記のコマンドラインから作成した gateway プロジェクトが含まれる、プロジェクトのリストが表示されます。

    OpenShift プロジェクト

    gateway プロジェクトが表示されない場合は、別のユーザーで作成した可能性があり、ポリシーロールをこのユーザーに割り当てる必要があります。

  3. gateway リンクをクリックすると、Overview タブが表示されます。

    OpenShift は APIcast のコードをダウンロードし、デプロイメントを開始しました。デプロイメントの進行中に Deployment #1 running というメッセージが表示されることがあります。

    ビルドが完了すると、UI が更新され、テンプレートで定義されたとおりに OpenShift によって起動された APIcast の 2 つのインスタンス (2 つの Pod) が表示されます。

    ゲートウェイのビルド

    各 APIcast インスタンスが起動すると、3scale 管理ポータルの Integration ページの設定を使用して、3scale から必要な設定をダウンロードします。

    OpenShift は 2 つの APIcast インスタンスを維持し、両方のインスタンスの状態を監視します。状態の悪い APIcast インスタンスは自動的に新しいインスタンスに置き換えられます。

  4. APIcast インスタンスでトラフィックを受信できるようにするには、ルートを作成する必要があります。Create Route をクリックして操作を開始します。

    ルートの作成

    上記の Public Base URL フィールドで 3scale に設定したホストを、http:// とポートを削除して入力し (例: gateway.openshift.demo)、Create ボタンをクリックします。

    ルートの設定

    定義するすべての 3scale サービスについて、新規ルートを作成する必要があります。または、APIcast ワイルドカードルーター を設定して、定義する 3scale サービスごとに新しいルートを作成しないようにすることもできます。

第4章 高度な APIcast 設定

本セクションでは、ステージング環境における 3scale の API ゲートウェイの高度な設定オプションについて説明します。

4.1. シークレットトークンの定義

セキュリティー上の理由から、3scale ゲートウェイから API バックエンドに送信されるすべてのリクエストには、X-3scale-proxy-secret-token というヘッダーが含まれます。Integration ページの AUTHENTICATION SETTINGS で、このヘッダーの値を設定することができます。

Proxy secret token

設定したシークレットトークンは、プロキシーと API 間の共有シークレットとして機能し、ゲートウェイから送信されていない API リクエストを拒否したい場合には、すべてブロックすることができます。これにより、サンドボックスゲートウェイを使用してトラフィック管理ポリシーをセットアップする際に、公開エンドポイントを保護するための新たなセキュリティーレイヤーを追加することができます。

ゲートウェイが機能するためには、API バックエンドには公開されている解決可能なドメインが必要です。したがって、API バックエンドを知っていれば、誰でもクレデンシャルの確認を迂回することができます。ステージング環境の API ゲートウェイは実稼働環境での使用を想定していないので、このことが問題になることはありません。ただし、アクセスを防げるようにしておいた方が望ましいと言えます。

4.2. クレデンシャル

3scale における API クレデンシャルは、user_key または app_id/app_key のどちらかです (使用する認証モードによります)。ステージング環境の API ゲートウェイでは OpenID Connect が有効です。ただし、Integration ページでテストすることはできません。

なお、API で異なるクレデンシャル名を使用することが望ましい場合もあります。この場合、API キーモードを使用していれば user_key にカスタムな名前を設定する必要があります。

Custom user_key

あるいは、以下のように app_id および app_key を設定します。

Custom app_key/app_id

たとえば、app_idkey に変えることが API にとってより適切であれば、名前を変更することができます。ゲートウェイは名前 key を取得し、3scale バックエンドに対して承認呼び出しを行う前に app_id に変換します。新しいクレデンシャル名には、英数字を使用しなければならない点に注意してください。

API がクレデンシャルを渡す際に、クエリー文字列 (GET 以外ではボディー) またはヘッダーのどちらを使用するかを定義することができます。

Proxy Credentials Location
注記

クレデンシャルを抽出する際に、APIcast はヘッダー名を正規化します。つまり、大文字と小文字の区別をなくし、アンダースコアとハイフンを等価に扱います。たとえば、アプリケーションキーのパラメーターを App_Key と設定した場合には、app-key 等の他の値も有効なアプリケーションキーヘッダーとして受け入れられます。

4.3. エラーメッセージ

本格的な設定のもう 1 つの重要な要素は、独自のカスタムエラーメッセージを定義することです。

ステージング環境の 3scale API ゲートウェイは、API によって生成されたすべてのエラーメッセージをパスすることに注意することが重要です。ただし、API の管理レイヤーがゲートウェイによって実行されるようになったため、一部のリクエストはゲートウェイによって終了されるため、API で表示されないエラーがいくつかあります。

カスタムエラーメッセージ

エラーの一部を次に示します。

  • Authentication missing: API リクエストにクレデンシャルが含まれていない場合には、必ずこのエラーが生成されます。ユーザーが API リクエストにクレデンシャルを追加しなかった場合に起こります。
  • 認証に失敗しました: このエラーは、API リクエストに有効な資格情報が含まれていない場合に生成されます。資格情報が偽物であるか、アプリケーションが一時的に中断されていることが原因である可能性があります。
  • No match: このエラーは、リクエストがどのマッピングルールにもマッチしなかったため、メトリクスが更新されないことを意味します。この状況は必ずしもエラーとは限りませんが、ユーザーが無効なパスを試みているか、マッピングルールが正当なケースに対応していないかのいずれかを意味します。
  • 再試行後: このエラーは、API リクエストがレート制限を超えるとトリガーされます。Retry-After ヘッダーが返され、ステータスコード 429 と制限が切れるまでの秒数が示されます。

4.4. 設定履歴

Update & test in Staging Environment ボタンをクリックするたびに、その時点での設定が JSON ファイルに保存されます。ステージング環境のゲートウェイは、新規リクエストのたびに最新の設定を取得します。それぞれの環境 (ステージングまたは実稼働環境) について、それまでの設定ファイルの履歴をすべて確認することができます。

以前のバージョンに自動的にロールバックすることはできない点に注意してください。その代わりに、すべての設定バージョンの履歴が、対応する JSON ファイルにより提供されます。これらのファイルを使用して、それぞれの時点でデプロイした設定を確認することができます。必要であれば、どのデプロイメントでも手動で作成し直すことができます。

4.5. デバッグ

ゲートウェイ設定のセットアップは簡単ですが、それでもエラーが発生する可能性があります。そのような状況のために、ゲートウェイはエラーを追跡するのに有用なデバッグ情報を返すことができます。

APIcast からデバッグ情報を取得するには、アクセスする API サービスに対応するサービストークンを指定して、ヘッダー X-3scale-debug: {SERVICE_TOKEN} を API リクエストに追加する必要があります。

ヘッダーが検出されサービストークンが有効であれば、ゲートウェイはレスポンスヘッダーに以下の情報を追加します。

X-3scale-matched-rules: /v1/word/{word}.json, /v1
X-3scale-credentials: app_key=APP_KEY&app_id=APP_ID
X-3scale-usage: usage%5Bversion_1%5D=1&usage%5Bword%5D=1

X-3scale-matched-rules には、リクエストにマッチしているマッピングルールのコンマ区切りリストが表示されます。

ヘッダー X-3scale-credentials は、3scale バックエンドに渡されたクレデンシャルを返します。

X-3scale-usage には、3scale バックエンドに報告された使用状況が表示されます。usage%5Bversion_1%5D=1&usage%5Bword%5D=1usage[version_1]=1&usage[word]=1 を URL エンコードしたもので、API リクエストによりメソッド (メトリクス) version_1 および word のカウントがそれぞれ 1 増えたこと意味します。

4.6. パスルーティング

APIcast は、3scaleアカウント (または APICAST_SERVICES_LIST 環境変数が設定されている場合にはサービスのサブセット) で設定されているすべての API サービスを処理します。通常、APIcast はリクエストのホスト名に基づいて API リクエストを適切な API サービスにルーティングします。そのために、公開ベース URL との照合を行います。最初にマッチしたサービスが承認に使用されます。

パスルーティング機能により、複数のサービスで同じ 公開ベース URL を使用することができ、リクエストはリクエストのパスによりルーティングされます。この機能を有効にするには、APICAST_PATH_ROUTING 環境変数を true または 1に設定します。有効にすると、APIcast はホスト名とパスの両方に基づいて受信したリクエストをサービスにマッピングします。

同じ 公開ベース URL を使用して 1 つのゲートウェイを通じて異なるドメインでホストされる複数のバックエンドサービスを公開する場合に、この機能を使用することができます。そのためには、API バックエンド (つまり プライベートベース URL) ごとに複数の API サービスを設定し、パスルーティング機能を有効にします。

たとえば、3 つのサービスが以下のように設定されている場合、

  • サービス A 公開ベース URL: api.example.com マッピングルール: /a
  • サービス B 公開ベース URL: api2.example.com マッピングルール: /b
  • サービス C 公開ベース URL: api.example.com マッピングルール: /c

パスルーティングが 無効 な場合には (APICAST_PATH_ROUTING=false)、api.example.com に対するすべての呼び出しはサービス A との照合を試みます。したがって、呼び出し api.example.com/c および api.example.com/b「No Mapping Rule matched」エラーと共に失敗します。

パスルーティングが 有効 な場合には (APICAST_PATH_ROUTING=true)、呼び出しはホストおよびパスの両方に照合されます。したがって、

  • api.example.com/a はサービス A にルーティングされます。
  • api.example.com/c はサービス C にルーティングされます。
  • api.example.com/b は「No Mapping Rule matched」エラーと共に失敗します。つまり、公開ベース URL がマッチしないので、サービス B とはマッチしません。

パスルーティングを使用する場合には、同じ 公開ベース URL を使用する複数のサービスにおいて、マッピングルールが競合しないようにする必要があります。つまり、メソッドとパスパターンの組み合わせは、それぞれ 1 つのサービスでしか使用することはできません。

第5章 APIcast ポリシー

APIcast ポリシーは、APIcast の動作を変更する機能の単位です。ポリシーを有効、無効、および設定して、APIcast 動作の変更を制御することができます。ポリシーを使用して、デフォルトの APIcast デプロイメントでは利用することのできない機能を追加します。自分専用のポリシーを作成することや、Red Hat 3scale の提供する 標準ポリシー を使用することができます。

以下のトピックでは、標準 APIcast ポリシー、専用のカスタム APIcast ポリシーの作成、およびポリシーチェーンの作成について説明します。

ポリシーチェーンを使用して、サービスに対するポリシーを制御します。ポリシーチェーンの機能を以下に示します。

  • APIcast が使用するポリシーを指定する
  • 3scale が使用するポリシーの設定情報を提供する
  • 3scale がポリシーを読み込む順番を指定する
注記

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

カスタムポリシーを使用して APIIcast の動作を変更するには、以下の操作が必要です。

  • カスタムポリシーを APIcast に追加する
  • APIcast ポリシーを設定するポリシーチェーンを定義する
  • ポリシーチェーンを APIcast に追加する

5.1. APIcast 標準ポリシー

Red Hat 3scale では、以下の標準ポリシーが利用可能です。

3scale API Management で標準ポリシーを 有効化および設定 することができます。

5.1.1. 3scale Auth Caching ポリシー

3scale Auth Caching ポリシーは、APIcast に送信された認証呼び出しをキャシュします。動作モードを選択して、キャッシュ操作を設定することができます。

3scale Auth Caching では、以下のモードを使用することができます。

1.strict: 承認された呼び出しだけをキャッシュします。

「strict」モードでは、承認された呼び出しだけがキャッシュされます。ポリシーを「strict」モードで実行中に呼び出しが失敗または拒否されると、ポリシーはキャッシュエントリーを無効にします。バックエンドにアクセスできなくなると、キャッシュステータスにかかわらず、キャッシュされたすべての呼び出しが拒否されます。

2.resilient: バックエンドの機能が停止している場合には、最後のリクエストに基づいて承認します。

「resilient」モードでは、承認された呼び出しおよび拒否された呼び出しの両方がキャッシュされます。ポリシーを「resilient」モードで実行中は、呼び出しに失敗しても既存のキャッシュエントリーは無効になりません。バックエンドにアクセスできなくなると、キャッシュにヒットする呼び出しは、キャッシュステータスに応じて承認/拒否の状態を維持します。

3.allow: バックエンドの機能が停止している場合には、過去に拒否されていない限りすべてを許可します。

「allow」モードでは、承認された呼び出しおよび拒否された呼び出しの両方がキャッシュされます。ポリシーを「allow」モードで実行中は、キャッシュされた呼び出しはキャッシュステータスに応じて拒否/許可の状態を維持します。ただし、新規の呼び出しは承認された呼び出しとしてキャッシュされます。

重要

「allow」モードで運用した場合には、セキュリティーの低下が懸念されます。これらの懸念に念頭に置き、注意した上で「allow」モードを使用してください。

4.none: キャッシュを無効にします。

「none」モードでは、キャッシュが無効になります。ポリシーを有効にしたままキャッシュの使用を止める場合に、このモードが役立ちます。

設定プロパティー

プロパティー説明必須/任意

caching_type

caching_type プロパティーにより、キャッシュの動作モードを定義することができます。

データタイプ: 列挙文字列 [resilient, strict, allow, none]

必須

ポリシーオブジェクトの例

{
  "name": "caching",
  "version": "builtin",
  "configuration": {
    "caching_type": "allow"
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.2. 3scale Batcher ポリシー

標準の APIcast 承認メカニズムでは、APIcast が API リクエストを受け取るたびに、3scale バックエンド (Service Management API) に対して 1 回呼び出しが行われます。3scale Batcher ポリシーは、この標準メカニズムの代替手段を提供します。

3scale Batcher ポリシーを使用すると、3scale バックエンドへのリクエスト数が大幅に削減され、レイテンシーが減少しスループットが向上します。そのために、このポリシーは承認ステータスをキャッシュし、使用状況レポートをバッチ処理します。

3scale Batcher ポリシーが有効な場合には、APIcast は以下のフローを使用して承認を行います。

  1. それぞれのリクエストにおいて、ポリシーはクレデンシャルがキャッシュされているかどうかを確認します。

    • クレデンシャルがキャッシュされている場合には、ポリシーは 3scale バックエンドに呼び出しを行う代わりに、キャッシュされた承認ステータスを使用します。
    • クレデンシャルがキャッシュされていない場合には、ポリシーはバックエンドに呼び出しを行い、残存期間 (TTL) を設定して承認ステータスをキャッシュします。
  2. リクエストに対応する使用状況を直ちに 3scale バックエンドに報告する代わりに、ポリシーは使用状況のカウンターを累積して、バックエンドにバッチで報告します。累積した使用状況のカウンターは、独立したスレッドにより 1 回の呼び出しで 3scale バックエンドに報告されます (報告の頻度は設定が可能です)。

3scale Batcher ポリシーではスループットが向上しますが、精度は低下します。使用上限および現在の使用状況は 3scale に保存され、APIcast は 3scale バックエンドに呼び出しを行う時にのみ正しい承認ステータスを取得することができます。3scale Batcher ポリシーが有効な場合には、APIcast が 3scale に呼び出しを送信しない期間があります。この期間中、呼び出しを行うアプリケーションが定義された限度を超える可能性があります。

流量制御の精度よりもスループットが重要な場合には、高負荷の API に対してこのポリシーを使用します。報告頻度および承認の TTL が流量制御の期間よりはるかに短い場合には、3scale Batcher ポリシーにより優れた精度が得られます。たとえば、流量制御が 1 日あたりで、報告頻度および承認の TTL が数分に設定されている場合などです。

3scale Batcher ポリシーでは、以下の構成設定がサポートされます。

  • auths_ttl: 承認キャッシュの有効期限が切れる TTL を秒単位で設定します。

    現在の呼び出しの承認がキャッシュされている場合には、APIcast はキャッシュされた値を使用します。auths_ttl パラメーターで設定した時間が経過すると、APIcast はキャッシュを削除し、3scale バックエンドに呼び出しを行い承認のステータスを取得します。

  • batch_report_seconds: APIcast が 3scale バックエンドにバッチレポートを送信する頻度を設定します。デフォルト値は 10 秒です。
重要

このポリシーを使用するには、ポリシーチェーンで 3scale APIcast および 3scale Batcher ポリシーの両方を有効にします。

5.1.3. Anonymous Access ポリシー

Anonymous Access ポリシーでは、認証をせずにサービスが公開されます。このポリシーは、認証パラメーターを送信するように変更することのできないレガシーアプリケーション等の場合に有用です。Anonymous ポリシーは、API キーおよびアプリケーション ID/アプリケーションキーによる認証オプションを使用するサービスしかサポートしません。クレデンシャルをまったく持たない API リクエストに対してこのポリシーを有効にした場合には、APIcast はポリシーで設定されたデフォルトのクレデンシャルを使用して呼び出しを承認します。API の呼び出しが承認されるためには、クレデンシャルが設定されたアプリケーションが存在しアクティブでなければなりません。

アプリケーションプランを使用して、デフォルトのクレデンシャルに使用されるアプリケーションに流量制御を設定することができます。

注記

APIcast ポリシーおよび Anonymous Access ポリシーをポリシーチェーンで併用する場合には、APIcast ポリシーの前に Anonymous Access ポリシーを設定する必要があります。

ポリシーに必要な設定プロパティーを以下に示します。

  • auth_type: 以下に示す選択肢のいずれかの値を選択し、プロパティーが API に設定された認証オプションに対応している状態にします。

    • app_id_and_app_key: アプリケーション ID/アプリケーションキーによる認証オプション用
    • user_key: API キーによる認証オプション用
  • app_id (app_id_and_app_key 認証タイプにのみ有効): API の呼び出しにクレデンシャルが提供されていない場合に、承認に使用するアプリケーションのアプリケーション ID。
  • app_key (app_id_and_app_key 認証タイプにのみ有効): API の呼び出しにクレデンシャルが提供されていない場合に、承認に使用するアプリケーションのアプリケーションキー。
  • user_key (user_key 認証タイプにのみ有効): API の呼び出しにクレデンシャルが提供されていない場合に、承認に使用するアプリケーションの API キー。

図5.1 Anonymous Access ポリシー

Anonymous Access ポリシー

5.1.4. CORS Request Handling ポリシー

Cross Origin Resource Sharing (CORS) request handling ポリシーを使用すると、以下の項目を指定することができるので CORS の動作の制御が可能です。

  • 許可されるヘッダー
  • 許可されるメソッド
  • Allow credentials
  • 許可されるオリジンヘッダー

CORS Request Handling ポリシーにより、指定されていない CORS リクエストはすべてブロックされます。

注記

APIcast ポリシーおよび CORS Request Handling ポリシーをポリシーチェーンで併用する場合には、APIcast ポリシーの前に CORS Request Handling ポリシーを設定する必要があります。

設定プロパティー

プロパティー説明必須/任意

allow_headers

allow_headers プロパティーでは、APIcast が許可する CORS ヘッダーを配列として指定することができます。

データタイプ: 文字列の配列 (CORS ヘッダーでなければなりません)

任意

allow_methods

allow_methods プロパティーでは、APIcast が許可する CORS メソッドを配列として指定することができます。

データタイプ: 列挙文字列の配列 [GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT]

任意

allow_origin

allow_origin プロパティーでは、APIcast が許可するオリジンのドメインを指定することができます。

データタイプ: 文字列

任意

allow_credentials

allow_credentials プロパティーでは、APIcast がクレデンシャルの設定された CORS リクエストを許可するかどうかを指定することができます。

データタイプ: ブール値

任意

ポリシーオブジェクトの例

{
  "name": "cors",
  "version": "builtin",
  "configuration": {
    "allow_headers": [
      "App-Id", "App-Key",
      "Content-Type", "Accept"
    ],
    "allow_credentials": true,
    "allow_methods": [
      "GET", "POST"
    ],
    "allow_origin": "https://example.com"
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.5. Echo ポリシー

Echo ポリシーは、受信したリクエストを出力してクライアントに返します。また、オプションで任意の HTTP ステータスコードを返します。

構成プロパティー

プロパティー説明必須/任意

status

Echo ポリシーがクライアントに返す HTTP ステータスコード

データタイプ: 整数

任意

exit

Echo ポリシーが使用する終了モードを指定します。request 終了モードは、受信したリクエストの処理を停止します。set 終了モードは書き換えフェーズを省略します。

データタイプ: 列挙文字列 [request, set]

必須

ポリシーオブジェクトの例

{
  "name": "echo",
  "version": "builtin",
  "configuration": {
    "status": 404,
    "exit": "request"
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.6. Edge Limiting ポリシー

Edge Limiting ポリシーの目的は、バックエンド API に送信されるトラフィックに対する柔軟な流量制御を提供することで、このポリシーをデフォルトの 3scale 承認メカニズムと共に使用することができます。このポリシーでサポートされるユースケースの例を以下に示します。

  • エンドユーザーの流量制御: リクエストの認証ヘッダーで渡される JWT トークンの「sub」(subject) クレームの値による流量制御 ({{ jwt.sub }} として設定します)。
  • 1 秒あたりのリクエスト数 (RPS) 流量制御
  • サービスごとのグローバル流量制御: アプリケーションごとではなく、サービスごとに流量制御を適用します。
  • 同時接続上限: 許容される同時接続の数を設定します。

5.1.6.1. 制限のタイプ

このポリシーでは、lua-resty-limit-traffic ライブラリーにより提供される以下の制限タイプがサポートされます。

  • leaky_bucket_limiters: 平均リクエスト数および最大バーストサイズをベースにした「leaky_bucket」アルゴリズムに基づきます。
  • fixed_window_limiters: 特定の期間 (最後の X 秒) に基づきます。
  • connection_limiters: 同時接続の数に基づきます。

すべての制限をサービスごとまたはグローバルに適用することができます。

5.1.6.2. 制限の定義

リミッターはキーを持ち、このキーで制限を定義するのに使用するエンティティーをエンコードします (IP、サービス、エンドポイント、ID、特定ヘッダーの値など)。キーは、リミッターの key パラメーターで指定します。

key は以下のプロパティーで定義されるオブジェクトです。

  • name: キーの名前です。スコープ内で一意でなければなりません。
  • scope: キーのスコープを定義します。サポートされるスコープは以下のとおりです。

    • service: 1 つのサービスに影響を及ぼすサービスごとのスコープ
    • global: すべてのサービスに影響を及ぼすグローバルスコープ
  • name_type:「name」の値がどのように評価されるかを定義します。

    • plain: プレーンテキストとして評価される。
    • liquid: Liquid として評価される。

それぞれの制限には、そのタイプに応じたパラメーターもあります。

  • leaky_bucket_limiters: rate および burst

    • rate: 遅延を生じることなく実行できる 1 秒あたりのリクエスト数を定義します。
    • burst: 許容レートを超えることのできる 1 秒あたりのリクエスト数を定義します。許容レート (rate で指定される) を超えるリクエストには、人為的な遅延が適用されます。1 秒あたりのリクエスト数が burst で定義されるレートを超えると、リクエストは拒否されます。
  • fixed_window_limiters: countwindowcount は、window で定義される秒数あたりに実行できるリクエスト数を定義します。
  • connection_limiters: connburst、および delay

    • conn: 許容される同時接続の最大数を定義します。burst で定義される 1 秒あたりの接続数までこの値を超えることができます。
    • delay: 制限を超える接続を遅延させる秒数です。

  1. service_A に対するリクエストを毎分 10 回許可します。

    {
      "key": { "name": "service_A" },
      "count": 10,
      "window": 60
    }
  2. burst および delay をそれぞれ 10 および 1 に設定して、100 の接続を許可します。

    {
      "key": { "name": "service_A" },
      "conn": 100,
      "burst": 10,
      "delay": 1
    }

サービスごとにさまざまな制限を定義することができます。複数の制限を定義した場合には、少なくとも 1 つの制限に達すると、リクエストは拒否または遅延されます。

5.1.6.3. Liquid テンプレート

Edge Limiting ポリシーではキーに Liquid 変数がサポートされるので、動的なキーに制限を指定することができます。そのためには、キーの name_type パラメーターを「liquid」に設定する必要があります。これにより、name パラメーターに Liquid パラメーターを使用することができます。例: クライアント IP アドレスの場合は {{ remote_addr }}、JWT トークンの「sub」クレームの場合は {{ jwt.sub }}

以下に例を示します。

{
  "key": { "name": "{{ jwt.sub }}", "name_type": "liquid" },
  "count": 10,
  "window": 60
}

Liquid のサポートに関する詳細な情報は、「ポリシーでの変数およびフィルターの使用」を参照してください。

5.1.6.4. 条件の適用

条件は、API ゲートウェイがリミッターをいつ適用するかを定義します。各リミッターの condition プロパティーで少なくとも 1 つの操作を指定する必要があります。

以下のプロパティーで condition を定義します。

  • combine_op。演算のリストに適用されるブール演算子です。or および and の 2 つの値がサポートされます。
  • operations。評価する必要がある条件のリストです。各演算は、以下のプロパティーを持つオブジェクトにより表されます。

    • left: 演算の左側部分
    • left_type: left プロパティーがどのように評価されるか (plain または liquid)。
    • right: 演算の右側部分
    • right_type: right プロパティーがどのように評価されるか (plain または liquid)。
    • op: 左右の部分の間に適用される演算子。== (等しい) および != (等しくない) の 2 つの値がサポートされます。

以下に例を示します。

"condition": {
  "combine_op": "and",
  "operations": [
    {
      "op": "==",
      "right": "GET",
      "left_type": "liquid",
      "left": "{{ http_method }}",
      "right_type": "plain"
    }
  ]
}

5.1.6.5. ストアの設定

デフォルトでは、Edge Limiting ポリシーは流量制御カウンターに OpenResty 共有ディクショナリーを使用します。ただし、共有ディクショナリーの代わりに外部の Redis サーバーを使用することができます。この設定は、複数の APIcast インスタンスが使用されている場合に役立ちます。Redis サーバーは、redis_url パラメーターを使用して設定することができます。

5.1.6.6. エラー処理

リミッターでは、エラーの処理方法を設定するために以下のパラメーターがサポートされます。

  • limits_exceeded_error: 設定した上限を超えた際にクライアントに返されるエラーステータスコードおよびメッセージを設定することができます。以下のパラメーターを設定する必要があります。

    • status_code: 上限を超えた際のリクエストのステータスコード。デフォルトは 429 です。
    • error_handling: エラーの処理方法。

      • exit: エラーで応答します。
      • log: リクエストを通過させ、ログのみを出力します。
  • configuration_error: 設定が正しくない場合にクライアントに返されるエラーステータスコードおよびメッセージを設定することができます。以下のパラメーターを設定する必要があります。

    • status_code: 設定に問題がある場合のステータスコード。デフォルトは 500 です。
    • error_handling: エラーの処理方法。

      • exit: エラーで応答します。
      • log: リクエストを通過させ、ログのみを出力します。

5.1.7. Header Modification ポリシー

Header Modification ポリシーを使用すると、受信したリクエストまたはレスポンスに関して、既存のヘッダーを変更する、補足のヘッダーを定義して追加する、またはヘッダーを削除することができます。レスポンスヘッダーおよびリクエストヘッダーの両方を変更することができます。

Header Modification ポリシーでは、以下の設定パラメーターがサポートされます。

  • request: リクエストヘッダーに適用する操作のリスト
  • response: レスポンスヘッダーに適用する操作のリスト

それぞれの操作は、以下のパラメーターで構成されます。

  • op: 適用する操作を指定します。add 操作は既存のヘッダーに値を追加します。set 操作はヘッダーおよび値を作成し、既存のヘッダーの値が既に存在する場合はその値を上書きします。push 操作はヘッダーおよび値を作成しますが、既存のヘッダーの値が既に存在していてもその値を上書きしません。その代わりに、push は既存のヘッダーに値を追加します。delete 操作はヘッダーを削除します。
  • header: 作成または変更するヘッダーを指定します。ヘッダー名には任意の文字列を使用することができます (例: Custom-Header)。
  • value_type: ヘッダーの値がどのように評価されるかを定義します。プレーンテキストの場合の plain または Liquid テンプレートとして評価する場合の liquid いずれかに設定します。詳細は、「「ポリシーでの変数およびフィルターの使用」」を参照してください。
  • value: ヘッダーに使用される値を指定します。値のタイプが「liquid」の場合には、値は {{ variable_from_context }} の形式にする必要があります。削除する場合には不要です。

ポリシーオブジェクトの例

{
  "name": "headers",
  "version": "builtin",
  "configuration": {
    "response": [
      {
        "op": "add",
        "header": "Custom-Header",
        "value_type": "plain",
        "value": "any-value"
      }
    ],
    "request": [
      {
        "op": "set",
        "header": "Authorization",
        "value_type": "plain",
        "value": "Basic dXNlcm5hbWU6cGFzc3dvcmQ="
      },
      {
        "op": "set",
        "header": "Service-ID",
        "value_type": "liquid",
        "value": "{{service.id}}"
      }
    ]
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.8. IP Check ポリシー

IP Check ポリシーは、IP のリストに基づいてリクエストを拒否または許可するために使用します。

構成プロパティー

プロパティー説明データタイプ必須/任意

check_type

check_type プロパティーには、whitelist または blacklist の 2 つの値を指定することができます。blacklist は、リスト上の IP からのリクエストをすべて拒否します。whitelist は、リスト上に ない IP からのリクエストをすべて拒否します。

文字列 (whitelist または blacklist のどちらかでなければなりません)

必須

ips

ips プロパティーでは、ホワイトリストまたはブラックリストに登録する IP アドレスのリストを指定することができます。個別の IP および CIDR 範囲の両方を使用することができます。

文字列の配列 (有効な IP アドレスでなければなりません)

必須

error_msg

error_msg プロパティーを使用して、リクエストが拒否された時に返されるエラーメッセージを設定することができます。

文字列

任意

client_ip_sources

client_ip_sources プロパティーでは、クライアント IP の取得方法を設定することができます。デフォルトでは、最後に呼び出しを実施した IP が使用されます。これ以外のオプションは、X-Forwarded-For および X-Real-IP です。

文字列の配列。有効なオプションは、X-Forwarded-ForX-Real-IP、および last_caller です (複数の選択が可能です)。

任意

ポリシーオブジェクトの例

{
  "name": "ip_check",
  "configuration": {
    "ips": [ "3.4.5.6", "1.2.3.0/4" ],
    "check_type": "blacklist",
    "client_ip_sources": ["X-Forwarded-For", "X-Real-IP", "last_caller"],
    "error_msg": "A custom error message"
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.9. Liquid Context Debug ポリシー

注記

Liquid Context Debug ポリシーの想定は、開発環境でのデバッグ用途のみで、実稼働環境での使用は意図されていません。

このポリシーは JSON を使用して API リクエストに応答します。コンテキストで利用可能なオブジェクトおよび値を含み、Liquid テンプレートの評価に使用することができます。3scale APIcast または Upstream ポリシーと組み合わせる場合には、正常な動作のためにポリシーチェーンではこれらのポリシーの前に Liquid Context Debug ポリシーを設定する必要があります。循環参照を避けるために、ポリシーには重複するオブジェクトは 1 回だけ含め、それをスタブ値で置き換えます。

このポリシーが有効な時に APIcast が返す値の例を以下に示します。

{
  "jwt": {
    "azp": "972f7b4f",
    "iat": 1537538097,
    ...
    "exp": 1537574096,
    "typ": "Bearer"
  },
  "credentials": {
    "app_id": "972f7b4f"
  },
  "usage": {
    "deltas": {
      "hits": 1
    },
    "metrics": [
      "hits"
    ]
  },
  "service": {
    "id": "2",
    ...
  }
  ...
}

5.1.10. Logging ポリシー

Logging ポリシーにより、各 API サービスの APIcast (NGINX) アクセスログを個別に有効または無効にすることができます。デフォルトでは、このポリシーはポリシーチェーンで有効になっていません。

このポリシーは、enable_access_logs 設定パラメーターしかサポートしません。サービスのアクセスロギングを無効にするには、ポリシーを有効にし、enable_access_logs パラメーターの選択を解除して、Submit ボタンをクリックします。アクセスログを有効にするには、enable_access_logs パラメーターを選択するか、Logging ポリシーを無効にします。

ロギングポリシーの設定

Logging ポリシーとアクセスログの場所のグローバル設定を組み合わせることができます。APIcast アクセスログの場所を設定するには、APICAST_ACCESS_LOG_FILE 環境変数を設定します。デフォルトでは、この変数は標準出力デバイスの /dev/stdout に設定されています。グローバル APIcast パラメーターに関する詳細な情報は、「7章APIcast の環境変数」を参照してください。

5.1.11. OAuth 2.0 Token Introspection ポリシー

OAuth 2.0 Token Introspection ポリシーを使用すると、OpenID Connect 認証オプションを用いるサービスに使用される JSON Web Token (JWT) トークンを検証することができます。この場合、トークン発行者 (Red Hat Single Sign-On) のトークンイントロスペクションエンドポイントを使用します。

トークンイントロスペクションエンドポイントおよびそのエンドポイントに呼び出しを行う際に APIcast が使用するクレデンシャルを定義する場合、auth_type フィールドでは以下の認証タイプがサポートされます。

use_3scale_oidc_issuer_endpoint

この設定では、APIcast はクライアント資格情報 (クライアント ID とクライアントシークレット) と、サービス統合ページで設定された OpenID Connect 発行者設定からのトークンイントロスペクションエンドポイントを使用します。

APIcast は、OpenID Connect 発行者の .well-known/openid-configuration エンドポイントが返す token_introspection_endpoint フィールドからトークンイントロスペクションエンドポイントを検出します。

例5.1 use_3scale_oidc_issuer_endpoint に設定された認証タイプ

以下は、認証タイプが use_3scale_oidc_issuer_endpoint に設定されている場合の設定例です。

"policy_chain": [
…​
  {
    "name": "apicast.policy.token_introspection",
    "configuration": {
      "auth_type": "use_3scale_oidc_issuer_endpoint"
    }
  }
…​
],
client_id+client_secret

このオプションでは、APIcast がトークン情報を要求するのに使用するクライアント ID およびクライアントシークレットと共に、異なるトークンイントロスペクションエンドポイントを指定することができます。

このオプションを使用する場合には、以下の設定パラメーターを定義します。

  • client_id: トークンイントロスペクションエンドポイント用のクライアント ID を設定します。
  • client_secret: トークンイントロスペクションエンドポイント用のクライアントシークレットを設定します。
  • introspection_url: イントロスペクションエンドポイントの URL を設定します。

    例5.2 client_id+client_secret に設定された認証タイプ

    以下は、認証タイプが client_id+client_secret に設定されている場合の設定例です。

    "policy_chain": [
    …​
      {
        "name": "apicast.policy.token_introspection",
        "configuration": {
          "auth_type": "client_id+client_secret",
          "client_id": "myclient",
          "client_secret": "mysecret",
          "introspection_url": "http://red_hat_single_sign-on/token/introspection"
        }
      }
    …​
    ],

auth_type フィールドの設定にかかわらず、APIcast は Basic 認証を使用してトークンイントロスペクションの呼び出しを承認します (Authorization: Basic <token> ヘッダー、ここで <token> は Base64 でエンコードされた <client_id>:<client_secret> 設定です)。

OAuth 2.0 Token Introspection Configuration

トークンイントロスペクションエンドポイントのレスポンスには、active 属性が含まれます。APIcast はこの属性の値を確認します。属性の値に応じて、APIcast は呼び出しを承認または拒否します。

  • true: 呼び出しを承認します
  • false: Authentication Failed エラーと共に呼び出しを拒否します

このポリシーを使用すると、トークンのキャッシュを有効にして、同じ JWT トークンに対する呼び出しのたびにトークンイントロスペクションエンドポイントに呼び出しを行うのを避けることができます。Token Introspection ポリシーのトークンキャッシュを有効にするには、max_cached_tokens フィールドを 0 (機能は無効) から 10000 までの値に設定します。さらに、max_ttl_tokens フィールドで、トークンの残存期間 (TTL) の値を 1 から 3600 秒に設定することができます。

5.1.12. Referrer ポリシー

Referrer ポリシーを使用すると、参照元フィルター機能が有効になります。サービスポリシーチェーンでこのポリシーが有効な場合には、APIcast は今後のリクエストの Referer ポリシーの値を referrer パラメーターで Service Management API (AuthRep 呼び出し) に送信します。参照元フィルター機能の仕組みの詳細については、Authentication PatternsReferrer Filtering セクションを参照してください。

5.1.13. RH-SSO/Keycloak Role Check ポリシー

OpenID Connect 認証オプションと共に使用した場合、このポリシーによりロールの確認機能が追加されます。このポリシーは、Red Hat Single Sign-On により発行されたアクセストークンのレルムロールおよびクライアントロールを確認します。すべてのクライアントのリソースまたは 3Scale にロールチェックを追加する場合は、レルムロールを指定します。

ポリシー設定の type プロパティーで指定するロールの確認には、以下の 2 つのタイプがあります。

  • whitelist (デフォルト): whitelist が使用されると、APIcast は指定したスコープが JWT トークンに含まれるかどうかを確認し、JWT にそのスコープがなければ呼び出しを拒否します。
  • blacklist: blacklist が使用された場合には、JWT トークンにブラックリスト登録したスコープが含まれていれば APIcast は呼び出しを拒否します。

同じポリシーに blacklist および whitelist 両方のチェックを設定することはできませんが、APIcast ポリシーチェーンに複数の RH-SSO/Keycloak Role Check ポリシーインスタンスを追加することができます。

ポリシー設定の scopes プロパティーを使用して、スコープのリストを設定することができます。

それぞれの scope オブジェクトには、以下のプロパティーがあります。

  • resource: ロールによって制御されるリソース (エンドポイント)。これは、マッピングルールと同じフォーマットです。文字列の先頭からパターンの照合を行います。完全一致の場合には、最後に $ を追加する必要があります。
  • resource_type: このプロパティーで、resource の値がどのように評価されるかを定義します。

    • プレーンテキストとして (plain): resource の値をプレーンテキストとして評価します。たとえば /api/v1/products$
    • Liquid テキストとして (liquid): resource の値に Liquid を使用することを許可します。例: /resource_{{ jwt.aud }} は、クライアント ID (JWT aud クレームに含まれる) を含むリソースへのアクセスを管理します。
  • realm_roles: レルムロールを確認する場合に使用します (Red Hat Single Sign-On のレルムロール に関するドキュメントを参照してください)。

    レルムロールは、Red Hat Single Sign-On により発行された JWT にあります。

      "realm_access": {
        "roles": [
          "<realm_role_A>", "<realm_role_B>"
        ]
      }

    実際のロールは、ポリシーで指定する必要があります。

    "realm_roles": [
      { "name": "<realm_role_A>" }, { "name": "<realm_role_B>" }
    ]

    realm_roles 配列の各オブジェクトでは、以下のプロパティーを使用することができます。

  • name: ロールの名前を指定します。
  • name_type: plain または liquid のどちらかを指定して、name がどのように評価されるかを定義します (resource_type の場合と同じように機能します)。
  • client_roles: クライアント namespace に特定のアクセスロールがあるかどうかを確認する場合に、client_roles を使用します (Red Hat Single Sign-On のクライアントロール に関するドキュメントを参照してください)。

    クライアントロールは、JWT の resource_access クレームのセクションにあります。

      "resource_access": {
        "<client_A>": {
          "roles": [
            "<client_role_A>", "<client_role_B>"
          ]
        },
        "<client_B>": {
          "roles": [
            "<client_role_A>", "<client_role_B>"
          ]
        }
      }

    ポリシーでクライアントロールを指定します。

    "client_roles": [
      { "name": "<client_role_A>", "client": "<client_A>" },
      { "name": "<client_role_B>", "client": "<client_A>" },
      { "name": "<client_role_A>", "client": "<client_B>" },
      { "name": "<client_role_B>", "client": "<client_B>" }
    ]

    client_roles 配列の各オブジェクトでは、以下のプロパティーを使用することができます。

  • name: ロールの名前を指定します。
  • name_type: plain または liquid のどちらかを指定して、name の値がどのように評価されるかを定義します (resource_type の場合と同じように機能します)。
  • client: ロールのクライアントを指定します。定義しなければ、このポリシーはクライアントに aud クレームを使用します。
  • client_type: plain または liquid のどちらかを指定して、client の値がどのように評価されるかを定義します (resource_type の場合と同じように機能します)。

5.1.14. Prometheus メトリクス

Prometheus はスタンドアロンのオープンソースのシステムモニタリングおよびアラート用ツールキットです。

重要

Red Hat 3scale の本リリースでは、Prometheus のインストールおよび設定はサポートされていません。オプションとして、コミュニティーバージョンの Prometheus を使用して、APIcast 管理下の API サービスのメトリクスおよびアラートを視覚化することができます。

Prometheus メトリクスの可用性

APIcast と Prometheus のインテグレーションは、以下のデプロイメントオプションで利用することができます。

  • Self-managed APIcast (ホスト型 API Management およびオンプレミス型 API Management 両方との組み合わせに対応)
  • Embedded APIcast (オンプレミス型 API Management)
注記

APIcast と Prometheus のインテグレーションは、ホスト型 API Management と Hosted APIcast の組み合わせでは利用することができません。

Prometheus メトリクスのリスト

以下のメトリクスは常に使用可能です。

メトリクス説明タイプラベル

nginx_http_connections

HTTP 接続の数

ゲージ

state (accepted、active、handled、reading、total、waiting、writing)

nginx_error_log

APIcast エラー

カウンター

level (debug、info、notice、warn、error、crit、alert、emerg)

openresty_shdict_capacity

ワーカー間で共有されるディクショナリーの容量

ゲージ

dict (すべてのディクショナリーで共通)

openresty_shdict_free_space

ワーカー間で共有されるディクショナリーの空き容量

ゲージ

dict (すべてのディクショナリーで共通)

nginx_metric_errors_total

メトリクスを管理する Lua ライブラリーのエラーの数

カウンター

-

total_response_time_seconds

クライアントにレスポンスを送信するのに必要な時間 (秒単位)

ヒストグラム

-

upstream_response_time_seconds

アップストリームサーバーからの応答時間 (秒単位)

ヒストグラム

-

upstream_status

アップストリームサーバーからの HTTP ステータス

counter

status

threescale_backend_calls

3scale バックエンド (Apisonator) に対する承認および報告リクエスト

カウンター

エンドポイント (authrep、auth、report)、ステータス (2xx、4xx、5xx)

以下のメトリクスは、3scale Batcher ポリシーを使用する場合にのみ使用可能です。

メトリクス説明タイプラベル

batching_policy_auths_cache_hits

3scale Batcher ポリシーの承認キャッシュのヒット数

カウンター

-

batching_policy_auths_cache_misses

3scale Batcher ポリシーの承認キャッシュのミス数

カウンター

-

値を持たないメトリクス

メトリクスが値を持たない場合には、メトリクスは非表示になります。たとえば、nginx_error_log に報告するエラーがない場合、nginx_error_log メトリックは表示されません。値を持った場合にのみ表示されます。

5.1.15. SOAP ポリシー

SOAP ポリシーでは、ポリシーで指定したマッピングルールを使用して、HTTP リクエストの SOAPAction または Content-Type ヘッダーにより提供される SOAP アクション URI との照合を行います。

設定プロパティー

プロパティー説明必須/任意

pattern

pattern プロパティーにより、APIcast がマッチを探す SOAPAction URI の文字列を指定することができます。

データタイプ: 文字列

必須

metric_system_name

metric_system_name プロパティーを使用して、マッチしたパターンがヒットを登録する 3scale バックエンドメトリクスを指定することができます。

データタイプ: 文字列 (有効な メトリクス でなければなりません)

必須

ポリシーオブジェクトの例

{
  "name": "soap",
  "version": "builtin",
  "configuration": {
    "mapping_rules": [
      {
        "pattern": "http://example.com/soap#request",
        "metric_system_name": "soap",
        "delta": 1
      }
    ]
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.16. Upstream ポリシー

Upstream ポリシーでは、正規表現を使用して Host リクエストヘッダーを解析し、プライベートベース URL で定義されたアップストリーム URL を別の URL に置き換えることができます。

例:

正規表現 /foo および URL フィールド newexample.com が設定されたポリシーが、URL https://www.example.com/foo/123/newexample.com に置き換える

ポリシーチェーンの参照

プロパティー説明必須/任意

regex

regex プロパティーを使用して、Upstream ポリシーがリクエストパスを照合する際に使用する正規表現を指定することができます。

データタイプ: 文字列 (有効な正規表現の構文でなければなりません)

必須

url

url プロパティーを使用して、マッチした場合に置き換える URL を指定することができます。Upstream ポリシーはこの URL が有効かどうかを確認しない点に注意してください。

データタイプ: 文字列 (有効な URL でなければなりません)

必須

ポリシーオブジェクトの例

{
  "name": "upstream",
  "version": "builtin",
  "configuration": {
    "rules": [
      {
        "regex": "^/v1/.*",
        "url": "https://api-v1.example.com",

      }
    ]
  }
}

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.17. URL Rewriting ポリシー

URL Rewriting ポリシーを使用すると、リクエストのパスおよびクエリー文字列を変更することができます。

3scale APIcast ポリシーと組み合わせる場合には、ポリシーチェーンで URL Rewriting ポリシーを 3scale APIcast ポリシーの前に設定すると、APIcast のマッピングルールは変更したパスに適用されます。ポリシーチェーンで URL Rewriting ポリシーを APIcast ポリシーの後に設定すると、マッピングルールは元のパスに適用されます。

このポリシーでは、以下の 2 つの操作セットがサポートされます。

  • commands: リクエストのパスを書き換えるために適用されるコマンドのリスト。
  • query_args_commands: リクエストのクエリー文字列を書き換えるために適用されるコマンドのリスト。

5.1.17.1. パスを書き換えるためのコマンド

commands リストの各コマンドは、以下の設定パラメーターで構成されます。

  • op: 適用される操作。設定可能なオプションは sub および gsub です。sub 操作では、指定した正規表現との最初のマッチだけが置き換えられます。gsub 操作では、指定した正規表現とのマッチがすべて置き換えられます。sub および gsub 操作に関するドキュメントを参照してください。
  • regex: 照合される Perl 互換の正規表現
  • replace: マッチした際に置き換えられる文字列
  • options (オプション): 正規表現との照合がどのように行われるかを定義するオプション。設定可能なオプションに関する情報は、OpenResty Lua モジュールプロジェクトのドキュメントの「ngx.re.match」セクションを参照してください。
  • break (オプション): true に設定すると (チェックボックスを選択する)、コマンドが URL を書き換えた場合、それが適用される最後のコマンドになります (リスト内の後続コマンドはすべて破棄されます)。

5.1.17.2. クエリー文字列を書き換えるためのコマンド

query_args_commands リストの各コマンドは、以下の設定パラメーターで構成されます。

  • op: クエリー引数に適用される操作。以下のオプションを設定することができます。

    • add: 既存の引数に値を追加します。
    • set: 引数が設定されていなければ作成し、設定されていればその値を置き換えます。
    • push: 引数が設定されていなければ作成し、設定されていれば値を追加します。
    • delete: 引数を削除します。
  • arg: 操作が適用されるクエリー引数の名前
  • value: クエリー引数に使用される値を指定します。値のタイプが「liquid」の場合には、値は {{ variable_from_context }} の形式にする必要があります。delete 操作の場合には、値を考慮する必要はありません。
  • value_type (オプション): クエリー引数の値がどのように評価されるかを定義します。プレーンテキストの場合の plain または Liquid テンプレートとして評価する場合の liquid いずれかに設定します。詳細は、「「ポリシーでの変数およびフィルターの使用」」を参照してください。指定しなければ、デフォルトではタイプ「plain」が使用されます。

URL Rewriting ポリシーは、以下のように設定します。

{
  "name": "url_rewriting",
  "version": "builtin",
  "configuration": {
    "query_args_commands": [
      {
        "op": "add",
        "arg": "addarg",
        "value_type": "plain",
        "value": "addvalue"
      },
      {
        "op": "delete",
        "arg": "user_key",
        "value_type": "plain",
        "value": "any"
      },
      {
        "op": "push",
        "arg": "pusharg",
        "value_type": "plain",
        "value": "pushvalue"
      },
      {
        "op": "set",
        "arg": "setarg",
        "value_type": "plain",
        "value": "setvalue"
      }
    ],
    "commands": [
      {
        "op": "sub",
        "regex": "^/api/v\\d+/",
        "replace": "/internal/",
        "options": "i"
      }
    ]
  }

APIcast に送信される元のリクエスト URI:

https://api.example.com/api/v1/products/123/details?user_key=abc123secret&pusharg=first&setarg=original

URL の書き換えを適用した後に APIcast が API バックエンドに送信する URI:

https://api-backend.example.com/internal/products/123/details?pusharg=first&pusharg=pushvalue&setarg=setvalue

以下の変換が適用されます。

  1. サブストリング /api/v1/ はパス書き換えコマンドだけにマッチし、/internal/ に置き換えられます。
  2. user_key クエリー引数は削除されます。
  3. pushvalue は追加の値として pusharg クエリー引数に追加されます。
  4. クエリー引数 setarg の値 original は、設定した値 setvalue に置き換えられます。
  5. クエリー引数 addarg は元の URL に存在しないため、コマンド add は適用されませんでした。

ポリシーの設定方法に関する情報は、本書の「3scale でのポリシーチェーンの作成」セクションを参照してください。

5.1.18. URL Rewriting with Captures ポリシー

URL Rewriting with Captures ポリシーは「URL Rewriting ポリシー」ポリシーの代替で、API リクエストの URL を API バックエンドに渡す前に書き換えることができます。

URL Rewriting with Captures ポリシーは URL の引数を取得し、その値を書き換えられる URL で使用します。

このポリシーでは transformations 設定パラメーターがサポートされます。これは、リクエスト URL に適用される変換を定義するオブジェクトのリストです。それぞれの変換オブジェクトは、以下の 2 つのプロパティーで構成されます。

  • match_rule: このルールは受信したリクエストの URL と照合されます。このルールには {nameOfArgument} 形式の名前付き引数を含めることができ、これらの引数を書き換えられる URL で使用することができます。URL は正規表現として match_rule と比較されます。名前付き引数と照合する値には、[\w-.~%!$&'()*,;=@:] の文字しか使用することができません (PCRE 正規表現表記)。他の正規表現トークンを match_rule の表記で使用することができます。たとえば、文字列先頭の ^ および文字列末尾の $ 等です。
  • template: URL のテンプレートで、これにより元の URL が書き換えられます。match_rule からの名前付き引数を使用することができます。

元の URL のクエリーパラメータは、template で指定したクエリーパラメータとマージされます。

URL Rewriting with Captures ポリシーは、以下のように設定します。

{
  "name": "rewrite_url_captures",
  "version": "builtin",
  "configuration": {
    "transformations": [
      {
        "match_rule": "/api/v1/products/{productId}/details",
        "template": "/internal/products/details?id={productId}&extraparam=anyvalue"
      }
    ]
  }
}

APIcast に送信される元のリクエスト URI:

https://api.example.com/api/v1/products/123/details?user_key=abc123secret

URL の書き換えを適用した後に APIcast が API バックエンドに送信する URI:

https://api-backend.example.com/internal/products/details?user_key=abc123secret&extraparam=anyvalue&id=123

5.2. 標準ポリシーの有効化

管理ポータルでポリシーを有効にするには、以下の手順を実施します。

  1. 3scale にログインします。
  2. API service に移動します。
  3. [your_API_name] > Integration > Configuration の順に移動し、edit APIcast configuration を選択します。
  4. POLICIES セクションで Add Policy をクリックします。
  5. 追加するポリシーを選択し、必須フィールドに入力します。
  6. Update & test in Staging Environment ボタンをクリックし、ポリシーチェーンを保存します。

5.3. カスタム APIcast ポリシーの作成

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

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

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

5.4. APIcast へのカスタムポリシーの追加

カスタムポリシーを作成したら、それを APIcast に追加する必要があります。その手順は、APIcast がデプロイされている場所により異なります。

以下に示す Self-managed APIcast デプロイメントに、カスタムポリシーを追加することができます。

  • Embedded APIcast ゲートウェイ (OpenShift 上の 3scale オンプレミスデプロイメントの一部)
  • OpenShift および Docker コンテナー環境上の APIcast

カスタムポリシーを Hosted APIcast に追加することはできません。

警告

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

5.4.1. APIcast ビルトインへのカスタムポリシーの追加

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

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

警告

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

カスタムポリシーをオンプレミスデプロイメントに追加するには、以下の手順に従います。

  1. https://github.com/3scale/apicast-example-policy (ポリシーの例が含まれる公開リポジトリー) をフォークするか、そのコンテンツが含まれるプライベートリポジトリーを作成します。OpenShift がイメージをビルドするには、Git リポジトリーでカスタムポリシーのコードが必要です。プライベート Git リポジトリーを使用するには、OpenShift でシークレットを設定する必要がある点に注意してください。
  2. リポジトリーをローカルにクローンし、ポリシーの実装を追加し、変更をご自分の Git リポジトリーにプッシュします。
  3. 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 がソースとして使用する。これによりダグの一貫性が維持されます)。
  4. 以下のコマンドを実行して OpenShift オブジェクトを作成します。

    oc new-app -f openshift.yml --param AMP_RELEASE=2.3.0
  5. ビルドが自動的に開始されない場合には、以下の 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 ページに移動し、Add Policy ボタンをクリックしてご自分のカスタムポリシーがリストに表示されるのを確認します。カスタムポリシーを選択して設定したら、Update & test in Staging Environment をクリックし、カスタムポリシーをステージング APIcast で動作状態にします。

5.4.2. 別の OpenShift Container Platform 上の APIcast へのカスタムポリシーの追加

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

別の OpenShift Container Platform 上の APIcast にカスタムポリシーを追加します

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

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

    oc new-app -f customizedApicast.yml

5.5. AMP におけるポリシーチェーンの作成

APIcast ゲートウェイ設定の一部として、AMP にポリシーチェーンを作成します。UI でポリシーチェーンを変更するには、以下の手順に従います。

  1. AMP にログインします。
  2. API サービスに移動します。

    navigate to APIcast integrations page
  3. [your_API_name] > Integration > Configuration の順に移動し、edit APIcast configuration を選択します。

    navigate to APIcast configuration page
  4. POLICIES セクションで、矢印アイコンを使用してポリシーチェーン内のポリシーの順番を変更します。必ず APIcast ポリシーをポリシーチェーンの最後に設定します。

    policyChainOverview
  5. Update & test in Staging Environment ボタンをクリックし、ポリシーチェーンを保存します。

5.6. ポリシーチェーン JSON 設定ファイルの作成

APIcast のネイティブデプロイメントを使用している場合には、JSON 設定ファイルを作成して、AMP の外部でポリシーチェーンを制御することができます。

ポリシーチェーン JSON 設定ファイルには、以下の情報で構成される JSON 配列が含まれます。

  • services オブジェクト (id の値 (ポリシーチェーンが適用されるサービスを指定する数字) が含まれる)
  • proxy オブジェクト (policy_chain オブジェクトおよび下位オブジェクトが含まれる)
  • policy_chain オブジェクト (ポリシーチェーンを定義する値が含まれる)
  • 個々の policy オブジェクト (ポリシーを識別しポリシーの動作を設定するのに必要な name および configuration データの両方を指定する)

カスタムポリシー sample_policy_1 および標準の API イントロスペクションポリシー token_introspection で構成されるポリシーチェーンの例を、以下に示します。

{
  "services":[
    {
      "id":1,
      "proxy":{
        "policy_chain":[
          {
            "name":"sample_policy_1", "version": "1.0",
            "configuration":{
              "sample_config_param_1":["value_1"],
              "sample_config_param_2":["value_2"]
            }
          },
          {
            "name": "token_introspection", "version": "builtin",
            "configuration": {
              introspection_url:["https://tokenauthorityexample.com"],
              client_id:["exampleName"],
              client_secret:["secretexamplekey123"]
          },
          {
             "name": "apicast", "version": "builtin",
          }
        ]
      }
    }
  ]
}

すべてのポリシーチェーンには、内蔵のポリシー apicast を含める必要があります。APIcast をポリシーチェーンのどこに設定したかによって、ポリシーの動作が変わります。

第6章 ポリシーチェーンと APIcast ネイティブデプロイメントのインテグレーション

ネイティブ APIcast デプロイメントの場合、THREESCALE_CONFIG_FILE 環境変数を使用して設定ファイルを指定することにより、カスタムポリシーチェーン を統合することができます。以下の例では、設定ファイル example.json を指定しています。

THREESCALE_CONFIG_FILE=example.json bin/apicast

6.1. ポリシーでの変数およびフィルターの使用

一部の「APIcast 標準ポリシー」では Liquid テンプレートがサポートされます。Liquid テンプレートにより、通常の文字列値だけでなくリクエストのコンテキストに存在する変数も使用することができます。

コンテキスト変数を使用するには、その名前を {{ および }} で囲みます (例: {{ uri }})。変数がオブジェクトの場合には、その属性にもアクセスすることができます (例: {{ somevar.attr }})。

すべてのポリシーで使用することのできる標準の変数を以下に示します。

  • uri: クエリーパラメーターを含まないリクエストのパス (埋め込まれた NGINX 変数 $uri の値)。
  • host: リクエストのホスト (組み込まれた NGINX 変数 $host の値)
  • remote_addr: クライアントの IP アドレスト (組み込まれた NGINX 変数 $remote_addr の値)
  • headers: リクエストヘッダーが含まれるオブジェクト。特定のヘッダーの値を取得するには、{{headers['Some-Header']}} を使用します。
  • http_method: リクエストのメソッド (GET、POST 等)

変数は、リクエストの コンテキスト で使用できます。ポリシーは、追加の変数をコンテキストに追加できます。これらの変数は、変数が追加されたフェーズの後に使用されるフェーズが実行される場合、ポリシーチェーン内の同じポリシーまたは他のポリシーで使用できます。変数が追加されたポリシーの後に表示されるポリシーで変数が使用されている場合も、同じフェーズになる可能性があります。

標準の 3scale APIcast ポリシーでコンテキストに追加される変数の例を以下に示します。

  • jwt: 解析された JWT トークンの JSON ペイロード (OpenID Connect 認証用)
  • credentials: アプリケーションのクレデンシャルを保持するオブジェクト。たとえば "app_id": "972f7b4f""user_key": "13b668c4d1e10eaebaa5144b4749713f" 等。
  • service: 現在のリクエストが処理されるサービスの設定を保持するオブジェクト。たとえば、サービス ID は {{ service.id }} として利用可能です。

コンテキストで使用することのできるオブジェクトおよび値の完全なリストは、「Liquid Context Debug ポリシー」を参照してください。

変数は Liquid テンプレートの機能を活用して使用されます。たとえば {{ remote_addr }}{{ headers['Some-Header'] }}{{ jwt.aud }} 等。値に変数をサポートするポリシーは、_type 接尾辞が付く特殊なパラメーターを持ちます (例: value_typename_type 等)。このパラメーターには、2 つの値を設定することができます (プレーンテキストの場合の「plain」および liquid テンプレートの場合の「liquid」)。

APIcast では、変数の値に適用することのできる Liquid フィルターもサポートされます。フィルターは Liquid 変数の値に NGINX 関数を適用します。

フィルターは変数出力タグ {{ }} で囲み、変数の名前または実際の値、パイプ記号 |、およびフィルター名の順に定義します。例: {{ 'username:password' | encode_base64 }}{{ uri | escape_uri }}

パラメーターを必要としないフィルターもあります。この場合には、変数の代わりに空の文字列を使用することができます。たとえば、{{ '' | utctime }} は現在の時刻を TUC タイムゾーンで返します。

フィルターは、{{ variable | function1 | function2 }} のようにつなげることができます。たとえば {{ '' | utctime | escape_uri }}

利用可能な関数のリストを以下に示します。

第7章 APIcast の環境変数

APIcast の環境変数を使用すると、APIcast の動作を変更することができます。サポートされている環境変数の値を以下に示します。

注記
  • サポートされていない環境変数および非推奨の環境変数は記載されていません
  • 一部の環境変数の機能は、APIcast ポリシーに移されています

APICAST_BACKEND_CACHE_HANDLER

: strict | resilient

デフォルト: strict

非推奨: この環境変数の代わりに、Caching ポリシーを使用してください。

バックエンドにアクセスすることができない場合に、承認キャッシュがどのように動作するかを定義します。strict に設定すると、バックエンドにアクセスすることができない場合にキャッシュされたアプリケーションを削除します。resilient に設定すると、バックエンドから承認が拒否された場合にのみキャッシュされたアプリケーションを削除します。

APICAST_CONFIGURATION_CACHE

: 数字

デフォルト: 0

設定を保存する間隔 (秒単位) を指定します。0 (ブート値の APICAST_CONFIGURATION_LOADER との互換性はない) または 60 より大きい値を設定する必要があります。たとえば、APICAST_CONFIGURATION_CACHE を 120 に設定すると、ゲートウェイは 2 分 (120 秒) ごとに設定を API Manager から読み込み直します。負の値を設定すると、再読み込みは無効になります。

APICAST_CONFIGURATION_LOADER

: boot | lazy

デフォルト: lazy

設定の読み込み方法を定義します。boot に設定すると、ゲートウェイの起動時に API Manager に設定を要求します。lazy に設定すると、リクエストを受信するたびに設定を読み込みます (リクエストのたびに完全にリフレッシュするには、APICAST_CONFIGURATION_CACHE を 0 に設定する必要があります)。

APICAST_CUSTOM_CONFIG

非推奨: この環境変数の代わりに、policies を使用してください。

既存の APIcast ロジックをオーバーライドするカスタムロジックを実装する Lua モジュールの名前を定義します。

APICAST_ENVIRONMENT

デフォルト:

: 文字列[:]

: production:cloud-hosted

APIcast が読み込む環境 (またはパス) のコロン (:) 区切りリスト。CLI の -e または ---environment パラメーターの代わりに使用することができ、たとえばデフォルト環境としてコンテナーイメージに保存されます。CLI で渡される値は、常にこの変数に優先します。

APICAST_LOG_FILE

デフォルト: stderr

OpenResty エラーログが含まれるファイルを定義します。このファイルは、bin/apicasterror_log ディレクティブで使用されます。詳細は、NGINX のドキュメント を参照してください。ファイルパスは、絶対パスまたは APIcast プリフィックスディレクトリーへの相対パスのいずれかで指定します。デフォルトのプリフィックスディレクトリーは APIcast である点に注意してください。

APICAST_LOG_LEVEL

: debug | info | notice | warn | error | crit | alert | emerg

デフォルト: warn

OpenResty ログのログレベルを指定します。

APICAST_ACCESS_LOG_FILE

デフォルト: stdout

アクセスログを保存するファイルを定義します。

APICAST_OIDC_LOG_LEVEL

: debug | info | notice | warn | error | crit | alert | emerg

デフォルト: err

OpenID Connect インテグレーションに関するログのログレベルを設定することができます。

APICAST_MANAGEMENT_API

:

  • disabled: 完全に無効で、ポートをリッスンするだけの状態
  • status: ヘルスチェック用に、/status/ エンドポイントだけが有効な状態
  • debug: API 全体がオープンな状態

Management API の機能は強力で、APIcast の設定を制御することができます。debug レベルは、デバッグ用途にのみ有効にしてください。

APICAST_MODULE

デフォルト: apicast

非推奨: この環境変数の代わりに、policies を使用してください。

API ゲートウェイロジックを実装するメインの Lua モジュール名を指定します。カスタムモジュールは、デフォルトの apicast.lua モジュールの機能に優先します。モジュールの使用方法の を参照してください。

APICAST_PATH_ROUTING

:

  • 真の場合には true または 1
  • 偽の場合には false0、または空欄

このパラメーターを true に設定すると、ゲートウェイはデフォルトのホストベースのルーティングに加えて、パスベースのルーティングを使用します。API リクエストは、リクエストの Host ヘッダーの値が Public Base URL にマッチするサービスの中で、マッピングルールが最初にマッチするサービスにルーティングされます。

APICAST_POLICY_LOAD_PATH

デフォルト: APICAST_DIR/policies

: 文字列[:]

: ~/apicast/policies:$PWD/policies

APIcast がポリシーを探すパスのコロン (:) 区切りリスト。開発用ディレクトリーから最初にポリシーを読み込む場合や、例を読み込む場合に使用することができます。

APICAST_PROXY_HTTPS_CERTIFICATE_KEY

デフォルト:

: 文字列

: /home/apicast/my_certificate.key

クライアント SSL 証明書の鍵へのパス

APICAST_PROXY_HTTPS_CERTIFICATE

デフォルト:

: 文字列

: /home/apicast/my_certificate.crt

APIcast がアップストリームと接続する際に使用するクライアント SSL 証明書へのパス。この証明書が設定内のすべてのサービスに使用される点に注意してください。

APICAST_PROXY_HTTPS_PASSWORD_FILE

デフォルト:

: 文字列

: /home/apicast/passwords.txt

APICAST_PROXY_HTTPS_CERTIFICATE_KEY で指定する SSL 証明書の鍵のパスフレーズが含まれるファイルへのパス

APICAST_PROXY_HTTPS_SESSION_REUSE

デフォルト: on

:

  • on: SSL セッションを再利用します。
  • off: SSL セッションを再利用しません。

APICAST_REPORTING_THREADS

デフォルト: 0

: 0 または正の整数

実験的機能: 負荷が極端に大きい場合のパフォーマンスは予測が不可能で、レポートが失われる可能性があります。

0 より大きい値を設定すると、バックエンドへの非同期のレポートが有効になります。これは、パフォーマンスを向上させるための新たな 実験的 機能です。クライアントにはバックエンドのレイテンシーは適用されず、すべてが非同期状態で処理されます。この値により、同時に実行することのできる非同期レポートの数を決定します。レポート数がこの値を超えると、クライアントにスロットリングが適用され、レイテンシーが追加されます。

APICAST_RESPONSE_CODES

:

  • 真の場合には true または 1
  • 偽の場合には false0、または空欄

デフォルト: 空欄 (false)

true に設定すると、APIcast は API バックエンドから返されたレスポンスのレスポンスコードを 3scale に記録します。一部のプランでは、この情報を後で 3scale 管理ポータルから参照することができます。レスポンスコード機能の詳細は、3scale サポートサイト を参照してください。

APICAST_SERVICES_LIST

: サービス ID のコンマ区切りリスト

この環境変数を使用して、3scale API Manager で設定されているサービスにフィルターを適用し、特定サービスの設定だけをゲートウェイで使用し、リストで指定されていないサービス ID を無視することができます。サービス ID は、Dashboard > API ページにあり、API 呼び出しの ID としてタグ付けされています。

APICAST_SERVICE_${ID}_CONFIGURATION_VERSION

${ID} を実際のサービス ID に置き換えてください。値は、管理ポータルの設定履歴に表示される設定バージョンにする必要があります。特定のバージョンに設定すると自動更新されなくなり、常にそのバージョンが使用されます。

APICAST_WORKERS

デフォルト: auto

: 数字 | auto

この値は、nginx の worker_processes ディレクティブ で使用されます。1 が使用される開発環境を除き、デフォルトの APIcast では auto が使用されます。

BACKEND_ENDPOINT_OVERRIDE

設定からのバックエンドエンドポイントをオーバーライドする URI。OpenShift がデプロイした AMP の外部にデプロイする際に役立ちます。: https://backend.example.com

OPENSSL_VERIFY

:

  • 0false: ピア検証を無効にします
  • 1true: ピア検証を有効にします

OpenSSL ピア検証を制御します。OpenSSL はシステム証明書ストアを使用することができないため、デフォルトではオフになっています。カスタム証明書バンドルを信頼済み証明書に追加する必要があります。

lua_ssl_trusted_certificate を使用して、export-builtin-trusted-certs により生成される証明書バンドルをポイントすることを推奨します。

RESOLVER

OpenResty で使用されるカスタム DNS リゾルバーを指定することができます。RESOLVER パラメーターが空欄の場合には、DNS リゾルバーは自動検出されます。

THREESCALE_CONFIG_FILE

ゲートウェイの設定が含まれる JSON ファイルへのパス。設定は 3scale の管理ポータルから URL: <schema>://<admin-portal-domain>/admin/api/nginx/spec.json を使ってダウンロードできます (: https://account-admin.3scale.net/admin/api/nginx/spec.json).

Docker を使用してゲートウェイをデプロイしている場合には、ファイルを読み取り専用ボリュームとして docker イメージにインジェクトする必要があります。この場合、パスにボリュームのマウント先 (たとえば docker コンテナーのローカルパス) を含めます。

設定ファイルの例については、examples フォルダーを参照してください。

ゲートウェイが正常に動作するには、THREESCALE_PORTAL_ENDPOINT または THREESCALE_CONFIG_FILE (優先) を指定する 必要があります

THREESCALE_DEPLOYMENT_ENV

: staging | production

デフォルト: production

この環境変数の値を使用して、新しい APIcast を使用する際に 3scale から設定をダウンロードする環境 (ステージングまたは実稼働) を定義します。

この値は、3scale Service Management API への承認/レポートリクエストのヘッダー X-3scale-User-Agent でも使用されます。この値は、3scale では統計のためだけに使用されます。

THREESCALE_PORTAL_ENDPOINT

パスワードおよびポータルエンドポイントが含まれる <schema>://<password>@<admin-portal-domain> 形式の URI。<password> は、プロバイダーキー または 3scale Account Management API の アクセストークン のいずれかです。<admin-portal-domain> は、管理ポータルにログインするための URL です。

: https://access-token@account-admin.3scale.net

THREESCALE_PORTAL_ENDPOINT 環境変数を指定すると、ゲートウェイは初期化時に 3scale から設定をダウンロードします。この設定には、API の Integration ページで指定したすべての設定が含まれます。

ゲートウェイが正常に動作するには、THREESCALE_PORTAL_ENDPOINT または THREESCALE_CONFIG_FILE (優先) を指定する 必要があります

OPENTRACING_TRACER

: jaeger

この環境変数は、読み込むトレースライブラリーを制御します。現時点では、OpenTracing のトレーサーとして利用可能なのは jaeger だけです。

空欄の場合には、OpenTracing のサポートは無効です。

OPENTRACING_CONFIG

この環境変数は、OpenTracing トレーサーの設定ファイルを定義するのに使用されます。OPENTRACING_TRACER が設定されていない場合には、この変数は無視されます。

それぞれのトレーサーには、デフォルトの設定ファイル * jaeger: conf.d/opentracing/jaeger.example.json があります。

この変数を使用してファイルパスを設定することにより、デフォルトで提供されるものとは異なる設定をマウントすることができます。

: /tmp/jaeger/jaeger.json

OPENTRACING_HEADER_FORWARD

デフォルト: uber-trace-id

この環境変数は、OpenTracing の情報を転送するのに使用される HTTP ヘッダーを制御します。この HTTP ヘッダーは、アップストリームサーバーに転送されます。

APICAST_HTTPS_PORT

デフォルト: 値なし

HTTPS 接続用に APIcast がリッスンを開始するポートを制御します。この設定が HTTP 用ポートと競合する場合には、HTTPS 用にだけ使用されます。

APICAST_HTTPS_CERTIFICATE

デフォルト: 値なし

HTTPS 接続用 X.509 証明書が含まれる PEM 形式ファイルへのパス

APICAST_HTTPS_CERTIFICATE_KEY

デフォルト: 値なし

X.509 証明書の秘密鍵が含まれる PEM 形式ファイルへのパス

all_proxyALL_PROXY

デフォルト: 値なし : 文字列 : http://forward-proxy:80

プロトコル固有のプロキシーが指定されていない場合に、サービスへの接続に使用される HTTP プロキシーを定義します。認証機能はサポートされていません。

http_proxyHTTP_PROXY

デフォルト: 値なし : 文字列 : http://forward-proxy:80

HTTP サービスへの接続に使用される HTTP プロキシーを定義します。認証機能はサポートされていません。

https_proxyHTTPS_PROXY

デフォルト: 値なし : 文字列 : https://forward-proxy:443

HTTPS サービスへの接続に使用される HTTP プロキシーを定義します。認証機能はサポートされていません。

no_proxyNO_PROXY

デフォルト: 値なし : string\[,<string>\]; * : foo,bar.com,.extra.dot.com

リクエストをプロキシーすべきではないホスト名およびドメイン名のコンマ区切りリストを定義します。* 1 文字 (すべてのホストとマッチする) を設定すると、実質的にプロキシーは無効になります。