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> ...
エッジ拡張機能を構成します。
コンソール
Google Cloud コンソールで、[サービス拡張機能] ページに移動します。
[拡張機能を作成] をクリックします。
ウィザードが開き、初期設定の手順が表示されます。
プロダクトとして [ロード バランシング] を選択します。その後、[Continue] をクリックします。
サポートされているアプリケーション ロードバランサのリストが表示されます。
ロードバランサのタイプとして、グローバル外部アプリケーション ロードバランサを選択します。その後、[続行] をクリックします。
拡張機能のタイプとして [Edge 拡張機能] を選択し、[続行] をクリックします。
[拡張機能の作成] フォームを開くには、[続行] をクリックします。
[拡張機能の作成] フォームで、前の選択内容が編集できないことを確認します。
[基本] セクションで、次の操作を行います。
拡張機能の一意の名前を指定します。
名前は、先頭が英小文字で、その後に最大 62 文字の英小文字、数字、ハイフンで構成します。末尾をハイフンにすることはできません。
省略可: 拡張機能の簡単な説明を 1,024 文字以内で入力します。
省略可: [ラベル] セクションで、[ラベルを追加] をクリックします。表示された行で、次の操作を行います。
- [キー] にキー名を入力します。
- [値] にキーの値を入力します。
Key-Value ペアをさらに追加するには、[ラベルを追加] をクリックします。最大 64 個の Key-Value ペアを追加できます。
ラベルの詳細については、プロジェクトのラベルを作成、更新するをご覧ください。
[転送ルール] で、拡張機能に関連付ける 1 つ以上の転送ルール(
cr-xlb-forwarding-ruleなど)を選択します。別の拡張機能にすでに関連付けられている転送ルールは選択できず、無効として表示されます。
拡張機能チェーンの場合は、一致したリクエストに対して実行する 1 つ以上の拡張機能チェーンを追加します。
拡張機能チェーンを追加するには、次の操作を行ってから [完了] をクリックします。
[新しい拡張チェーン] に一意の名前を指定します。
名前は RFC-1034 に準拠している必要があります。小文字(英字)、数字、ハイフンのみで構成し、最大文字数は 63 文字です。また、先頭の文字は英字に、末尾の文字は英字または数字にする必要があります。
拡張機能チェーンが実行されるリクエストを照合するには、[一致条件] に Common Expression Language(CEL)式(
request.path.startsWith("/extensions")など)を指定します。Edge 拡張機能では、CEL 式ごとに 1 つの正規表現のみを使用できます。
CEL 式の詳細については、[構文のヘルプを表示] をクリックするか、CEL マッチャーの言語リファレンスをご覧ください。
一致したリクエストに対して実行する拡張機能を追加します。エッジ拡張機能の場合、指定できる拡張機能は 1 つだけです。
[拡張機能] で、次の操作を行ってから [完了] をクリックします。
[Programmability type] で [Plugins] を選択します。
[拡張機能名] に、一意の名前を指定します。
名前は RFC-1034 に準拠している必要があります。小文字(英字)、数字、ハイフンのみで構成し、最大文字数は 63 文字です。また、先頭の文字は英字に、末尾の文字は英字または数字にする必要があります。
[プラグイン] で、同じプロダクトと拡張機能タイプ用に Service Extensions を使用して作成されたプラグインを選択します。
[転送ヘッダー] で、[ヘッダーを追加] をクリックし、拡張機能に転送する HTTP ヘッダー(クライアントまたはバックエンドから)を追加します。ヘッダーが指定されていない場合は、すべてのヘッダーが送信されます。
省略可: [フェイルオープン] で、拡張機能をフェイルオープンにする場合は、[有効] を選択します。この場合、拡張機能の呼び出しが失敗した場合やタイムアウトした場合でも、リクエストまたはレスポンスの処理はエラーなく続行されます。拡張機能チェーン内の後続の拡張機能も実行されます。
デフォルトでは、[フェイルオープン] フィールドは選択されていません。この場合、レスポンス ヘッダーがダウンストリーム クライアントに配信されていないと、一般的な HTTP
500ステータス コードがクライアントに返されます。レスポンス ヘッダーが配信されている場合、ダウンストリーム クライアントへの HTTP ストリームがリセットされます。
[拡張機能を作成] をクリックします。
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: プロジェクト IDWASM_PLUGIN: プラグインの ID または完全修飾名
Edge 拡張機能では、CEL 式ごとに 1 つの正規表現のみを使用できます。
エッジ拡張機能をインポートします。次のサンプル値を使用して、
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 つのみです。
- Edge 拡張機能は HTTP 本文の処理をサポートしていません。
- Edge 拡張機能では、CEL 式ごとに 1 つの正規表現のみを使用できます。
すべての拡張機能に適用される制限事項については、拡張機能の制限事項をご覧ください。
次のステップ
- Service Extensions プラグインの GitHub リポジトリで Rust、Go、C++ のプラグインの例とテストツールを参照する。
- 拡張機能を管理する