8.6. 3scale OpenAPI カスタムリソースのデプロイ
OpenAPI
カスタムリソース (CR) は、開発者ポータルの ActiveDocs に使用できる OpenAPI Specification(OAS) ドキュメントをインポートする 1 つの方法です。OAS は、API に対して使用できるプログラミング言語が特定のものだけに限定されないようにする規格です。人間とコンピューターは、ソースコードのアクセス、ドキュメント、またはネットワークトラフィックの検査なしに API プロダクトの機能をより簡単に理解することができます。
前提条件
- オンプレミス型 3scale 2.11 インスタンスの管理者権限を持つユーザーアカウント
- API を定義する OAS ドキュメント
-
OpenAPI
CR がテナントにリンクする方法に関する理解
8.6.1. シークレットから OAS ドキュメントをインポートする 3scale OpenAPI カスタムリソースのデプロイ
3scale バックエンド および プロダクト を作成できるように、OpenAPI
カスタムリソース (CR) をデプロイします。
Operator はシークレットのコンテンツのみを読み取ります。Operator はシークレットのフィールド名を読み取りません。
前提条件
手順
OAS ドキュメントが含まれるシークレットを定義します。たとえば、以下の内容で
myoasdoc1.yaml
を作成することができます。openapi: "3.0.2" info: title: "some title" description: "some description" version: "1.0.0" paths: /pet: get: operationId: "getPet" responses: 405: description: "invalid input"
シークレットを作成します。以下に例を示します。
$ oc create secret generic myoasdoc1 --from-file myoasdoc1.yaml secret/myoasdoc1 created
OpenAPI
CR を定義します。OAS ドキュメントが含まれるシークレットへの参照を指定するようにしてください。たとえば、myopenapicr1.yaml
ファイルを作成することができます。apiVersion: capabilities.3scale.net/v1beta1 kind: OpenAPI metadata: name: myopenapicr1 spec: openapiRef: secretRef: name: myoasdoc1
定義したばかりのリソースを作成します。以下に例を示します。
$ oc create -f myopenapicr1.yaml
この例では、出力は以下のようになります。
openapi.capabilities.3scale.net/myopenapicr1 created
8.6.2. 3scale OpenAPI カスタムリソース定義の機能
OpenAPI
カスタムリソース定義 (CRD) のデプロイメント機能に関する知識は、3scale プロダクトの設定、バックエンド、およびその後の開発者ポータル用の ActiveDocs の作成に役立ちます。
OAS ドキュメントは、以下から読み込むことができます。
- Kubernetes シークレット
- http および https 形式の両方の URL
-
OAS ドキュメントでは、
info.title
設定は 215 文字を超えることができません。Operator はこの設定を使用して、長さの制限がある OpenShift オブジェクト名を作成します。 -
サーバーリストの最初の
servers[0].url
要素のみがプライベート URL として解析されます。OpenAPI Specification(OAS) は、servers[0].url
要素のbasePath
コンポーネントを使用します。 -
OpenAPI
CRD は単一の最上位のセキュリティー要件をサポートしますが、運用レベルのセキュリティーはサポートしません。 -
OpenAPI
CRD はapiKey
セキュリティースキームをサポートします。
8.6.3. OpenAPI カスタムリソースを定義する際のインポートルール
インポートルールは、3scale デプロイメントの OpenAPI ドキュメントを設定する際に、OpenAPI Specification(OAS) が 3scale とどのように機能するかを指定します。
プロダクト名
デフォルトのプロダクトシステム名は、OpenAPI ドキュメントの info.title
フィールドから取得されます。OpenAPI ドキュメントのプロダクト名を上書きするには、OpenAPI
カスタムリソース (CR) の spec.productSystemName
フィールドを指定します。
プライベートベース URL
プライベートベース URL は OpenAPI
CR servers[0].url
フィールドから読み込まれます。OpenAPI
CR の spec.privateBaseURL
フィールドを使用して、これを上書きできます。
3scale メソッド
インポートされた OpenAPI ドキュメントで定義される各操作は、プロダクトレベルで 1 つの 3scale メソッドに変換されます。メソッド名は、操作オブジェクトの operationId
フィールドから読み取られます。
3scale のマッピングルール
インポートされた OpenAPI ドキュメントで定義される各操作は、プロダクトレベルで 1 つの 3scale マッピングルールに変換されます。以前の既存のマッピングルールは OpenAPI
CR でインポートされたルールに置き換えられました。
OpenAPI ドキュメントでは、paths
オブジェクトは動詞およびパターンプロパティーのマッピングルールを提供します。3scale メソッドは operationId
に応じて関連付けられます。
delta の値は 1
にハードコーディングされます。
デフォルトでは、Strict マッチング ポリシーが設定されます。マッチングポリシーは、OpenAPI
CRD の spec.PrefixMatching
フィールドを使用して、接頭辞マッチング に切り替えることができます。
認証
1 つのトップレベルのセキュリティー要件のみがサポートされます。操作レベルのセキュリティー要件はサポートされていません。
サポートされるセキュリティースキームは apiKey
です。
apiKey
セキュリティースキームタイプ:
-
クレデンシャルの場所 は、セキュリティースキームオブジェクトの OpenAPI ドキュメント
in
フィールドから読み込まれます。 -
認証ユーザー キーは、セキュリティースキームオブジェクトの OpenAPI ドキュメント
name
フィールドから読み込まれます。
以下は、apiKey
セキュリティー要件のある OAS 3.0.2 の例の一部です。
openapi: "3.0.2" security: - petstore_api_key: [] components: securitySchemes: petstore_api_key: type: apiKey name: api_key in: header
OpenAPI ドキュメントがセキュリティー要件を指定しない場合、以下が適用されます。
-
プロダクト認証が
apiKey
に設定されます。 -
クレデンシャルの場所 はデフォルトで 3scale の値
As query parameters (GET) or body parameters (POST/PUT/DELETE)
に設定されます。 -
Auth ユーザー キーはデフォルトで 3scale の値
user_key
に設定されます。
3scale 認証セキュリティー は、OpenAPI
CRD の spec.privateAPIHostHeader
フィールドおよび spec.privateAPISecretToken
フィールドを使用して設定できます。
ActiveDocs
3scale ActiveDoc は作成されていません。
3scale プロダクトポリシーチェーン
3scale ポリシーチェーンは、3scale が作成するデフォルトのポリシーチェーンです。
3scale デプロイメントモード
デフォルトでは、設定した 3scale デプロイメントモードは APIcast 3scale により管理されます。しかし、spec.productionPublicBaseURL
または spec.stagingPublicBaseURL
、あるいは両方のフィールドが OpenAPI
CR にある場合、プロダクトのデプロイメントモードは APIcast で自己管理されます。
カスタム公開ベース URL を持つ OpenAPI
CR の例:
apiVersion: capabilities.3scale.net/v1beta1 kind: OpenAPI metadata: name: openapi1 spec: openapiRef: url: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml" productionPublicBaseURL: "https://production.my-gateway.example.com" stagingPublicBaseURL: "https://staging.my-gateway.example.com"
8.6.4. URL から OAS ドキュメントをインポートする 3scale OpenAPI カスタムリソースのデプロイ
指定した URL から OAS ドキュメントをインポートする OpenAPI
カスタムリソースをデプロイできます。その後、この OAS ドキュメントを、デベロッパーポータルで API の ActiveDocs の基礎として使用できます。
前提条件
同じ namespace にある 3scale インスタンスのデフォルトのテナントにリンクしない
OpenAPI
カスタムリソースを作成する場合、OpenAPI
CR が含まれる namespace には、OpenAPI
CR がリンクするテナントを特定するシークレットが含まれます。シークレットの名前は以下のいずれかになります。-
threescale-provider-account
- ユーザー定義
このシークレットには、3scale インスタンスの URL と、3scale インスタンスの 1 つのテナントにアクセスするためのクレデンシャルが含まれるトークンが含まれます。
-
手順
- OpenShift アカウントで、Operators > Installed operators に移動します。
- 3scale operator をクリックします。
- YAML タブを選択します。
OpenAPI
カスタムリソースを作成します。以下に例を示します。apiVersion: capabilities.3scale.net/v1beta1 kind: OpenAPI metadata: name: openapi1 spec: openapiRef: url: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml" providerAccountRef: name: mytenant
-
Save をクリックします。3scale operator が
OpenAPI
CR を作成するまでに数秒かかります。
検証
-
OpenShift の 3scale Product Overview ページで、Synced 状態が
True
とマークされていることを確認します。 - 3scale アカウントに移動します。
-
OAS ドキュメントが存在することを確認します。上記の例では、
openapi1
という名前の新しい OAS ドキュメントが表示されます。