このセクションでは、avi.requests() 関数と、DataScript を介してアウトオブバンド要求処理を構成する手順について説明します。

仮想サービスが要求を受信すると、要求全体、要求の一部、またはまったく異なる要求がサードパーティのエンドポイントに送信されて、特定の基準を検証できます。元の要求に対するアクションは、このように受信した応答に基づいて実行されます。特定の受信クライアント要求の処理を一時停止して、DataScript を介して外部リソースから情報を取得できます。

外部リソースは、単一のサーバ(サードパーティ エンティティに属している可能性がある)またはサーバのプールのいずれかです。サーバには、IP アドレスまたは FQDN のいずれかを使用してアクセスします。

このセクションでは、次の処理を実行できる DataScript の avi.requests.xxx について説明します。

  • 受信クライアント要求の一時停止

  • 新しい HTTP 要求の構成、サードパーティ プールへの要求の送信

  • サードパーティ プールからの応答の待機

  • 最初のクライアント要求の再開、クライアント要求の終了、またはローカル リダイレクト/応答による再 POST

注:

サードパーティまたは外部エンティティが NSX Advanced Load Balancer でプールとして構成されていることを確認します。

外部要求の検証には、次の使用事例があります。

  • LDAP にクエリを実行して属性を取得し、バックエンド サーバへのヘッダーとして挿入する場合

  • サードパーティ サーバからのトークン名をユーザー名に変換してから、その情報をサーバに送信する場合

  • 特定の国のユーザーをブロックするために、静的データベースを使用する代わりに、データベースをリアルタイムで検索する場合

機能

avi.requests.[get/post/put/head](pool [, server [, port]], URI [, req_args])

説明

受信クライアント要求が NSX Advanced Load Balancer に送信されるたびに、DataScript 内の外部(サードパーティ)サーバに外部 HTTP 要求を送信します。クライアント要求を一時停止し、カスタム HTTP 要求を構成し(または元のクライアント要求を転送する)、サードパーティ リソースに送信し、応答を待ってからその応答を使用して、バックエンド サーバに送信する際の最初のクライアント要求のロード バランシングの決定を行うことができます。

関数

HTTP メソッドは、次のようにパラメータではなく関数名になります。

  • avi.requests.get(pool [, server [, port]], URI [, req_args])

  • avi.requests.post(pool [, server [,port]], URI [, req_args])

  • avi.requests.head(pool [, server [,port]], URI [, req_args])

  • avi.requests.put(pool [, server [,port]], URI [, req_args])

イベント

  • http_auth

  • http_post_auth

  • http_req

  • http_req_body

パラメータ

Pool

選択する外部プールの名前 (<String>)

Server

外部サーバの名前 [オプション](<String>)

Port

外部サーバのポート [オプション](<Number>)

Method

文字列内の HTTP メソッド名。たとえば、get、post、head、put、patch、delete などです [オプション](<String>)

URI

外部要求の URI(パス + クエリ文字列)(<String>)

req_args

追加のオプションの要求構成 [オプション](<Table>)

Headers

送信する要求ヘッダーのテーブル。値は数値または文字列のいずれかにする必要があります。(<Table>) NSX Advanced Load Balancer は、HTTP に必要なヘッダーに挿入しますが、Host、Content-Length(要求が PUT/POST の場合)、Accept (*/*) のようには指定されません。

Body

要求本文。これが POST 要求の場合 (<String>)。メソッドが POST で本文が指定されていない場合(または本文が nil の場合)、デフォルトではクライアントの要求本文がストリーミングされます(REQ_BODY イベントでのみ、それ以外の場合は [500] エラーが表示されます)

返される値

テーブルには次の値が含まれます:

  • 状態:応答状態コード (<Number>)

  • ヘッダー:応答ヘッダーのテーブル (<Table>)

  • 本文:HTTP 応答本文(存在する場合)、それ以外の場合は nil (<String>)

構成

外部要求検証 API を使用するには、外部要求を送信する外部サーバを使用して新しいプール オブジェクトを構成します。

[admin:controller]: > configure vsdatascriptset vsds-external-request
 [admin:controller]: vsdatascriptset> pool_refs pool-1
 [admin:controller]: vsdatascriptset> save
注:

HTTPS 要求を送信するには、SSL プロファイルを使用してプールを構成し、サーバ ポートに SSL ポートがあることを確認します。

headers = {

               Host= "www.example.com:80",

                Accept= "*/",

               ["Content-Type"] = "text/html",

          }

req_args = {headers = headers, body = "example body"}
-- Pool must have "Lookup server by name" turned on
resp = avi.requests.post("pool-1", "www.example.com", "/", req_args)

オプションの引数があるため、avi.requests.xxxx API を呼び出す方法は複数あります。

 avi.requests.get('pool', '/index.html')
 avi.requests.get('pool', 'server', '/index.html')
 avi.requests.get('pool', 'server', 80, '/index.html')
 avi.requests.get('pool', /index_html', req_args)
 avi.requests.get('pool', 'server', '/index_html', req_args)
 avi.requests.get('pool', 'server', 80, '/index.html', req_args)

アウトオブバンド要求処理を構成する手順

  1. プールを構成します。外部アプリケーションは、複数の方法で定義/参照できます。1 台のサーバまたはサーバのプールを指定できます。DataScript で外部プールを使用するには、VSDataScriptSet オブジェクトにプールを指定します。

  2. avi.requests() 関数を使用して DataScript を記述します。

  3. プールを DataScript に関連付けます

  4. DataScript を、アウトオブバンド処理が必要な仮想サービスにバインドします。

アウトオブバンド要求処理シナリオのパケット フロー

クライアント要求再開シナリオのパケット フローについて考えてみましょう。



  1. クライアントが受信要求を送信し、それにより DataScript 条件がトリガされてアウトオブバンド要求が送信されます

  2. DataScript は HTTP 要求を作成し、構成された外部サーバに送信します

  3. サーバは HTTP 応答を提供し、それが DataScript によって評価されます。

  4. 外部サーバの応答に基づいて最初のクライアント要求を処理すると、クライアント要求はバックエンドに転送されます

  5. NSX Advanced Load Balancer は、バックエンド サーバから応答を受信します

  6. NSX Advanced Load Balancer は、バックエンド サーバの応答をクライアントに転送します

注意事項

  • 複数のアウトオブバンド要求を同時に送信することはサポートされていません

  • 非同期のアウトオブバンド要求はサポートされていません

  • チャンク要求の送信はサポートされていません

  • 送信できるのは HTTP/1.1 要求のみです