次の方法で共有


チュートリアル: 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.18.0</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. Maven App Service のデプロイを設定して、アプリケーションを Maven 経由で Azure App Service にデプロイできるようにします。

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
    
  2. アプリの resources ディレクトリに移動し、bootstrap.properties を開き、Azure App Configuration のプッシュ更新を構成します。 ファイルが存在しない場合は、作成します。 次の行をファイルに追加します。

    DefaultAzureCredential を使って、App Configuration ストアに対する認証を行います。 手順に従って、資格情報に App Configuration データ閲覧者ロールを割り当てます。 アプリケーションを実行する前に、アクセス許可が伝わるのに十分な時間をおいてください。 AppConfigCredential.java という名前の新しいファイルを作成して、次の行を追加します。

    spring.cloud.azure.appconfiguration.stores[0].endpoint= ${APP_CONFIGURATION_ENDPOINT}
    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
    

    さらに、マネージド ID を使う場合を除き、次のコードをプロジェクトに追加する必要があります。

    import org.springframework.stereotype.Component;
    
    import com.azure.data.appconfiguration.ConfigurationClientBuilder;
    import com.azure.identity.DefaultAzureCredentialBuilder;
    import com.azure.spring.cloud.appconfiguration.config.ConfigurationClientCustomizer;
    
    @Component
    public class AppConfigCredential implements ConfigurationClientCustomizer {
    
        @Override
        public void customize(ConfigurationClientBuilder builder, String endpoint) {
            builder.credential(new DefaultAzureCredentialBuilder().build());
        }
    }
    

    また、resources/META-INF ディレクトリに spring.factories ファイルを作成して、次の行を追加し、com.example.MyApplication を実際のアプリケーション名とパッケージで更新して、構成 Bootstrap Configuration を追加します。

    org.springframework.cloud.bootstrap.BootstrapConfiguration=\
    com.example.MyApplication
    

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

注意

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

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

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

  1. 環境変数を設定します。

    APP_CONFIGURATION_ENDPOINT という名前の環境変数に、Azure portal のストアの [概要] で見つかる App Configuration ストアのエンドポイントを設定します。

    Windows コマンド プロンプトを使用する場合は、次のコマンドを実行してコマンド プロンプトを再起動し、変更が反映されるようにします。

    setx APP_CONFIGURATION_ENDPOINT "endpoint-of-your-app-configuration-store"
    

    PowerShell を使っている場合は、次のコマンドを実行します。

    $Env:APP_CONFIGURATION_ENDPOINT = "endpoint-of-your-app-configuration-store"
    

    macOS または Linux を使用する場合は、次のコマンドを実行します。

    export APP_CONFIGURATION_ENDPOINT='<endpoint-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] を選択します。

    イベント ペインには、新しいサブスクリプションを作成するためのオプションがあります。

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

    イベントには、名前、トピック、フィルターが必要です。

  3. Endpoint TypeWeb Hook を選択し、Select an 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 を選択すると、Web Hook の登録要求がアプリケーションに送信されます。 要求は、Azure App Configuration クライアント ライブラリによって受信され、検証されて、有効な応答が返されます。

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

    Webhook が、ページの下部にあるテーブルに表示されます。

注意

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

Note

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

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

  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 を使用する方法については、次のチュートリアルに進んでください。