次の方法で共有


Spring Cloud Gateway を使用する

Note

BasicStandard、および 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 を使用するアプリの 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 つのルート プロパティがあります。 具象ルーティング規則を使用すると、同じプロパティのアプリ レベルのルーティング規則がオーバーライドされます。 アプリ レベルで、predicatesfiltersssoEnabled の各プロパティを定義できます。 この 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 を使用してサンプル アプリケーションを作成します。

  1. 次のコマンドを使用して、Azure Spring Apps で test-app という名前のテスト アプリケーションを作成します。

    az spring app create \
        name test-app \
        resource-group <resource-group-name> \
        service <Azure-Spring-Apps-instance-name>
    
  2. ゲートウェイにパブリック エンドポイントを割り当てて、アクセスします。

    Spring Cloud Gateway に与えられた実行中の状態とリソースを表示するには、Azure portal で Azure Spring Apps インスタンスを開き、[Spring Cloud Gateway] セクションを選択し、[概要] を選択します。

    [Assign endpoint]\(エンドポイントの割り当て\) の横の [はい] を選択して、パブリック エンドポイントを割り当てます。 URL が数分で表示されます。 後で使用できるように、この URL を保存します。

    Azure portal の Azure Spring Apps の概要ページのスクリーンショット。[Assign endpoint](エンドポイントの割り当て) が強調表示されています。

    Azure CLI を使用して、エンドポイントを割り当てることもできます。 次のコマンドを使用してエンドポイントを割り当てます。

    az spring gateway update \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --assign-endpoint true
    
  3. 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
    

    次のスクリーンショットに示すように、ポータルでルートを表示することもできます。

    Azure portal の Azure Spring Apps の [Spring Cloud Gateway] ページのスクリーンショット。[Routing rules](ルーティング規則) ペインが表示されています。

  4. ゲートウェイ エンドポイント経由で test health check API にアクセスするには、次のコマンドを使用します。

    curl https://<endpoint-url>/test/api/healthcheck
    
  5. ルーティング規則にクエリを実行するには、次のコマンドを使用します。

    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 ルート フィルターを使用する方法」を参照してください。

次のステップ