次の方法で共有


VmWare Tanzu 用 Spring Cloud Gateway を Azure Container Apps のセルフホステッド ゲートウェイ アプリケーションに移行する

BasicStandard、および Enterprise プランは、2025 年 3 月 17 日に廃止期間に入りました。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。

Standard 従量課金プランと専用プランは、2024 年 9 月 30 日に廃止期間に入り、2025 年 3 月末までに完全にシャットダウンされました。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。

この記事の適用対象: ❎ Basic/Standard ✅ Enterprise

この記事では、Azure Spring Apps Enterprise プランで実行されている Spring Cloud Gateway for VMWare Tanzu プロジェクトを、Azure Container Apps アプリケーションとして実行されているセルフホステッドオープン ソース ソフトウェア (OSS) Spring Cloud Gateway プロジェクトに移行する方法について説明します。

このページで説明されている Spring Cloud Gateway の OSS バージョンは、参考用の例として提供されています。 要件に基づいて、Spring Cloud Gateway の他のディストリビューションを選択できます。

SPRING Cloud Gateway for VMWare Tanzu によって提供される機能は、OSS バージョンの機能よりも広範です。 運用環境に移行する前に、違いを確認し、互換性を確保してください。

前提条件

セルフホステッド Spring Cloud Gateway アプリケーションのコードを準備する

Spring Cloud Gateway アプリケーションのコードを取得するには、次の手順に従います。

  1. https://start.spring.io に移動します。
  2. グループ フィールドを組織の名前に設定して、プロジェクトメタデータを更新します。 [成果物] フィールドと [名前] フィールドをゲートウェイに変更します
  3. リアクティブ ゲートウェイSpring Boot Actuator の依存関係を追加します。
  4. その他のプロパティは既定値のままにします。
  5. [ 生成] を選択してプロジェクトをダウンロードします。
  6. プロジェクトがダウンロードされたら、それを抽出します。

Spring Cloud Gateway アプリケーションを構成する

Spring Cloud Gateway アプリケーションをダウンロードしたら、次のセクションで構成します。

アプリケーション プロパティ ファイルを構成する

