次の方法で共有


チュートリアル: Azure Container Apps で Spring 用マネージド管理に接続する

Spring 用マネージド管理コンポーネントは、アクチュエータ エンドポイントを公開する Spring Boot Web アプリケーション用の管理インターフェイスを提供します。 Azure Container Apps のマネージド コンポーネントとして、シームレスな統合と管理のために、コンテナー アプリを Spring 用管理に簡単にバインドできます。

このチュートリアルでは、Spring 用管理 Java コンポーネントを作成し、それをコンテナー アプリにバインドして、Spring アプリケーションを簡単に監視および管理できるようにする方法について説明します。

Spring 分析情報の管理者ダッシュボードの概要を示すスクリーンショット。

このチュートリアルでは、次の作業を行う方法について説明します。

  • Spring 用管理 Java コンポーネントを作成します。
  • Spring 用管理 Java コンポーネントにコンテナー アプリをバインドします。

Spring 用管理と Spring 用 Eureka サーバーを統合する場合は、代わりに、Azure Container Apps での Spring 用管理の Spring 用 Eureka サーバーとの統合に関する記事を参照してください。

重要

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

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 まだお持ちでない場合は、無料で作成できます。
  • Azure CLI

考慮事項

Container Apps で Spring 用管理コンポーネントを実行する場合は、次の詳細に注意してください。

項目 説明
範囲 コンポーネントは、接続されているコンテナー アプリと同じ環境で実行されます。
スケーリング コンポーネントのスケーリングはできません。 スケーリング プロパティ minReplicasmaxReplicas は両方とも 1 に設定されています。
リソース コンポーネントのコンテナー リソースの割り当ては固定されています。 CPU コア数は 0.5、メモリ サイズは 1 Gi です。
価格 コンポーネント課金は消費ベースの価格設定によります。 マネージド コンポーネントによって消費されるリソースは、アクティブ/アイドル レートで課金されます。 課金を停止するために、使用しなくなったコンポーネントを削除できます。
バインド コンテナー アプリは、バインドを使用してコンポーネントに接続します。 バインドは、コンテナー アプリの環境変数に構成を注入します。 バインドが確立されると、コンテナー アプリは環境変数から構成値を読み取ってコンポーネントに接続できます。

セットアップ

Spring 用管理コンポーネントの操作を開始する前に、まず、必要なリソースを作成する必要があります。

次のコマンドは、リソース グループとコンテナー アプリ環境を作成するのに役立ちます。

  1. アプリケーション構成をサポートする変数を作成します。 これらの値は、このレッスンのために提供されています。

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

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

    az group create \
        --name $RESOURCE_GROUP \
        --location $LOCATION \
        --query "properties.provisioningState"
    

    --query パラメーターを使用すると、応答がフィルター処理され、単純な成功または失敗のメッセージになります。

  4. コンテナー アプリ環境を作成します。

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

コンポーネントを使用する

既存の環境が作成されたので、コンテナー アプリを作成し、Spring 用管理の Java コンポーネント インスタンスにバインドできます。

  1. Spring 用管理 Java コンポーネントを作成します。

    az containerapp env java-component admin-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 1 \
        --max-replicas 1
    
  2. Spring 用管理 Java コンポーネントを更新します。

    az containerapp env java-component admin-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 2 \
        --max-replicas 2
    

Spring 用管理 Java コンポーネントにコンテナー アプリをバインドする

  1. コンテナー アプリを作成し、Spring 用管理コンポーネントにバインドします。

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --bind $JAVA_COMPONENT_NAME
    

バインド操作は、コンテナー アプリを Spring 用管理 Java コンポーネントにバインドします。 コンテナー アプリは、環境変数 (主に SPRING_BOOT_ADMIN_CLIENT_URL プロパティ) から構成値を読み取り、Spring 用管理コンポーネントに接続できるようになりました。

バインドでは、次のプロパティも注入されます。

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

このプロパティは、Spring 用管理コンポーネントのクライアントが、Spring 用管理サーバーに接続するときにコンテナー アプリ インスタンスの IP アドレスを優先する必要があることを示します。

オプション: Spring 用管理 Java コンポーネントからコンテナー アプリのバインドを解除する

コンテナー アプリからバインドを削除するには、--unbind オプションを使用します。

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

ダッシュボードを表示する

重要

