Service Extensions を使用すると、サポートされているアプリケーション ロードバランサ でプラグインを使用して、カスタム処理を処理パスに挿入できます。 エッジ拡張機能は、ロードバランサがリクエスト ヘッダーを受信したとき 、URL マップを評価する前、または Cloud CDN を呼び出す前に、リクエスト処理パスで実行されます。これにより、キャッシュとルーティングに影響を与えることができます。 このページでは、エッジ拡張機能を構成する方法について説明します。
アプリケーション ロードバランサ拡張機能の概要については、 Cloud Load Balancing 拡張機能の概要をご覧ください。
アプリケーション ロードバランサの拡張機能は、次のリソースを参照します。
- 関連付ける転送ルール
- プラグイン
拡張機能は、関連付けるロードバランサの 転送ルールを参照します。 リソースを構成すると、ロードバランサは一致するリクエストを拡張機能サービスに送信します。転送ルールに関連付けることができるエッジ拡張機能は 1 つのみで、エッジ拡張機能チェーンに含めることができるプラグインは 1 つのみです。
アプリケーション ロードバランサ拡張機能に関連する上限については、 割り当てと上限のページをご覧ください。
プラグインを使用して構成する
このセクションでは、パスが /extensions と一致する場合に :host リクエスト ヘッダーを service-extensions.com
に書き換えるプラグインを使用して、エッジ拡張機能を構成する方法を例で示します。以前のホストと新しく構成されたホストは、異なるリージョンのバックエンド
サービスにマッピングされます。これにより、ルーティング動作が示されます。
特定のプラグインを参照するすべての拡張機能リソースは、同じタイプである必要があります。 また、拡張機能は同じロード バランシング スキームを使用する必要があります。Media CDN 拡張機能ですでに使用されているプラグインを使用して、Cloud Load Balancing 拡張機能を構成することはできません。
始める前に
プラグインを作成します。これには カスタムコードが含まれます。
エッジ拡張機能プラグインをサポートするアプリケーション ロードバランサを作成して構成します。
次の手順を除き、VM インスタンス グループのバックエンドを使用してグローバル外部アプリケーション ロードバランサを設定するの手順に沿って操作します。
- バックエンド サービスに
service-oneという名前を付けます。 service-oneをリージョンAの仮想マシン(VM)インスタンスに指定します。gl7-gxlb-url-mapをデフォルトでservice-oneに指定します。
- バックエンド サービスに
追加のバックエンド サービス
service-twoを設定し、リージョンBの VM に指定します。URL マップに、
service-twoを指定するパスマッチャーを追加します。次のサンプル値を使用して、gcloud compute url-maps add-path-matcherコマンド を実行します。gcloud compute url-maps add-path-matcher gl7-gxlb-url-map \ --path-matcher-name=rewrite-host \ --default-service=service-two \ --new-hosts=service-extensions.com \ --location=globalサービスにテスト リクエストを送信する方法を設定します(curl の実行など)。
プラグインを使用してエッジ拡張機能を構成する
拡張機能を構成する前の動作を確認します。
明示的なパスのないリクエストがリージョン
Aに送信されることを確認します。curl FORWARDING_RULE_IP
FORWARDING_RULE_IPは、転送ルールの IP アドレスに置き換えます。IP アドレスを確認するには、gcloud compute forwarding-rules describeコマンドを使用します。出力は次のようになります。これは、ページが
region Aの VM から提供されていることを示しています。Page served from region-A-vmURL マップに
/extensionsの一致がないことを確認します。curl FORWARDING_RULE_IP/extensions
FORWARDING_RULE_IPは、転送ルールの IP アドレスに置き換えます。IP アドレスを確認するには、gcloud compute forwarding-rules describeコマンドを使用します。出力は、URL マップに
/extensionsの一致がないことを示しています。出力は次のようになります。<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
エッジ拡張機能を構成します。
コンソール
コンソールで、[Service Extensions] ページに移動します。 Google Cloud
[拡張機能を作成] をクリックします。
ウィザードが開き、初期手順を案内します。
プロダクトで [ロード バランシング] を選択します。次に、[続行] をクリックします。
サポートされているアプリケーション ロードバランサのリストが 表示されます。
ロードバランサのタイプとして、グローバル外部アプリケーション ロードバランサを選択します。 次に、[続行] をクリックします。
拡張機能のタイプとして [Edge extensions] を選択し、 [Continue] をクリックします。
[続行] をクリックして、[拡張機能を作成] フォームを開きます。
[拡張機能を作成] フォームでは、前の選択内容は編集できません。
[基本] セクションで、次の操作を行います。
拡張機能の一意の名前を指定します。
名前は英小文字で始まり、最大 62 文字の英小文字、数字、ハイフンで構成します。ハイフンで終わることはできません。
省略可: 最大 1,024 文字を使用して、拡張機能の簡単な説明を入力します。
省略可: [ラベル] セクションで [ラベルを追加] をクリックします。表示された行で、次の操作を行います。
- [**キー**] にキー名を入力します。
- [**値**] にキーの値を入力します。
Key-Value ペアをさらに追加するには、[ラベルを追加] をクリックします。Key-Value ペアは最大 64 個まで追加できます。
ラベルの詳細については、 プロジェクトのラベルを作成して更新するをご覧ください。
[**転送ルール**] で、拡張機能に関連付ける 1 つ以上の転送ルールを選択します(
cr-xlb-forwarding-ruleなど)。別の拡張機能にすでに関連付けられている転送ルールは選択できず、無効になります。
[**拡張機能**] で、一致する リクエストに対して実行する拡張機能を追加するには、次の操作を行います。
拡張機能チェーンが実行されるリクエストを照合するには、 [**一致条件**] に Common Expression Language(CEL) 式を指定します(
request.path.startsWith("/extensions")など)。エッジ拡張機能では、CEL 式ごとに 1 つの正規表現のみを使用できます。
CEL 式の詳細については、 [構文ヘルプを表示] をクリックするか、CEL マッチャーの言語リファレンスをご覧ください。
[**プログラマビリティ タイプ**] で [**プラグイン**] を選択します。
[プラグイン] で、Service Extensions または同じプロダクトと拡張機能タイプを使用して作成されたプラグインを選択します。エッジ拡張機能に含めることができるプラグインは 1 つのみです。
[**ヘッダーを転送**] で [**ヘッダーを追加**] をクリックし、 拡張機能に転送する HTTP ヘッダー(クライアントまたは バックエンドから)を追加します。ヘッダーが指定されていない場合は、すべてのヘッダーが送信されます。
省略可: [**フェイルオープン**] で、拡張機能をフェイル オープンする場合は、[**有効**] を選択します。この場合、拡張機能の呼び出しが失敗またはタイムアウトした場合でも、リクエストまたはレスポンスの処理はエラーなく続行されます。
デフォルトでは、[フェイルオープン] フィールドは選択されていません。この場合、レスポンス ヘッダーがダウンストリーム クライアントに配信されていない場合、一般的な HTTP
500ステータス コードがクライアントに返されます。レスポンス ヘッダーが配信されている場合、ダウンストリーム クライアントへの HTTP ストリームがリセットされます。
エッジ拡張機能の場合、拡張機能チェーンごとに指定できる拡張機能は 1 つのみです。
単一の拡張機能ではなく、複数の拡張機能または拡張機能チェーンを指定する場合は、フォームの最後にある [詳細モードに切り替える] ボタンをクリックし、必要な拡張機能とチェーンを指定します。拡張機能は、リストに表示されている順に実行されます。
各拡張機能と拡張機能チェーンに一意の名前を指定します。名前は RFC-1034 に準拠している必要があります。小文字(英字)、数字、ハイフンのみで構成し、最大文字数は 63 文字です。また、先頭の文字は英字、末尾の文字は英字または数字にする必要があります。
[拡張機能を作成] をクリックします。
gcloud
YAML ファイルでプラグインを定義し、グローバル転送ルール(
cr-xlb-forwarding-ruleなど)に関連付けます。cat >edge-plugin.yaml <<EOF name: edge-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/global/forwardingRules/cr-xlb-forwarding-rule loadBalancingScheme: EXTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/global/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - REQUEST_HEADERS EOF次のように置き換えます。
PROJECT_ID: the プロジェクト IDWASM_PLUGIN: プラグインの ID または完全修飾名
エッジ拡張機能では、CEL 式ごとに 1 つの正規表現のみを使用できます。
YAML ファイルのフィールドの詳細については、API ドキュメントの ExtensionChain をご覧ください。
エッジ拡張機能をインポートします。次のサンプル値を使用して、
gcloud service-extensions lb-edge-extensions importコマンドを実行します。gcloud service-extensions lb-edge-extensions import edge-ext \ --source=edge-plugin.yaml \ --location=global
エッジ拡張機能が作成されると、新しいプラグインがすべてのロケーションに配信されるまでに少し時間がかかります。プラグインはすべてのロケーションに同時に配信されないため、ロケーションによって時間が異なる場合があります。
エッジ拡張機能が想定どおりに動作することを確認するには、同じ
curlコマンドを使用します。curl FORWARDING_RULE_IP/extensions
出力は次のようになります。これは、ページが
region Bの VM から提供されていることを示しています。Page served from region-B-vmプラグインが
/extensionパス接頭辞を持つリクエストに対してのみ実行されることを確認するには、パスを指定せずにcurlコマンドを繰り返します。curl FORWARDING_RULE_IP
出力は次のようになります。
Page served from region-A-vm
エッジ拡張機能の制限事項
- 転送ルールに関連付けることができるエッジ拡張機能は 1 つのみです。
- エッジ拡張機能は HTTP 本文の処理をサポートしていません。
- エッジ拡張機能では、CEL 式ごとに 1 つの正規表現のみを使用できます。
すべての拡張機能に適用される制限については、 拡張機能の制限事項をご覧ください。