次の方法で共有


チュートリアル: Azure Container Apps でマネージド Gateway for Spring に接続する (プレビュー)

Gateway for Spring は、API 要求をマイクロサービス アーキテクチャの一部としてルーティング、管理、処理するための効率的で強力な方法を提供します。 外部要求をさまざまなサービスにルーティングする API ゲートウェイとして機能し、フィルター処理、負荷分散などのさまざまな機能を追加します。 この記事では、コンテナー アプリに要求を送信するゲートウェイを作成する方法について説明します。

このチュートリアルで学習する内容は次のとおりです。

  • Gateway for Spring Java コンポーネントを作成する
  • コンテナー アプリに要求をリダイレクトするためのカスタム ルートを使用して Gateway for Springを更新する

重要

このチュートリアルでは、Azure の請求書に影響する可能性のあるサービスを使用します。 手順に従う場合は、予期しない課金を回避するために、この記事で紹介されているリソースを必ず削除してください。

前提条件

考慮事項

Azure Container Apps の Gateway for Spring で実行する場合は、次の詳細に注意してください。

項目 説明
スコープ Gateway for Spring は、接続されているコンテナー アプリと同じ環境で実行されます。
リソース Gateway for Spring のコンテナー リソース割り当ては固定されており、CPU コア数は 0.5、メモリ サイズは 1Gi です。
Pricing Gateway for Spring の課金は消費ベースの価格に該当します。 マネージド Java コンポーネントによって消費されるリソースは、アクティブ/アイドル レートで課金されます。 課金を停止するために、使用しなくなったコンポーネントを削除できます。

セットアップ

Gateway for Spring の操作を開始する前に、まず、必要なリソースを作成する必要があります。

次のコマンドを実行して、リソース グループと Container Apps 環境を作成します。

  1. アプリケーション構成をサポートする変数を作成します。 これらの値は、このレッスンのために提供されています。 このレッスンでは、Spring サンプル アプリの管理者のアクチュエータ エンドポイントを使用します。

    export LOCATION=eastus
    export RESOURCE_GROUP=my-spring-cloud-resource-group
    export ENVIRONMENT=my-spring-cloud-environment
    export JAVA_COMPONENT_NAME=mygateway
    export APP_NAME=myapp
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    Variable 説明
    LOCATION コンテナー アプリと Java コンポーネントを作成する Azure リージョンの場所。
    ENVIRONMENT デモ アプリケーションの Azure Container Apps 環境名。
    RESOURCE_GROUP デモ アプリケーションの Azure リソース グループ名。
    JAVA_COMPONENT_NAME コンテナー アプリ用に作成された Java コンポーネントの名前。 この場合は、Gateway for Spring Java コンポーネントを作成します。
    IMAGE コンテナー アプリで使用されるコンテナー イメージ。
  2. Azure CLI を使用して Azure にログインします。

    az login
    
  3. リソース グループを作成する。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. コンテナー アプリ環境を作成します。

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

    この環境は、Gateway for Spring コンポーネントとコンテナー アプリの両方をホストするために使用されます。

Gateway for Spring Java コンポーネントを使用する

Container Apps 環境ができたので、コンテナー アプリを作成し、Gateway for Spring Java コンポーネントを使ってそれに要求をリダイレクトできます。

  1. Gateway for Spring Java コンポーネントを作成します。

    az containerapp env java-component gateway-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
    
  2. 完全修飾ドメイン名 (FQDN) を持つコンテナー アプリを作成します。

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --ingress external \
        --target-port 8080 \
        --query properties.configuration.ingress.fqdn
    

    このコマンドは、構成データを消費するコンテナー アプリの URL を返します。 URL をテキスト エディターにコピーし、次の手順で使用できるようにします。

