このページでは、プラグインと Cloud Load Balancing アプリケーション ロードバランサおよび Media CDN の統合の概要について説明します。
この機能は Media CDN のプレビュー版です。
プラグインは WebAssembly(Wasm)形式でビルドされ、Proxy-Wasm API を使用します。
Wasm は、オープンで標準化されたバイナリ命令形式です。これにより、ホストは顧客が提供したコードを使用して Wasm モジュールを読み込んで実行できます。Wasm には、セキュリティのためのサンドボックス化、複数の言語のサポート、移植性、業界内での広範かつ拡大するサポート、JavaScript などの他の VM ベースのオプションと比較してパフォーマンスの向上など、顧客コードの実行に多くのメリットがあります。
Proxy-Wasm は、Google が開始したオープンソース プロジェクトです。HTTP リクエストとレスポンスの処理中に実行されるコールバックを実装することで、ネットワーク プロキシの動作をカスタマイズできる API を定義します。
プラグインの仕組み
アプリケーション ロードバランサと Media CDN で Service Extensions を使用する方法は次のとおりです。
次のようにプラグイン コードを準備します。
アップロードされたプラグイン コードを含むプラグインを作成します。
Cloud Load Balancing 拡張機能または Media CDN 拡張機能でプラグインを構成します。
プラグイン リソース
Service Extensions を使用すると、処理パスにカスタムコードを追加するのに役立つ次のキーリソースを作成できます。
デプロイするカスタムコードを含むプラグイン。
プラグインのバージョン。これは Wasm モジュールのバージョンです。プラグインがメイン(アクティブ)として使用する Wasm モジュールのバージョンを指定できます。
制限事項
このセクションでは、プラグインに関する制限事項をいくつか示します。
リソースの制限事項
プラグインで使用できるリソースの数には厳しい制限があります。
プラグインは、呼び出しごとに最大 1 ミリ秒の正規化された vCPU を使用できます。CPU ミリ秒はプラットフォームに依存しますが、正規化されたプラットフォームはクロック速度が 4 GHz のプロセッサとほぼ同じです。呼び出しは、個別に課金される実行フェーズです。リクエスト ヘッダー、リクエスト ボディ、レスポンス ヘッダー、レスポンス ボディなどがあります。
プラグインは、VM インスタンスあたり最大 16 MiB のメモリを使用できます。インスタンスは最大 1, 000 個の同時リクエストを処理できる必要があります。つまり、プラグインはストリームあたり最大 16 KiB のメモリを保持できます。メモリ使用量の合計には、グローバルな状態とスタック割り当てが含まれることに注意してください。
プラグイン テスターを使用して、プラグインの CPU とメモリの特性をベンチマークします。
API の制限事項
プラグインでは、Proxy-Wasm ABI のサブセットを使用できます。プラグインは、タイマー、カスタム指標、共有データ、共有キュー、アウトバウンド ネットワーク呼び出しをサポートしていません。
HTTP トレーラー イベントはサポートされていません。
ヘッダー操作の制限事項
ミューテーション(ヘッダーまたは本文チャンク)の最大サイズは 128 KiB です。
プラグインは
ext_procストリームの処理モードをオーバーライドできません。一部のヘッダーでは、プラグインによるヘッダーの操作はサポートされていません。プロセッサはこれらのヘッダーの変更を無視し、リクエストの処理を続行します。
Media CDN プラグインでは、次の機能はサポートされていません。
- ヘッダー:
CDN-Loop、connection、keep-alive、proxy-authenticate、proxy-authorization、proxy-connection、te、trailers、transfer-encoding、upgrade、X-user-IP。 x-forwarded、x-goog-、x-google、x-gfe、x-amz-で始まるヘッダー。
Cloud Load Balancing プラグインでは、次の機能はサポートされていません。
ヘッダー:
connection、keep-alive、proxy-authenticate、proxy-authorization、proxy-connection、sec-user-ip、te、trailer、transfer-encoding、upgrade、x-dont-count-ads、x-dont-show-ads、x-gr、x-proxyuser-ip、x-user-ip。また、
LbTrafficExtensionの場合、method、authority、scheme、ホスト ヘッダーもサポートされていません。sec-gfe-、sec-google-、x-amz-、x-forwarded-、x-gfe-、x-goog-、x-google-、x-gproxy-で始まるヘッダー。
- ヘッダー:
HTTP/1.1 クライアントとバックエンドの制限事項
拡張機能に REQUEST_BODY または RESPONSE_BODY のいずれかを構成すると、ロードバランサは一致するリクエストを受信した場合、レスポンスから Content-Length ヘッダーを削除し、チャンク本文エンコードに切り替えます。