Azure Container Apps 内のマネージド Gateway for Spring に Spring Cloud Gateway for Tanzu を移行する
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 CLI を使って、Azure Spring Apps Enterprise プランの VMware Spring Cloud Gateway を、Azure Container Apps 内のマネージド Gateway for Spring に移行する方法について説明します。
前提条件
- Spring Cloud Gateway が有効になっている既存の Azure Spring Apps Enterprise プランのインスタンス。
- 既存の Azure Container Apps。 詳細については、クイックスタート: Azure portal を使用して最初のコンテナー アプリをデプロイする を参照してください。
- Azure CLI。
マネージド 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 コンポーネントでは、次の例で示すように、id
、uri
、predicates
、filters
プロパティによるルートの定義がサポートされています。
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
にマップされます。 -
appName
とprotocol
は、ルートの 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
を使って次の手順で表示できます。
Azure portal で、Azure Container Apps 環境に移動します。
ナビゲーション ウィンドウで、[監視]>[ログ] を選びます。
ログを表示するには、次の例に示すように、クエリ エディターを使って
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 の [サービス] セクションが開かなくなるという既知の問題があります。 この問題は間もなく解決される予定です。