この Topic では、自己管理型の Spring Cloud または Zuul ゲートウェイを使用して Serverless App Engine (SAE) アプリケーションのエンドツーエンドカナリアリリースを実行する方法について説明します。ビジネスコードを変更することなく、エンドツーエンドのトラフィックシェーピングを実行できます。
準備
次のセクションでは、Application Load Balancer (ALB) インスタンスをイングレスゲートウェイとして使用して、エンドツーエンドカナリアリリースを実行する方法について説明します。この例では、アプリケーションアーキテクチャは ALB イングレスゲートウェイとバックエンドマイクロサービスフレームワーク (Spring Cloud) で構成されています。バックエンドサービスの呼び出しには、ショッピングカート (アプリケーション A)、取引センター (アプリケーション B)、在庫センター (アプリケーション C) といったマイクロサービスアプリケーションが含まれます。クライアントまたは HTML を使用して、Nacos レジストリを使用して登録されたバックエンドサービスにアクセスできます。
SAE デモアプリケーションのデプロイ
デモパッケージをダウンロードします。
バックボーンアプリケーションをデプロイします。
次のバックボーンアプリケーションをデプロイします: アプリケーション A、アプリケーション B、アプリケーション C。詳細については、「アプリケーションのサービス登録と検出を Nacos に変更する」をご参照ください。
次のカナリアリリースアプリケーションをデプロイします: アプリケーション A-gray、アプリケーション B-gray、アプリケーション C-gray。起動コマンドに
-Dalicloud.service.tag=grayを追加して、カナリアリリースアプリケーションとバックボーンアプリケーションを区別します。
アプリケーションをデプロイするときに SAE 組み込みではないサービスレジストリを使用する場合は、次の起動パラメーターを追加する必要があります: -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。
Spring Cloud または Zuul ゲートウェイのデプロイ
同じドメイン名で異なる URL からのリクエストを転送することで、アプリケーションにアクセスできます。詳細については、「CLB インスタンスを使用してアプリケーションのゲートウェイルーティングを設定する」をご参照ください。
リクエストに特定のヘッダーを追加してエンドツーエンドカナリアリリースを実行する
一部のクライアントのドメイン名は変更できません。www.base.com ドメイン名をルートに関連付けて、特定のヘッダーを追加できます。これにより、特定のリクエストをカナリアリリース環境にルーティングできます。次の図では、リクエストに x-mse-tag:gray ヘッダーが追加された後、リクエストはカナリアリリース環境にルーティングされます。
x-mse-tag ヘッダーは、この Topic で説明されているシナリオにのみ適しています。他のシナリオではこのヘッダーを使用しないでください。たとえば、アプリケーションのカナリアリリースルールを設定するときに x-mse-tag ヘッダーを使用しないでください。詳細については、「Java アプリケーションのカナリアリリースルールを管理する」をご参照ください。

結果を検証します。
www.base.com宛てのトラフィックがベースライン環境にルーティングされるかどうかを確認します。次の curl コマンドを実行します:
curl -H"Host:www.base.com" http://106.14.XX.XX/aコマンド出力:
A[172.18.XX.XX] -> B[172.18.XX.XX] -> C[172.18.XX.XX]
リクエストをカナリアリリース環境にルーティングするには、リクエストに
x-mse-tag:grayヘッダーを追加します。次の curl コマンドを実行します:
curl -H"Host:www.base.com" -H"x-mse-tag:gray" http://106.14.XX.XX/aコマンド出力:
Agray[172.18.XX.XX] -> Bgray[172.18.XX.XX] -> Cgray[172.18.XX.XX]%上記の出力は、Classic Load Balancer (CLB) Ingress コントローラーがリクエストをアプリケーション A のカナリアリリース環境にルーティングすることを示しています。