要求をルーティングするためにゲートウェイ ルートを更新する

  1. 次のコンテンツを含む YAML ファイルを作成します。 <MYAPP_URL> を、前のステップのコンテナー アプリの FQDN に置き換えます。

    springCloudGatewayRoutes:
    - id: "route1"
      uri: "<MYAPP_URL>"
      predicates:
        - "Path=/myapp/{path}"
      filters:
        - "SetPath=/actuator/{path}"
    
  2. 次のコマンドを実行して、ルート構成を使用して Gateway for Spring Java コンポーネントを更新します。

    az containerapp env java-component gateway-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \ 
        --route-yaml <PTAH_TO_ROUTE_YAML_FILE> \
        --query properties.ingress.fqdn
    

    このコマンドは、ゲートウェイ ルートを更新し、構成データを使用するゲートウェイの URL を返します。

    このコマンドは、ゲートウェイの URL を返します。 パス /myapp/health でこの URL にアクセスすると、要求がアプリの actuator/health エンドポイントにルーティングされ、{"status":"UP","groups":["liveness","readiness"]} が返されます。

リソースをクリーンアップする

このチュートリアルで作成したリソースは、Azure の請求書に影響します。 これらのサービスを長期間使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのものを削除してください。

az group delete --resource-group $RESOURCE_GROUP

ルート ファイル形式

Gateway for Spring コンポーネントは、ID、URI、述語、フィルターを持つプロパティを使用したルートの定義をサポートしています。 詳細については、「Spring Cloud Gateway ドキュメント」を参照してください。 これらのプロパティを構成する方法を示す YAML ファイルの例を次に示します。

  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}"

