次の方法で共有


Azure Container Apps 内のマネージド Gateway for Spring に Spring Cloud Gateway for Tanzu を移行する

Note

BasicStandardEnterprise プランは、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 CLI を使って、Azure Spring Apps Enterprise プランの VMware Spring Cloud Gateway を、Azure Container Apps 内のマネージド Gateway for Spring に移行する方法について説明します。

前提条件

マネージド Gateway for Spring をプロビジョニングする

次のコマンドを使って、前提条件で作成した Azure Container Apps 環境に Gateway for Spring Java コンポーネントをプロビジョニングします。

az containerapp env java-component gateway-for-spring create \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name>

コンポーネントが正しく作成された後は、Spring Cloud Gateway の [プロビジョニングの状態][成功] という値が表示されます。

リソース管理

Azure Container Apps 内の Gateway for Spring に対するコンテナー リソースの割り当ては、次の値に固定されています。

  • CPU: 0.5 vCPU
  • メモリ: 1 Gi

Gateway for Spring 用のインスタンス数を構成するには、パラメーター --min-replicas--max-replicas を使い、両方を同じ値に設定します。 この構成により、インスタンス数は確実に固定されたままになります。 現在、システムでは動的自動スケーリング構成はサポートされていません。

Gateway for Spring を構成する

ゲートウェイをプロビジョニングした後、次のステップでは円滑な移行のためにそれを構成します。

次の例で示すように、update コマンドを使って、Gateway for Spring コンポーネントの構成とルートを更新できます。

az containerapp env java-component gateway-for-spring update \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name> \
    --configuration <configuration-key>="<configuration-value>" \
    --route-yaml <path-to-route-YAML-file>

CORS の構成

VMware Spring Cloud Gateway のグローバル クロスオリジン リソース共有 (CORS) の構成を移行するには、プロパティを <configuration-key>="<configuration-value>" の形式にマップする必要があります。 次の表はそのマッピング関係を示したものです。

VMware Spring Cloud Gateway のプロパティ名 Gateway for Spring の構成
許可されるオリジン spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>]
許可されるオリジン パターン spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>]
許可されたメソッド spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>]
許可されたヘッダー spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>]
最長有効期間 spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge
allow-credentials spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials
公開されるヘッダー spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>]

たとえば、VMware Spring Cloud Gateway に allowedOrigins:["https://example.com","https://example1.com"] のような構成がある場合は、Gateway for Spring を次のパラメーターで更新する必要があります。

--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com

ルートごとの CORS 構成の場合は、構成キーの "/**" をルート パスとして置き換える必要があります。 たとえば、パスが /v1/** のルートがある場合は、spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>] を構成する必要があります。

Routes

Gateway for Spring コンポーネントでは、次の例で示すように、iduripredicatesfilters プロパティによるルートの定義がサポートされています。

springCloudGatewayRoutes:
  - id: "route1"
    uri: "https://otherjavacomponent.myenvironment.test.net"
    predicates:
      - "Path=/v1/{path}"
      - "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
    filters:
      - "SetPath=/{path}"
  - id: "route2"
    uri: "https://otherjavacomponent.myenvironment.test.net"
    predicates:
      - "Path=/v2/{path}"
      - "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
    filters:
      - "SetPath=/{path}"

次の一覧は、VMware Spring Cloud Gateway のルートと Gateway for Spring のルートの間のマッピング関係の説明です。

  • ルートの name は、id にマップされます。
  • appNameprotocol は、ルートの URI にマップされます。これは、Azure Container Apps インスタンスがアクセスできる URI である必要があります。
  • Spring Cloud Gateway の述語とフィルターは、Gateway for Spring の述語とフィルターにマップされます。

たとえば、VMware Spring Cloud Gateway に対して test-api.json という名前の次のルート構成 JSON ファイルが作成されるとします。

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddResponseHeader=X-Response-Red, Blue"
      ]
    }
  ]
}

また、次のコマンドを使って、Azure Spring Apps アプリ test-app にルールを適用するとします。

az spring gateway route-config create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name test-api \
    --app-name test-app \
    --routes-file test-api.json

この場合、Azure Container Apps 上の Gateway for Spring 用の対応するルート YAML ファイル test-api.yml は、次に示す例のようになります。

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/test/api/healthcheck
      - Method=GET
    filters:
      - AddResponseHeader=X-Response-Red, Blue

そして、コンテナー アプリを更新するには次のコマンドを使います。

az containerapp env java-component gateway-for-spring update \
    --route-yaml test-api.yml

Azure Container App アプリケーションのイングレスを有効にして、その完全修飾ドメイン名 (FQDN) を取得する必要があります。 その後、ルートの URI の <app-FQDN-in-Azure-Container-Apps> を、アプリのアクセス可能なエンドポイントに置き換えます。 URI の形式は https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io です。

Azure Container Apps 上の Gateway for Spring ではサポートされていない市販の述語市販のフィルターがいくつかあります。

応答キャッシュ

応答キャッシュをグローバルに有効にした場合は、次の構成でマネージド Gateway for Spring を更新できます。

spring.cloud.gateway.filter.local-response-cache.enabled=true
spring.cloud.gateway.filter.local-response-cache.time-to-live=<response-cache-ttl>
spring.cloud.gateway.filter.local-response-cache.size=<response-cache-size>

ルートの応答キャッシュを有効にした場合は、次の YAML のように、マネージド Gateway for Spring のルーティング規則の構成で LocalResponseCache フィルターを使用できます。

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/v1/**
      - Method=GET
    filters:
      - LocalResponseCache=3m, 1MB

トラブルシューティング

Azure Container Apps 内の Gateway for Spring のログは、Log Analytics を使って次の手順で表示できます。

  1. Azure portal で、Azure Container Apps 環境に移動します。

  2. ナビゲーション ウィンドウで、[監視]>[ログ] を選びます。

  3. ログを表示するには、次の例に示すように、クエリ エディターを使って ContainerAppSystemLogs_CL テーブルのクエリを実行します。

    ContainerAppSystemLogs_CL
    | where ComponentType_s == "SpringCloudGateway"
    | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s
    | take 100
    

ログのクエリの詳細については、「Azure Container Apps 内のマネージド Java コンポーネントの監視」を参照してください。

既知の制限事項

現在、Azure Container Apps 上の Gateway for Spring では、OpenAPI ドキュメントの生成に使われるメタデータ、シングル サインオン (SSO)、アプリケーション パフォーマンス監視 (APM) 統合など、特定の市販機能はサポートされていません。

Gateway for Spring を有効にすると Azure portal の [サービス] セクションが開かなくなるという既知の問題があります。 この問題は間もなく解決される予定です。