Spring Cloud Gateway を使用する
Note
Basic、Standard、および Enterprise プランは、2025 年 3 月中旬以降に非推奨になり、3 年間の廃止期間となります。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。
Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨となり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金と専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象:❌ Basic または Standard ✔️ Enterprise
この記事では、Azure Spring Apps Enterprise プランで VMware Spring Cloud Gateway を使用して、アプリケーションに要求をルーティングする方法について説明します。
VMware Spring Cloud Gateway は、オープンソースの Spring Cloud Gateway プロジェクトに基づく商用 VMware Tanzu コンポーネントです。 Spring Cloud Gateway は、シングル サインオン (SSO)、アクセス制御、レート制限、回復性、セキュリティなど、API 開発チームにとっての分野横断的な懸念に対処しています。 最新のクラウド ネイティブ パターンと、API 開発用の任意のプログラミング言語を使用して、API のデリバリーを迅速化できます。
Spring Cloud Gateway には、次のような機能があります。
- 動的ルーティング構成、再コンパイルなしで適用および変更できる個々のアプリケーションに依存しません。
- 承認された JSON Web トークン (JWT) 要求をアプリケーション サービスに転送する商用 API ルート フィルター。
- クライアント証明書の承認。
- レート制限のアプローチ。
- サーキット ブレーカーの構成。
- HTTP 基本認証の資格情報を使用したアプリケーション サービスへのアクセスのサポート。
API Portal for VMware Tanzu と統合するため、VMware Spring Cloud Gateway は、任意のルート構成が追加または変更された後に OpenAPI バージョン 3 のドキュメントを自動的に生成します。
前提条件
- Spring Cloud Gateway が有効になっている、既にプロビジョニングされた Azure Spring Apps Enterprise プランのサービス インスタンス。 詳細については、「クイックスタート: Enterprise プランを使用してアプリをビルドし Azure Spring Apps にデプロイする」をご覧ください。
- Azure CLI バージョン 2.0.67 以降。 コマンド
az extension add --name spring
を使用して、Azure Spring Apps 拡張機能をインストールします。
ルートを構成する
このセクションでは、Spring Cloud Gateway を使用するアプリの API ルートを追加、更新、管理する方法について説明します。
ルート構成定義には、次の部分が含まれます。
- OpenAPI URI: この URI は OpenAPI 仕様を参照します。
https://petstore3.swagger.io/api/v3/openapi.json
などのパブリック URI エンドポイントまたはhttp://<app-name>/{relative-path-to-OpenAPI-spec}
などの構築された URI を使用できます。ここで<app-name>
は API 定義を含む Azure Spring Apps 内のアプリケーションの名前です。 OpenAPI 2.0 と OpenAPI 3.0 の両方の仕様がサポートされています。 この仕様は、有効になっている場合は API ポータルに表示されます。 - routes: トラフィックをアプリに誘導し、フィルターを適用するルート ルールの一覧。
- protocol: Spring Cloud Gateway がトラフィックをルーティングする先のアプリケーションのバックエンド プロトコル。 プロトコルでサポートされている値は
HTTP
またはHTTPS
で、既定値はHTTP
です。 Spring Cloud Gateway から HTTPS 対応アプリケーションへのトラフィックをセキュリティで保護するには、ルート構成でプロトコルをHTTPS
に設定する必要があります。 - アプリ レベルのルート: ルート構成内のすべてまたはほとんどのルートで繰り返しを避けるために、アプリ レベルで構成できる 3 つのルート プロパティがあります。 具象ルーティング規則を使用すると、同じプロパティのアプリ レベルのルーティング規則がオーバーライドされます。 アプリ レベルで、
predicates
、filters
、ssoEnabled
の各プロパティを定義できます。 このOpenAPI URI
機能を使用してルートを定義する場合、サポートされるアプリ レベルのルーティング プロパティはfilters
のみです。
次のコマンドを使用して、ルート構成を作成します。--app-name
値は、要求のルーティング先の Azure Spring Apps でホストされているアプリの名前である必要があります。
az spring gateway route-config create \
--name <route-config-name> \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app-name <app-name> \
--routes-file <routes-file.json>
次の例は、create コマンドの --routes-file
パラメーターに渡される JSON ファイルを示しています。
{
"predicates": [
"<app-level-predicate-of-route>",
],
"ssoEnabled": false,
"filters": [
"<app-level-filter-of-route>",
],
"openApi": {
"uri": "<OpenAPI-URI>"
},
"protocol": "<protocol-of-routed-app>",
"routes": [
{
"title": "<title-of-route>",
"description": "<description-of-route>",
"predicates": [
"<predicate-of-route>",
],
"ssoEnabled": true,
"filters": [
"<filter-of-route>",
],
"tags": [
"<tag-of-route>"
],
"order": 0
}
]
}
ルート定義の一覧を次の表に示します。 プロパティはすべて省略可能です。
プロパティ | Description |
---|---|
title | 生成された OpenAPI ドキュメント内のメソッドに適用するタイトル。 |
description | 生成された OpenAPI ドキュメント内のメソッドに適用する説明。 |
uri | 要求のルーティング先のアプリの名前をオーバーライドする、完全な URI。 |
ssoEnabled | SSO 検証を有効にするかどうかを示す値。 「シングル サインオンの構成」を参照してください。 |
tokenRelay | 現在認証されているユーザーの ID トークンをアプリケーションに渡します。 |
predicates | 述語の一覧。 「使用可能な述語」を参照してください。 |
filters | フィルターの一覧です。 「使用可能なフィルター」を参照してください。 |
オーダー | ルートの処理順序。 Spring Cloud Gateway のように、順序が下位であるほど、優先度が高く処理されます。 |
tags | 生成された OpenAPI ドキュメント内のメソッドに適用される分類タグ。 |
Note
セキュリティまたは互換性の理由により、すべてのフィルターや述語が Azure Spring Apps でサポートされているわけではありません。 次の要素はサポートされていません。
- BasicAuth
- JWTKey
Spring Cloud Gateway のルートを使用する
次の手順に従い、Spring Cloud Gateway を使用してサンプル アプリケーションを作成します。
次のコマンドを使用して、Azure Spring Apps で test-app という名前のテスト アプリケーションを作成します。
az spring app create \ name test-app \ resource-group <resource-group-name> \ service <Azure-Spring-Apps-instance-name>
ゲートウェイにパブリック エンドポイントを割り当てて、アクセスします。
Spring Cloud Gateway に与えられた実行中の状態とリソースを表示するには、Azure portal で Azure Spring Apps インスタンスを開き、[Spring Cloud Gateway] セクションを選択し、[概要] を選択します。
[Assign endpoint]\(エンドポイントの割り当て\) の横の [はい] を選択して、パブリック エンドポイントを割り当てます。 URL が数分で表示されます。 後で使用できるように、この URL を保存します。
Azure CLI を使用して、エンドポイントを割り当てることもできます。 次のコマンドを使用してエンドポイントを割り当てます。
az spring gateway update \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --assign-endpoint true
Spring Cloud Gateway を介してテスト アプリの正常性チェック エンドポイントにアクセスするルールを作成します。
次の内容を test-api.json ファイルに保存します。 この構成には、10 秒ごとに 20 個の要求を許可する RateLimit フィルターと、要求エンドポイントが標準の Spring Boot 正常性チェック エンドポイントに到達できるようにする RewritePath フィルターが含まれています。
{ "protocol": "HTTP", "routes": [ { "title": "Test API", "description": "Retrieve a health check from our application", "predicates": [ "Path=/test/api/healthcheck", "Method=GET" ], "filters": [ "RateLimit=20,10s", "RewritePath=/api/healthcheck,/actuator/health" ], "tags": [ "test" ] } ] }
次のコマンドを使用して、
test-app
アプリに規則を適用します。az spring gateway route-config create \ --name test-api-routes \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --app-name test-app \ --routes-file test-api.json
次のスクリーンショットに示すように、ポータルでルートを表示することもできます。
ゲートウェイ エンドポイント経由で
test health check
API にアクセスするには、次のコマンドを使用します。curl https://<endpoint-url>/test/api/healthcheck
ルーティング規則にクエリを実行するには、次のコマンドを使用します。
az spring gateway route-config show \ --name test-api-routes \ --query '{appResourceId:properties.appResourceId, routes:properties.routes}' az spring gateway route-config list \ --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
フィルターの使用
オープンソースの Spring Cloud Gateway プロジェクトには、ゲートウェイ ルートで使用する多くの組み込みフィルターが含まれています。 Spring Cloud Gateway には、OSS プロジェクトに含まれるフィルターに加えて、多くのカスタム フィルターが用意されています。
次の例は、ルートに AddRequestHeadersIfNotPresent
フィルターを適用する方法を示しています。
[
{
"predicates": [
"Path=/api/**",
"Method=GET"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
次に、以下の Azure CLI コマンドを使用してルート定義を適用します。
az spring gateway route-config create \
--name <route-config-name> \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app <app-name>
--routes-file <json-file-with-routes>
利用可能なルート フィルターの詳細については、「Azure Spring Apps Enterprise プランで VMware Spring Cloud Gateway ルート フィルターを使用する方法」を参照してください。