Gateway for Spring で許可されている構成リスト (#configurable-properties)

次の表では、アプリ用に構成できるゲートウェイ コンポーネントのプロパティについて説明します。 詳細については、「Spring Cloud Gateway の一般的なアプリケーションのプロパティ」を参照してください。

プロパティ名 説明 規定値
spring.cloud.gateway.default-filters すべてのルートに適用されるフィルター定義のリスト。
spring.cloud.gateway.enabled ゲートウェイの機能を有効にします。 true
spring.cloud.gateway.fail-on-route-definition-error ルート定義エラーで失敗するオプション。既定値は true です。 それ以外の場合は、警告がログに記録されます。 true
spring.cloud.gateway.handler-mapping.order RoutePredicateHandlerMapping の順序。 1
spring.cloud.gateway.loadbalancer.use404 false
spring.cloud.gateway.discovery.locator.enabled DiscoveryClient ゲートウェイ統合を有効にするフラグ。 false
spring.cloud.gateway.discovery.locator.filters
spring.cloud.gateway.discovery.locator.include-expression ゲートウェイ統合にサービスを含めるかどうかを評価する SpEL 式。 既定値は true です。 true
spring.cloud.gateway.discovery.locator.lower-case-service-id 述語とフィルターで serviceId を小文字にするオプション。 既定値は false です。 Eureka で serviceId が自動的に大文字になる場合に便利です。 したがって、MYSERVICE/myservice/** と一致します false
spring.cloud.gateway.discovery.locator.predicates
spring.cloud.gateway.discovery.locator.route-id-prefix routeId のプレフィックスは、既定で discoveryClient.getClass().getSimpleName() + "_" です。 routeId を作成するためにサービス ID が追加されます。
spring.cloud.gateway.discovery.locator.url-expression 各ルートの URI を作成する SpEL 式。 既定値は 'lb://'+serviceId です。 'lb://'+serviceId
spring.cloud.gateway.filter.add-request-header.enabled add-request-header フィルターを有効にします。 true
spring.cloud.gateway.filter.add-request-parameter.enabled add-request-parameter フィルターを有効にします。 true
spring.cloud.gateway.filter.add-response-header.enabled add-response-header フィルターを有効にします。 true
spring.cloud.gateway.filter.circuit-breaker.enabled circuit-breaker フィルターを有効にします。 true
spring.cloud.gateway.filter.dedupe-response-header.enabled dedupe-response-header フィルターを有効にします。 true
spring.cloud.gateway.filter.fallback-headers.enabled fallback-headers フィルターを有効にします。 true
spring.cloud.gateway.filter.hystrix.enabled hystrix フィルターを有効にします。 true
spring.cloud.gateway.filter.json-to-grpc.enabled gRPC フィルターに対して JSON を有効にします。 true
spring.cloud.gateway.filter.local-response-cache.enabled local-response-cache フィルターを有効にします。 false
spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy
spring.cloud.gateway.filter.local-response-cache.size このルートのエントリを削除するキャッシュの最大サイズ (KB、MB、GB)。
spring.cloud.gateway.filter.local-response-cache.time-to-live キャッシュ エントリの有効期限が切れるまでの時間 (秒単位は s、分単位は m、時間単位は h で表現)。 5m
spring.cloud.gateway.filter.map-request-header.enabled map-request-header フィルターを有効にします。 true
spring.cloud.gateway.filter.modify-request-body.enabled modify-request-body フィルターを有効にします。 true
spring.cloud.gateway.filter.modify-response-body.enabled modify-response-body フィルターを有効にします。 true
spring.cloud.gateway.filter.prefix-path.enabled prefix-path フィルターを有効にします。 true
spring.cloud.gateway.filter.preserve-host-header.enabled preserve-host-header フィルターを有効にします。 true
spring.cloud.gateway.filter.redirect-to.enabled redirect-to フィルターを有効にします。 true
spring.cloud.gateway.filter.remove-hop-by-hop.headers
spring.cloud.gateway.filter.remove-hop-by-hop.order 0
spring.cloud.gateway.filter.remove-request-header.enabled remove-request-header フィルターを有効にします。 true
spring.cloud.gateway.filter.remove-request-parameter.enabled remove-request-parameter フィルターを有効にします。 true
spring.cloud.gateway.filter.remove-response-header.enabled remove-response-header フィルターを有効にします。 true
spring.cloud.gateway.filter.request-header-size.enabled request-header-size フィルターを有効にします。 true
spring.cloud.gateway.filter.request-header-to-request-uri.enabled request-header-to-request-uri フィルターを有効にします。 true
spring.cloud.gateway.filter.request-rate-limiter.default-key-resolver
spring.cloud.gateway.filter.request-rate-limiter.default-rate-limiter
spring.cloud.gateway.filter.request-rate-limiter.enabled request-rate-limiter フィルターを有効にします。 true
spring.cloud.gateway.filter.request-size.enabled request-size フィルターを有効にします。 true
spring.cloud.gateway.filter.retry.enabled retry フィルターを有効にします。 true
spring.cloud.gateway.filter.rewrite-location-response-header.enabled rewrite-location-response-header フィルターを有効にします。 true
spring.cloud.gateway.filter.rewrite-location.enabled rewrite-location フィルターを有効にします。 true
spring.cloud.gateway.filter.rewrite-path.enabled rewrite-path フィルターを有効にします。 true
spring.cloud.gateway.filter.rewrite-request-parameter.enabled rewrite-request-parameter フィルターを有効にします。 true
spring.cloud.gateway.filter.rewrite-response-header.enabled rewrite-response-header フィルターを有効にします。 true
spring.cloud.gateway.filter.save-session.enabled save-session フィルターを有効にします。 true
spring.cloud.gateway.filter.secure-headers.content-security-policy default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
spring.cloud.gateway.filter.secure-headers.content-type-options nosniff
spring.cloud.gateway.filter.secure-headers.disable
spring.cloud.gateway.filter.secure-headers.download-options noopen
spring.cloud.gateway.filter.secure-headers.enabled secure-headers フィルターを有効にします。 true
spring.cloud.gateway.filter.secure-headers.frame-options DENY
spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies none
spring.cloud.gateway.filter.secure-headers.referrer-policy no-referrer
spring.cloud.gateway.filter.secure-headers.strict-transport-security max-age=631138519
spring.cloud.gateway.filter.secure-headers.xss-protection-header 1 ; mode=block
spring.cloud.gateway.filter.set-path.enabled set-path フィルターを有効にします。 true
spring.cloud.gateway.filter.set-request-header.enabled set-request-header フィルターを有効にします。 true
spring.cloud.gateway.filter.set-request-host-header.enabled set-request-host-header フィルターを有効にします。 true
spring.cloud.gateway.filter.set-response-header.enabled set-response-header フィルターを有効にします。 true
spring.cloud.gateway.filter.set-status.enabled set-status フィルターを有効にします。 true
spring.cloud.gateway.filter.strip-prefix.enabled strip-prefix フィルターを有効にします。 true
spring.cloud.gateway.forwarded.enabled ForwardedHeadersFilter を有効にします。 true
spring.cloud.gateway.global-filter.adapt-cached-body.enabled adapt-cached-body グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.forward-path.enabled forward-path グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.forward-routing.enabled forward-routing グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.load-balancer-client.enabled load-balancer-client グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.local-response-cache.enabled すべてのルートの local-response-cache フィルターを有効にします。これにより、LocalResponseCache フィルターを使用してルート レベルで特定の構成を追加できるようになります。 true
spring.cloud.gateway.global-filter.netty-routing.enabled netty-routing global フィルターを有効にします。 true
spring.cloud.gateway.global-filter.netty-write-response.enabled netty-write-response グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled reactive-load-balancer-client グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.remove-cached-body.enabled remove-cached-body グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.route-to-request-url.enabled route-to-request-url グローバル フィルターを有効にします。 true
spring.cloud.gateway.global-filter.websocket-routing.enabled websocket-routing グローバル フィルターを有効にします。 true
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping グローバル CORS 構成を URL ハンドラーに追加する必要がある場合。 false
spring.cloud.gateway.globalcors.cors-configurations
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header バースト容量構成を返すヘッダーの名前。 X-RateLimit-Burst-Capacity
spring.cloud.gateway.redis-rate-limiter.config
spring.cloud.gateway.redis-rate-limiter.include-headers レート リミッター情報を含むヘッダーを含めるかどうか。 既定値は true です。 true
spring.cloud.gateway.redis-rate-limiter.remaining-header 現在の秒の間に残りの要求の数を返すヘッダーの名前。 X-RateLimit-Remaining
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header 補充レート構成を返すヘッダーの名前。 X-RateLimit-Replenish-Rate
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header 要求されたトークン構成を返すヘッダーの名前。 X-RateLimit-Requested-Tokens
spring.cloud.gateway.restrictive-property-accessor.enabled SpEL 内のメソッドとプロパティ アクセスを制限します。 true
spring.cloud.gateway.predicate.after.enabled after 述語を有効にします。 true
spring.cloud.gateway.predicate.before.enabled before 述語を有効にします。 true
spring.cloud.gateway.predicate.between.enabled between 述語を有効にします。 true
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled cloud-foundry-route-service 述語を有効にします。 true
spring.cloud.gateway.predicate.cookie.enabled cookie 述語を有効にします。 true
spring.cloud.gateway.predicate.header.enabled header 述語を有効にします。 true
spring.cloud.gateway.predicate.host.enabled host 述語を有効にします。 true
spring.cloud.gateway.predicate.host.include-port ホスト名の照合にポートを含めます。 true
spring.cloud.gateway.predicate.method.enabled method 述語を有効にします。 true
spring.cloud.gateway.predicate.path.enabled path 述語を有効にします。 true
spring.cloud.gateway.predicate.query.enabled query 述語を有効にします。 true
spring.cloud.gateway.predicate.read-body.enabled read-body 述語を有効にします。 true
spring.cloud.gateway.predicate.remote-addr.enabled remote-addr 述語を有効にします。 true
spring.cloud.gateway.predicate.weight.enabled weight 述語を有効にします。 true
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled xforwarded-remote-addr 述語を有効にします。 true
spring.cloud.gateway.set-status.original-status-header-name プロキシ処理された要求の HTTP コードを含むヘッダーの名前。
spring.cloud.gateway.streaming-media-types
spring.cloud.gateway.x-forwarded.enabled XForwardedHeadersFilter が有効である場合: true
spring.cloud.gateway.x-forwarded.for-append リストとしての X-Forwarded-For の追加が有効である場合。 true
spring.cloud.gateway.x-forwarded.for-enabled X-Forwarded-For が有効である場合: true
spring.cloud.gateway.x-forwarded.host-append リストとしての X-Forwarded-Host の追加が有効である場合。 true
spring.cloud.gateway.x-forwarded.host-enabled X-Forwarded-Host が有効である場合: true
spring.cloud.gateway.x-forwarded.order XForwardedHeadersFilter の順序。 0
spring.cloud.gateway.x-forwarded.port-append リストとしての X-Forwarded-Port の追加が有効である場合。 true
spring.cloud.gateway.x-forwarded.port-enabled X-Forwarded-Port が有効である場合: true
spring.cloud.gateway.x-forwarded.prefix-append リストとしての X-Forwarded-Prefix の追加が有効である場合。 true
spring.cloud.gateway.x-forwarded.prefix-enabled X-Forwarded-Prefix が有効である場合: true
spring.cloud.gateway.x-forwarded.proto-append リストとしての X-Forwarded-Proto の追加が有効である場合。 true
spring.cloud.gateway.x-forwarded.proto-enabled X-Forwarded-Proto が有効である場合: true
spring.cloud.gateway.httpclient.compression Netty HttpClient の圧縮を有効にします。 false
spring.cloud.gateway.httpclient.connect-timeout 接続タイムアウト (ミリ秒単位)。 既定値は 30s です。
spring.cloud.gateway.httpclient.max-header-size 応答ヘッダーの最大サイズ。
spring.cloud.gateway.httpclient.max-initial-line-length 先頭行の最大長。
spring.cloud.gateway.httpclient.pool.acquire-timeout FIXED 型の場合のみ、取得を待機する最大時間 (ミリ秒単位)。
spring.cloud.gateway.httpclient.pool.eviction-interval 指定された間隔でバックグラウンドで定期的な削除チェックを実行します。 既定で無効 ({@link Duration#ZERO})。 0
spring.cloud.gateway.httpclient.pool.max-connections FIXED 型の場合のみ、既存の接続で保留中の取得を開始する前の接続の最大数。
spring.cloud.gateway.httpclient.pool.max-idle-time チャネルが閉じられるまでの時間 (ミリ秒単位)。 NULL である場合、最大アイドル時間はありません。
spring.cloud.gateway.httpclient.pool.max-life-time チャネルが閉じられるまでの時間。 NULL である場合、最大有効時間はありません。
spring.cloud.gateway.httpclient.pool.metrics チャネル プールメトリックを収集して Micrometer に登録できるようにします。 既定で無効になっています。 false
spring.cloud.gateway.httpclient.pool.name チャネル プールのマップ名。既定値はプロキシです。 proxy
spring.cloud.gateway.httpclient.pool.type 使用する HttpClient のプールの種類。既定値は ELASTIC です。
spring.cloud.gateway.httpclient.response-timeout 応答のタイムアウト。
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout SSL close_notify のフラッシュ タイムアウト。 既定値 3000 ms 3000ms
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout SSL close_notify 読み取りタイムアウト。 既定値は 0 ms です。 0
spring.cloud.gateway.httpclient.ssl.handshake-timeout SSL ハンドシェイク タイムアウト。 既定値は 10000 ms. 10000ms
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager netty InsecureTrustManagerFactory をインストールします。 これは安全ではなく、運用環境には適していません。 false
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length フレーム ペイロードの最大長。
spring.cloud.gateway.httpclient.websocket.proxy-ping ダウンストリーム サービスに対するプロキシ ping フレーム。 既定値は true です。 true
spring.cloud.gateway.httpclient.wiretap Netty HttpClient の傍受デバッグを有効にします。 false
spring.cloud.gateway.httpserver.wiretap Netty HttpServer の傍受デバッグを有効にします。 false
spring.cloud.gateway.metrics.enabled メトリック データのコレクションを有効にします。 false
spring.cloud.gateway.metrics.prefix ゲートウェイによって出力されるすべてのメトリックのプレフィックス。 spring.cloud.gateway
spring.cloud.gateway.metrics.tags メトリックに追加されたタグ マップ。
spring.cloud.gateway.observability.enabled Micrometer 監視のサポートを有効にする必要がある場合。 true

一般的な構成

次のリストは、一般的な構成を示しています。

  • ログ関連の構成:
    • logging.level.*
    • logging.group.*
    • logging.* 名前空間のその他の構成は禁止にする必要があります。 たとえば、logging.file を使用したログ ファイルの書き込みは禁止する必要があります。