チュートリアル: Java Spring アプリでプッシュ更新による動的な構成を使用する

App Configuration Java Spring クライアント ライブラリでは、アプリケーションを再起動させることなく必要に応じて構成を更新することがサポートされます。 次の 2 つの方法のどちらかまたは両方を使用して、App Configuration 内の変更を検出するようにアプリケーションを構成することができます。

  • ポーリング モデル: ポーリングを使用して構成の変更を検出する既定の動作です。 キャッシュされた設定値の有効期限が切れた後、次に AppConfigurationRefreshrefreshConfigurations を呼び出すと、構成が変更されているかどうかをチェックするための要求がサーバーに送信され、必要に応じて、更新された構成がプルされます。

  • プッシュ モデル: App Configuration のイベントを使用して構成の変更を検出します。 キー値の変更イベントを Webhook を使用して Event Grid で送信するように App Configuration を設定すると、アプリケーションでは、それらのイベントを使用して、構成を最新の状態に保つために必要な要求の総数を最適化できます。

このチュートリアルでは、自分が作成するコードに、プッシュ更新を使用して構成の動的更新を実装する方法について説明します。 これは、クイック スタートで紹介されているアプリに基づいています。 先に進む前に、まず「App Configuration を使用して Java Spring アプリを作成する」を完了しておいてください。

このチュートリアルの手順は、任意のコード エディターを使用して実行できます。 推奨のエディターは Visual Studio Code です (Windows、macOS、および Linux プラットフォームで使用できます)。

このチュートリアルでは、以下の内容を学習します。

  • App Configuration から Webhook に構成の変更イベントを送信するようにサブスクリプションを設定する
  • Spring Boot アプリケーションを App Service にデプロイする
  • App Configuration への変更に合わせて構成を更新するように Java Spring アプリを設定する。
  • 最新の構成をアプリケーションに取り込む。

前提条件

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

プッシュ更新をセットアップする

  1. pom.xml ファイルを開いて、次の依存関係でファイルを更新します。

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId>
    </dependency>
    
    <!-- Adds the Ability to Push Refresh -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>spring-cloud-azure-dependencies</artifactId>
            <version>5.8.0</version>
            <type>pom</type>
            <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. Maven App Service のデプロイを設定して、アプリケーションを Maven 経由で Azure App Service にデプロイできるようにします。

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  3. bootstrap.properties を開き、構成プッシュ更新Azure アプリ構成します。

    # Azure App Configuration Properties
    spring.cloud.azure.appconfiguration.stores[0].connection-string= ${AppConfigurationConnectionString}
    spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled= true
    spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30d
    spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key= sentinel
    spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.name= myToken
    spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.secret= myTokenSecret
    
    management.endpoints.web.exposure.include= appconfiguration-refresh
    

スロットリングが生じる可能性を減らすために、キャッシュされている値がダーティとしてマークされる前に、ランダムな待ち時間が追加されます。 キャッシュされている値がダーティとしてマークされるまでの最大待ち時間の既定値は 30 秒です。

注意

プライマリ トークン名は、キーとして App Configuration に格納する必要があります。その後、セキュリティを強化するために、プライマリ トークン シークレットを App Configuration キー コンテナー参照として格納する必要があります。

App Service でアプリをビルドして実行する

Event Grid Webhook は、作成時に検証する必要があります。 検証するには、このガイドに従います。または、既に構成されている Azure App Configuration Spring Web ライブラリを使用してアプリケーションを起動すると、アプリケーションが登録されます。 イベント サブスクリプションを使用するには、次の 2 つのセクションの手順に従います。

  1. 環境変数に App Configuration インスタンスの接続文字列を設定します。

    setx AppConfigurationConnectionString <connection-string-of-your-app-configuration-store>
    
  2. azure-webapp-maven-pluginconfiguration の追加から、pom.xml を更新します。

    <appSettings>
      <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString>
    </appSettings>
    
  3. 次のコマンドを実行して、コンソール アプリをビルドします。

     mvn package
    
  4. ビルドが正常に完了したら、次のコマンドを実行して、アプリをローカルで実行します。

    mvn azure-webapp:deploy
    

イベント サブスクリプションをセットアップする

  1. Azure portal で App Configuration リソースを開き、[Events] ペインの [+ Event Subscription] をクリックします。

    The events pane has an option to create new Subscriptions.

  2. Event SubscriptionSystem Topic の名前を入力します。 既定では、[イベントの種類のキーと値の変更] と [キーと値の削除] が設定されます。これは、[フィルター] タブを使用してプッシュ イベントが送信される正確な理由を選択することにより変更できます。

    Events require a name, topic, and filters.

  3. Endpoint TypeWeb Hook を選択し、Select an endpoint を選択します。

    Selecting Endpoint creates a new blade to enter the endpoint URI.

  4. エンドポイントは、アプリケーションの URI + "/actuator/appconfiguration-refresh?{your-token-name}={your-token-secret}" です。 例: https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret

  5. [Create] をクリックしてイベント サブスクリプションを作成します。 Create を選択すると、Webhook の登録要求がアプリケーションに送信されます。 これは、Azure App Configuration クライアント ライブラリによって受信され、検証されて、有効な応答が返されます。

  6. [Events] ペインの [Event Subscriptions] をクリックして、サブスクリプションが正しく作成されたことを確認します。

    Web Hook shows up in a table on the bottom of the page.

Note

構成の変更をサブスクライブするとき、1 つまたは複数のフィルターを使用することで、アプリケーションに送信されるイベントの数を減らすことができます。 これらは、Event Grid サブスクリプション フィルターとして構成できます。 たとえばサブスクリプション フィルターを使用すると、特定の文字列で始まるキーの変更イベントだけをサブスクライブすることができます。

Note

アプリケーションの複数のインスタンスが実行されている場合は、Azure Service Bus を設定する必要があるエンドポイントを使用 appconfiguration-refresh-bus できます。これは、アプリケーションのすべてのインスタンスにメッセージを送信して構成を更新するために使用されます。 これは、アプリケーションの複数のインスタンスが実行されていて、すべてのインスタンスが最新の構成で確実に更新されるようにする場合に便利です。 このエンドポイントは、構成された依存関係として存在 spring-cloud-bus しない限り使用できません。 詳細については、 Azure Service Bus Spring Cloud Bus のドキュメント を参照してください。 サービス バス接続を設定する必要があるのは、Azure アプリ構成ライブラリがメッセージの送受信を処理することだけです。

アプリケーションの検証とテスト

  1. アプリケーションが実行されたら、curl を使用してアプリケーションをテストできます。次に例を示します。

    curl -X GET https://my-azure-webapp.azurewebsites.net
    
  2. Azure portal を開き、アプリケーションに関連付けられている App Configuration リソースに移動します。 [操作] の下の [構成エクスプローラー] を選択し、次のキーの値を更新します。

    キー
    /application/config.message Hello - Updated
  3. ブラウザー ページを最新の情報に更新し、新しいメッセージが表示されるのを確認します。

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

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次のステップ

このチュートリアルでは、App Configuration から動的に構成設定を更新できるように Java アプリを設定しました。 その他の質問については、リファレンス ドキュメントを参照してください。Spring Cloud Azure App Configuration ライブラリのしくみに関する詳細がすべて記載されています。 App Configuration へのアクセスを効率化する Azure マネージド ID を使用する方法については、次のチュートリアルに進んでください。