ダッシュボードを表示するには、少なくとも Microsoft.App/managedEnvironments/write ロールがマネージド環境リソースのアカウントに割り当てられている必要があります。 リソースに Owner ロールまたは Contributor ロールを明示的に割り当てられます。 また、手順に従ってカスタム ロール定義を作成し、アカウントに割り当てることもできます。

  1. カスタム ロール定義を作成します。

    az role definition create --role-definition '{
        "Name": "<ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    <> かっこの間にあるプレースホルダーを実際の値に置き換えてください。

  2. マネージド環境リソースのアカウントにカスタム ロールを割り当てます。

    マネージド環境のリソース ID を取得します。

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id \
        --output tsv)
    
  3. ユーザー アカウントにそのロールを割り当てます。

    このコマンドを実行する前に、プレースホルダー (<> かっこで示される) を、自分のユーザーまたはサービス プリンシパル ID またはロール名に置き換えます。

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Note

    <USER_OR_SERVICE_PRINCIPAL_ID> 値は、Azure portal へのアクセスに使用する ID である必要があります。 <ROLE_NAME> 値は、手順 1 で割り当てた名前です。

  4. Spring 用管理ダッシュボードの URL を取得します。

    az containerapp env java-component admin-for-spring show \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --query properties.ingress.fqdn \
        --output tsv
    

    このコマンドは、Spring 用管理ダッシュボードにアクセスするために使用できる URL を返します。 ダッシュボードを使用すると、次のスクリーンショットに示すように、コンテナー アプリも表示できます。

    Spring 用管理ダッシュボードの概要を示すスクリーンショット。

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

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

az group delete --resource-group $RESOURCE_GROUP

依存関係

独自のコンテナー アプリで管理コンポーネントを使用する場合は、pom.xml ファイルに次の依存関係を追加する必要があります。 Maven リポジトリで、バージョン番号を最新のバージョンに置き換えます。

<dependency>
    <groupId>de.codecentric</groupId>
    <version>3.3.2</version>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

構成プロパティ

Spring Boot 2 以降では、healthinfo 以外のエンドポイントは、既定では公開されません。 これらは、application.properties ファイルに次の構成を追加して公開できます。

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

Spring 用管理で許可される構成の一覧

次の一覧は、アプリ用に構成できる管理コンポーネントのプロパティについて詳しく説明したものです。 詳細については、Spring Boot 管理者に関する記事を参照してください。

