注
Basic、Standard、および 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 が有効になっている Azure Spring Apps Enterprise プラン インスタンス。
- Azure Container Apps のインスタンス。 詳細については、クイックスタート: Azure portal を使用して最初のコンテナー アプリをデプロイする を参照してください。
- Azure CLI
- Docker イメージをビルドしてプッシュするための十分なアクセス許可を持つ Azure Container Registry インスタンス。 詳細については、「 クイック スタート: Azure CLI を使用してプライベート コンテナー レジストリを作成する」を参照してください。
セルフホステッド Spring Cloud Gateway アプリケーションのコードを準備する
Spring Cloud Gateway アプリケーションのコードを取得するには、次の手順に従います。
- https://start.spring.io に移動します。
- グループ フィールドを組織の名前に設定して、プロジェクトメタデータを更新します。 [成果物] フィールドと [名前] フィールドをゲートウェイに変更します。
- リアクティブ ゲートウェイと Spring Boot Actuator の依存関係を追加します。
- その他のプロパティは既定値のままにします。
- [ 生成] を選択してプロジェクトをダウンロードします。
- プロジェクトがダウンロードされたら、それを抽出します。
Spring Cloud Gateway アプリケーションを構成する
Spring Cloud Gateway アプリケーションをダウンロードしたら、次のセクションで構成します。
アプリケーション プロパティ ファイルを構成する
アプリケーション プロパティ ファイルを構成するには、次の手順に従います。
プロジェクトの gateway/src/main/resources ディレクトリに移動します。
application.properties ファイルの名前を application.yml に変更します。
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-replica
と max-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 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 イメージをビルドしてプッシュするには、次の手順を使用します。
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"]
次のコマンドを使用して、ゲートウェイのイメージをビルドします。
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 .
ゲートウェイ イメージが作成されていることを確認し、次の形式を使用するイメージ タグを取得します:
<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 などの他の商用ソリューションを検討する必要があります。