APIルーティング
APIGWは、API単位のルーティングリソースを管理します。すべてのルーティングリソースは、アクションパイプラインを保有し、リクエストとレスポンスのメッセージに様々な加工を行うことができます。また、カスタムスクリプトを埋め込んでマイクロワークフローを駆動させることでステートレスなマッシュアップを実現することもできます。
以下はアクションパイプラインの機能配置図です。
経路選択アルゴリズム
API Gatewayは、リクエストを受信したときにルーティング戦略を計画します。リクエストヘッダと起動パラメータは、次のルーティング戦略を決定します。
Strategy | Condition | description |
---|---|---|
Delegate | 起動パラメータ--force_delegation_mode=True |
上位のAPIGatewayに転送します。 |
Direct | X-Xaas-Direct-Routing が指定されている |
X-Xaas-Direct-Routing で指定されたURLに転送します。 |
Static | X-Xaas-Static-Routing が指定されている |
ルートエントリのターゲットエンドポイントをX-Xaas-Static-Routing で指定されたエンドポイントに変換します。 |
Tunneling | X-Xaas-Tunneling が指定されている |
カプセル化されたリクエスト本文からヘッダ、パラメータ、本文をデコードして新しいHTTPリクエストを作成し、ルートエントリのターゲットエンドポイントに転送します。 |
Standard | 経路制御拡張ヘッダが含まれていない | ルートエントリのターゲットエンドポイントに転送します。 |
Hierarchical | ルーティング未定義で且つ--hierarchical_routing_mode=True |
上位のAPIGatewayに転送します。 |
Tip
リージョナルなサービスのエンドポイントがターゲットの場合、APIルーティングにエンドポイントを固定化できないため、Scenarioなどのプラグインでエンドポイントを選定してX-Xaas-Static-Routing
にセットしてAPI Gatewayに送信することで動的にターゲットを切り替える手法が最適です。ScenarioからのcalloutにX-Xaas-Static-Routing
拡張ヘッダを埋め込む方法は、リファレンス>>組込関数のcallout
を参照してください。
Note
-
Tunneling
を利用する場合、X-Xaas-Tunneling
拡張ヘッダにはスーパーAPI鍵を指定する必要があります。 -
Delegate
とHierarchical
は、起動パラメータで上位のAPI Gatewayを指定しておく必要があります。--superior_apigw_host={host} --superior_apigw_port={port}
Tip
標準ルーティングStandard
はVRF機能が適用されます。柔軟なエンドポイントスイッチングは、複数のDevOps環境で役立ちます。
ルーティングプレーンは、GUIを使用していつでも簡単に変更できます。
また、実稼働環境などで誤ってVRF切替が発生しないようにプレーンを固定したい場合は、以下のように起動パラメータで指定してください。
Ex) --plane=prod
アクションパイプライン
APIルーティングはリクエスト、レスポンスに対する様々なアクションを適用できるアクションパイプラインを持ちます。アクションパイプラインで利用できる各機能ブロックを以下に解説しています。
Out of service
API閉塞を制御する機能です。閉塞状態でリクエストを受信した場合に返却する応答はカスタマイズできます。デフォルトでは503 Service Unavailable
が返却されます。
Tip
OUS
ブロックを通過した後、X-Xaas-Schedule-Datetime
がリクエストヘッダで指定されている場合、それはスケジュールサービスにWebフック予約されます。時間形式は%Y-%m-%d%H:%M:%S
です。つまり、APIGWに登録されているすべてのAPIは、絶対時刻を指定する予約可能なAPIになります。予約されたリクエストに対する応答は、202 Accepted
で応答本文には、予約IDが格納されます。
In service time
APIが稼働する時間を制限できる機能です。設定された開始時刻と終了時刻の間のアクセスのみを許可し、アクセスが許可されていない時間帯は、503 Service Unavailable
を応答します。応答コードや本文は、Out of service
機能にデフォルトのOUS応答を設定することでカスタマイズすることもできます。
Proxy authorization
リクエスト認可を行う機能です。BASIC認証
、Digest認証
、Keystone認証
、およびQmonus独自認証
をサポートしています。
Pop header
指定されたキーに合致するリクエストヘッダを除去する機能です。
Push header
指定されたヘッダをリクエストヘッダに追加する機能です。
Queuing
リクエストをキューイングして非同期化する機能です。
Note
キューの設定パラメータは次のとおりです。
enable
: キューイングを有効にするかどうかを指定します。デフォルトはFalse
です。
queue_type
: キュータイプは、serial
とparallel
の2つのタイプから選択できます。serial
では、1つのワーカーがキューを消費し、一度に1つのタスクをシリアルで処理します。parallel
の場合、複数のワーカーがキューを消費し、タスクを並行して処理します。parallel
の場合、各ワーカーは起動パラメーター--parallel_queue_bulk_read_size
で指定された数までタスクをデキューし、それらをまとめて処理します。APIGWが2コア3クラスターおよび--parallel_queue_bulk_read_size=32
で実行されている場合、2 * 3 * 32 = 192
多重で動作します。
max_residence_time
: キュー内の最大滞留時間を秒単位で指定します。この秒数を超えてキューにとどまると、破棄されます。
accept_response
: 開発者がキューイング後の応答をカスタマイズしたい場合に、HTTP応答コードと本文を設定できます。
accept_response
を指定しない場合、次のデフォルトの応答が返されます。
type: object
required:
- taskid
- status
- content
properties:
taskid:
type: string
description: The identifier of the queued task.
status:
type: string
description: Task processing status
content:
type: object
properties:
registration_time:
description: Entry time to the task queue
type: string
max_residence_time:
description: Maximum residence time
type: integer
expire_time:
description: Expiration time
type: string
request:
type: object
properties:
url:
type: string
headers:
type: object
method:
type: string
body:
type: string
description: Queued HTTP request content
Tip
デフォルトの応答に含まれるtaskid
で実行されたタスクの応答を取得できます。ただし、max_residence_time
を超えるとタスクの応答が消えるので、設定には注意が必要です。
タスクの実行結果は、以下のAPIで取得できます。
GET /queues/{taskid}
GET /queues/{taskid}
の応答は、上記のデフォルトの202 Accepted
応答と同じスキーマです。
タスクステータス値の意味は次のとおりです。
Waiting
: まだ待ち行列にあります
Processing
: タスクは処理中です
Processed
: タスクが処理されました
Discarded
: タスクは破棄されました
参考: キューイングと消費の基本シーケンス図
Target authentication
ターゲットへの認証を代行する機能です。BASIC認証
、Digest認証
、Keystone認証
、OAuth認証
、AWS-HMAC-V4認証
、およびQmonus独自認証
をサポートします。
Stub(非推奨)
APIモック応答を作成できる機能です。将来のリリースで削除される予定
です。後述するforbidden_process
でよりきめ細かいモック作成が可能です。
Body template
テンプレートエンジンを使用して本文をレンダリング結果に書き換える機能です。Scenarioサービスのtemplate
プラグインを使用することもできます。
Forbidden process
リクエストとレスポンスを開発者のカスタムスクリプトにフックし、自由にカスタマイズできる機能です。詳細は、APIGWにおけるプログラミング
を参照してください。
Body key filter
1ライナーのカスタムスクリプトまたはホワイトリスト、ブラックリストに従って、本文内のキーをフィルタリングできる機能です。
Body mapper
Parametermapper
サービスを適用して本体を整形できる機能です。
Convert body style
本文のキースタイルを変換する機能です。snake case
からlower camel case
への変換または、その逆変換をサポートします。
Body validation schema
jsonschemaによる本文のバリデーション検査を提供する機能です。
Lambda proxy(非推奨)
リクエストをlambda
イベントに変換して発行し、処理結果で応答する機能です。本機能はforbidden_process
で代替できるため、将来削除予定です。
Lambda hook(非推奨)
リクエスト/レスポンス時にlambda
イベントを発生させる機能です。本機能はforbidden_process
で代替できるため、将来削除予定です。
Error body off
ターゲットからの応答がエラーの場合に、本体を空にする機能です。
APIの認証スコープについて
APIルーティングにはscope
属性があり、secure
、 local
、public
の3種類から指定できます。secure
モードの場合は、Qmonus認証認可が有効化されます。起動パラメータ--local_scope_auth_mode
がTrue
の場合、local
モードにはQmonus認証認可が必要になります。 False
およびpublic
モードの場合、Qmonus認証認可は無効化されます。
スコープ | Qmonus認証認可 |
---|---|
secure | enable |
local | enable if options.local_scope_auth_mode==True else disable |
public | disable |
Caution
X-Xaas-Static-Routing
拡張ヘッダはsecure
スコープでのみ有効です。