アプリケーション プロパティ ファイルを構成するには、次の手順に従います。

  1. プロジェクトの gateway/src/main/resources ディレクトリに移動します。

  2. application.properties ファイルの名前を application.yml に変更します。

  3. application.yml ファイルを編集します。 次の application.yml ファイルが一般的です。

    spring:
      application:
        name: gateway
      cloud:
        gateway:
          globalcors:
            corsConfigurations:
              '[/**]':
                allowedOriginPatterns: "*"
                allowedMethods:
                - GET
                - POST
                - PUT
                - DELETE
                allowedHeaders:
                - "*"
                allowCredentials: true
                maxAge: 3600
          routes:
          - id: front
            uri: http://front-app
            predicates:
            - Path=/**
            - Method=GET
            order: 1000
            filters:
            - StripPrefix=0
            tags:
            - front
    

CORS の構成

SPRING Cloud Gateway for VMWare Tanzu プロジェクトのクロスオリジン リソース共有 (CORS) 構成を移行するには、グローバル CORS 構成の CORS 構成 とルート CORS 構成に関する説明を参照してください。

規模

Azure Container Apps で Spring Cloud Gateway アプリケーションに移行する場合、スケーリング動作は Azure Container Apps モデルに合わせる必要があります。 VMWare Tanzu 用 Spring Cloud Gateway のインスタンス数は、Azure Container Apps の min-replicamax-replica にマップされます。 スケーリング規則を定義することで、ゲートウェイ アプリケーションの自動スケーリングを構成できます。 詳細については、「Azure Container Apps でスケーリング ルールを設定する」を参照してください。

Azure Spring Apps で使用できる CPU とメモリの組み合わせは、Azure Container Apps で使用できる組み合わせとは異なります。 リソース割り当てをマッピングするときは、Azure Container Apps で選択した CPU とメモリの構成が、パフォーマンスニーズとサポートされているオプションの両方に適合していることを確認します。

カスタム ドメインと証明書

Azure Container Apps では、カスタム ドメインと証明書がサポートされています。 SPRING Cloud Gateway for VMWare Tanzu で構成されたカスタム ドメインの移行の詳細については、「 Azure Container Apps の証明書」を参照してください。

経路

application.ymlの例に示すように、Spring Cloud Gateway for Tanzu のルートを Spring Cloud Gateway に移行できます。 次の一覧では、VMWare Tanzu の Spring Cloud Gateway のルートと Spring Cloud Gateway のルートの間のマッピング関係について説明します。

  • ルートの name プロパティは、 idにマップされます。
  • appNameプロパティとprotocolプロパティは、ルートの URI にマップされます。これは、Azure Container Apps インスタンスのアクセス可能な URI である必要があります。 Azure Container Apps アプリケーションでイングレスが有効になっていることを確認します。
  • VMWare Tanzu 用 Spring Cloud Gateway の述語とフィルターは、Spring Cloud Gateway の述語とフィルターにマップされます。 商用述語とフィルターはサポートされていません。 詳細については、「 Spring Cloud Gateway for K8s の商用ルート フィルター」を参照してください。

たとえば、 test-apiアプリの VMWare Tanzu 用 Spring Cloud Gateway のtest ルートを定義する、次のルート構成 JSON ファイルtest-api.jsonについて考えてみます。

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddRequestHeader=X-Request-red, blue"
      ]
    }
  ]
}

次の YAML ファイルは、Spring Cloud Gateway アプリケーションの対応するルート構成を示しています。

spring:
  cloud:
    gateway:
      routes:
      - id: test-api
        uri: http://test
        predicates:
        - Path=/test/api/healthcheck
        - Method=GET
        filters:
        - AddRequestHeader=X-Request-red, blue
        - StripPrefix=1

Spring Cloud Gateway for VMWare Tanzu では、すべてのルートに既定で StripPrefix=1 が設定されます。 Spring Cloud Gateway に移行するには、フィルター構成で StripPrefix=1 を明示的に設定する必要があります。

Spring Cloud Gateway アプリケーションがアプリ名を使用して他のアプリケーションにアクセスできるようにするには、Azure Container App アプリケーションのイングレスを有効にする必要があります。 また、Azure Container Apps アプリケーションのアクセス可能な完全修飾ドメイン名 (FQDN) を、 https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io形式に従ってルートの URI に設定することもできます。

Spring Cloud Gateway ではサポートされていない 商用述語商用フィルター がいくつかあります。

応答キャッシュ

SPRING Cloud Gateway for VMWare Tanzu で応答キャッシュをグローバルに有効にする場合は、Spring Cloud Gateway で次の構成を使用します。 詳細については、「 ローカル応答キャッシュ フィルター」を参照してください。

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

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

spring:
  cloud:
    gateway:
      routes:
      - id: test-api
        uri: http://test
        predicates:
        - Path=/resource
        filters:
        - LocalResponseCache=30m,500MB

APM との統合

Spring Cloud Gateway アプリケーションのアプリケーション パフォーマンス監視 (APM) を有効にすることができます。 詳細については、「アプリケーション パフォーマンス監視をコンテナー イメージに統合する」を参照してください。

Azure Container Apps へのデプロイ

Spring Cloud Gateway の構成の準備ができたら、Azure Container Registry を使用してイメージをビルドし、Azure Container Apps にデプロイします。

Docker イメージをビルドしてプッシュする

Docker イメージをビルドしてプッシュするには、次の手順を使用します。

  1. Spring Cloud Gateway プロジェクト ディレクトリで、次の内容を含む Dockerfile を作成します。

    または、 ACME Fitness Store サンプル Dockerfile を使用します。

    FROM mcr.microsoft.com/openjdk/jdk:17-mariner as build
    WORKDIR /staging
    # Install gradle
    RUN tdnf install -y wget unzip
    
    RUN wget https://services.gradle.org/distributions/gradle-8.8-bin.zip && \
        unzip -d /opt/gradle gradle-8.8-bin.zip && \
        chmod +x /opt/gradle/gradle-8.8/bin/gradle
    
    ENV GRADLE_HOME=/opt/gradle/gradle-8.8
    ENV PATH=$PATH:$GRADLE_HOME/bin
    
    COPY . .
    
    # Compile with gradle
    RUN gradle build -x test
    
    FROM mcr.microsoft.com/openjdk/jdk:17-mariner as runtime
    
    WORKDIR /app
    
    COPY --from=build /staging/build/libs/gateway-0.0.1-SNAPSHOT.jar .
    
    ENTRYPOINT ["java", "-jar", "gateway-0.0.1-SNAPSHOT.jar"]
    
  2. 次のコマンドを使用して、ゲートウェイのイメージをビルドします。

    az acr login --name <azure-container-registry-name>
    az acr build \
        --resource-group <resource-group-name> \
        --image gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT \
        --registry <azure-container-registry-name> \
        --file Dockerfile .
    
  3. ゲートウェイ イメージが作成されていることを確認し、次の形式を使用するイメージ タグを取得します: <azure-container-registry-name>.azurecr.io/gateway:acrbuild-spring-cloud-gateway-0.0.1-SNAPSHOT

Azure Container Apps にイメージをデプロイする

ゲートウェイ アプリケーション イメージの準備ができたら、次のコマンドを使用して Azure Container Apps アプリケーションとしてデプロイします。 <container-image-of-gateway> プレースホルダーを、前の手順で取得した画像タグに置き換えます。

az containerapp up \
    --resource-group <resource-group-name> \
    --name gateway \
    --environment <azure-container-app-environment-name> \
    --image <container-image-of-gateway> \
    --target-port 8080 \
    --ingress external

Spring Cloud Gateway アプリケーションの FQDN にアクセスして、実行されていることを確認します。

トラブルシューティング

Spring Cloud Gateway アプリケーションの実行時に問題が発生した場合は、Azure Container Apps で gateway アプリケーションのリアルタイムログと履歴ログを表示できます。 詳しくは、「Azure Container Apps のアプリケーション ログ記録」をご覧ください。

ゲートウェイ アプリケーションのメトリックを監視することもできます。 詳細については、「 Azure Container Apps メトリックの監視」を参照してください。

既知の制限事項

OSS Spring Cloud Gateway は、次の商用機能をネイティブでサポートしていません。

  • OpenAPI ドキュメントの生成に使用されるメタデータ。
  • シングル サインオン (SSO) 機能。

これらの機能が必要な場合は、Spring Cloud Gateway for VMWare Tanzu などの他の商用ソリューションを検討する必要があります。