プロパティ名 説明 規定値
spring.boot.admin.server.enabled Spring Boot Admin サーバーを有効にします。 true
spring.boot.admin.context-path 管理サーバーの静的アセットと API が提供されるパス プレフィックス。 Dispatcher-Servlet に相対します。
spring.boot.admin.monitor.status-interval インスタンスの状態を確認する時間間隔 (ミリ秒)。 10,000ms
spring.boot.admin.monitor.status-lifetime 状態の有効期間 (ミリ秒)。 最後の状態が期限切れでない限り、状態は更新されません。 10,000 ms
spring.boot.admin.monitor.info-interval インスタンスの情報を確認する時間間隔 (ミリ秒)。 1m
spring.boot.admin.monitor.info-lifetime 情報の有効期間 (分単位)。 最後の情報が期限切れでない限り、情報は更新されません。 1m
spring.boot.admin.monitor.default-timeout 要求を行うときの既定のタイムアウト。 特定のエンドポイントの個々の値は、spring.boot.admin.monitor.timeout.* を使用してオーバーライドできます。 10,000
spring.boot.admin.monitor.timeout.* endpointId ごとのタイムアウトのキーと値のペア。 既定値は default-timeout 値です。
spring.boot.admin.monitor.default-retries 失敗した要求を再試行する既定の回数。 データを変更する要求 (PUTPOSTPATCHDELETE) は再試行されません。 特定のエンドポイントの個々の値は、spring.boot.admin.monitor.retries.* を使用してオーバーライドできます。 0
spring.boot.admin.monitor.retries.* endpointId ごとの再試行回数のキーと値のペア。 データを変更する要求 (PUTPOSTPATCHDELETE) は再試行されません。 既定値は default-retries 値です。
spring.boot.admin.metadata-keys-to-sanitize すべての JSON 出力でサニタイズするために使用されるこれらの正規表現パターンに一致するキーのメタデータ値。 既定では、Spring Boot 3 以降で、すべてのアクチュエータ値がマスクされます。 非サニタイズ プロセスを構成する方法の詳細については、機密値のサニタイズに関するページを参照してください。 ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$"
spring.boot.admin.probed-endpoints Spring Boot 1.x クライアント アプリケーションの場合は、Spring Boot 管理者が OPTIONS 要求を使用して、指定されたエンドポイントのプローブを実行します。 パスが ID と異なる場合は、この値を id:path として指定できます (例: health:ping)。 "health", "env", "metrics", "httptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"
spring.boot.admin.instance-proxy.ignored-headers クライアントに要求を行うときに転送されないヘッダー。 "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.title 表示されるページ タイトル。 "Spring Boot Admin"
spring.boot.admin.ui.poll-timer.cache 新しいキャッシュ データをフェッチするためのポーリング期間 (ミリ秒)。 2500
spring.boot.admin.ui.poll-timer.datasource 新しいデータ ソースのデータをフェッチするためのポーリング期間 (ミリ秒)。 2500
spring.boot.admin.ui.poll-timer.gc 新しい GC データをフェッチするためのポーリング期間 (ミリ秒)。 2500
spring.boot.admin.ui.poll-timer.process 新しいプロセス データをフェッチするためのポーリング期間 (ミリ秒)。 2500
spring.boot.admin.ui.poll-timer.memory 新しいメモリ データをフェッチするためのポーリング期間 (ミリ秒)。 2500
spring.boot.admin.ui.poll-timer.threads 新しいスレッド データをフェッチするためのポーリング期間 (ミリ秒)。 2500
spring.boot.admin.ui.poll-timer.logfile 新しい logfile データをフェッチするためのポーリング期間 (ミリ秒)。 1000
spring.boot.admin.ui.enable-toasts トースト通知を有効または無効にします。 false
spring.boot.admin.ui.title ブラウザーのウィンドウ タイトル値。 ""
spring.boot.admin.ui.brand ナビゲーション ヘッダーにレンダリングされる HTML コード。既定では Spring Boot Admin ラベルが使用されます。 既定では、Spring Boot 管理ロゴの後にその名前が付けられます。 ""
management.scheme アクチュエータ エンドポイントへのアクセスに使用されるサービス URL で置き換えられる値。
management.address アクチュエータ エンドポイントへのアクセスに使用されるサービス URL で置き換えられる値。
management.port アクチュエータ エンドポイントへのアクセスに使用されるサービス URL で置き換えられる値。
management.context-path アクチュエータ エンドポイントへのアクセスに使用されるサービス URL に追加される値。 ${spring.boot.admin.discovery.converter.management-context-path}
health.path 正常性チェックに使用されるサービス URL に追加される値。 EurekaServiceInstanceConverter によって無視されます。 ${spring.boot.admin.discovery.converter.health-endpoint}
spring.boot.admin.discovery.enabled 管理サーバーの DiscoveryClient サポートを有効にします。 true
spring.boot.admin.discovery.converter.management-context-path management-url 値が DefaultServiceInstanceConverter によって変換されるときに、検出されたサービスの service-url に追加される値。 /actuator
spring.boot.admin.discovery.converter.health-endpoint-path health-url 値が DefaultServiceInstanceConverter によって変換されるときに、検出されたサービスの management-url に追加される値。 "health"
spring.boot.admin.discovery.ignored-services 検出を使用するときに無視され、アプリケーションとして登録されないサービス。 "foo*""*bar""foo*bar*" などの単純なパターンをサポートします。
spring.boot.admin.discovery.services 検出を使用するときに含まれ、アプリケーションとして登録されるサービス。 "foo*""*bar""foo*bar*" などの単純なパターンをサポートします。 "*"
spring.boot.admin.discovery.ignored-instances-metadata この一覧のパターンに一致するメタデータ項目が少なくとも 1 つ含まれている場合に無視されるサービス。 "discoverable=false" などのパターンをサポートします。
spring.boot.admin.discovery.instances-metadata 一覧のパターンに一致するメタデータ項目が少なくとも 1 つ含まれている場合に含まれるサービス。 "discoverable=true" などのパターンをサポートします。

一般的な構成

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

チュートリアル: Spring 用マネージド管理と Spring 用マネージド Eureka サーバーを統合する