チュートリアル: Java Spring アプリでプッシュ更新による動的な構成を使用する
App Configuration Java Spring クライアント ライブラリでは、アプリケーションを再起動させることなく必要に応じて構成を更新することがサポートされます。 次の 2 つの方法のどちらかまたは両方を使用して、App Configuration 内の変更を検出するようにアプリケーションを構成することができます。
ポーリング モデル: ポーリングを使用して構成の変更を検出する既定の動作です。 キャッシュされた設定値の有効期限が切れた後、次に
AppConfigurationRefresh
のrefreshConfigurations
を呼び出すと、構成が変更されているかどうかをチェックするための要求がサーバーに送信され、必要に応じて、更新された構成がプルされます。プッシュ モデル: 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 サブスクリプション - 無料アカウントを作成する
- バージョン 11 を含む、サポートされている Java Development Kit (JDK)。
- Apache Maven バージョン 3.0 以降。
- 既存の Azure App Configuration ストア。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
プッシュ更新をセットアップする
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>
Maven App Service のデプロイを設定して、アプリケーションを Maven 経由で Azure App Service にデプロイできるようにします。
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config
bootstrap.properties を開き、Azure App Configuration プッシュ更新を構成します。
# 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 つのセクションの手順に従います。
環境変数に App Configuration インスタンスの接続文字列を設定します。
setx AppConfigurationConnectionString <connection-string-of-your-app-configuration-store>
azure-webapp-maven-plugin
のconfiguration
の追加から、pom.xml
を更新します。<appSettings> <AppConfigurationConnectionString>${AppConfigurationConnectionString}</AppConfigurationConnectionString> </appSettings>
次のコマンドを実行して、コンソール アプリをビルドします。
mvn package
ビルドが正常に完了したら、次のコマンドを実行して、アプリをローカルで実行します。
mvn azure-webapp:deploy
イベント サブスクリプションをセットアップする
Azure portal で App Configuration リソースを開き、[
Events
] ペインの [+ Event Subscription
] を選択します。Event Subscription
とSystem Topic
の名前を入力します。 既定では、[イベントの種類のキーと値の変更] と [キーと値の削除] が設定されます。これは、[フィルター] タブを使用してプッシュ イベントが送信される正確な理由を選択することにより変更できます。Endpoint Type
にWeb Hook
を選択し、Select an endpoint
を選択します。エンドポイントは、アプリケーションの URI + "/actuator/appconfiguration-refresh?{your-token-name}={your-token-secret}" です。 例:
https://my-azure-webapp.azurewebsites.net/actuator/appconfiguration-refresh?myToken=myTokenSecret
。イベント サブスクリプションを作成するために [
Create
] を選択します。Create
を選択すると、Webhook の登録要求がアプリケーションに送信されます。 これは、Azure App Configuration クライアント ライブラリによって受信され、検証されて、有効な応答が返されます。[
Events
] ペインの [Event Subscriptions
] を選択して、サブスクリプションが正しく作成されたことを確認します。
注意
構成の変更をサブスクライブするとき、1 つまたは複数のフィルターを使用することで、アプリケーションに送信されるイベントの数を減らすことができます。 これらは、Event Grid サブスクリプション フィルターとして構成できます。 たとえばサブスクリプション フィルターを使用すると、特定の文字列で始まるキーの変更イベントだけをサブスクライブすることができます。
Note
アプリケーションの複数のインスタンスが実行されている場合は、Azure Service Bus を設定する必要がある appconfiguration-refresh-bus
エンドポイントを使用できます。これは、アプリケーションのすべてのインスタンスにメッセージを送信して、それらの構成を更新するために使用されます。 これは、アプリケーションの複数のインスタンスが実行されており、すべてのインスタンスが最新の構成で確実に更新されるようにする場合に便利です。 このエンドポイントは、spring-cloud-bus
を依存関係として構成しない限り使用できません。 詳細については、Azure Service Bus Spring Cloud Bus のドキュメントを参照してください。 Service Bus 接続のみを設定する必要があり、Azure App Configuration ライブラリがメッセージの送受信を処理します。
アプリケーションの検証とテスト
アプリケーションが実行されたら、curl を使用してアプリケーションをテストできます。次に例を示します。
curl -X GET https://my-azure-webapp.azurewebsites.net
Azure portal を開き、アプリケーションに関連付けられている App Configuration リソースに移動します。 [操作] の下の [構成エクスプローラー] を選択し、次のキーの値を更新します。
キー 値 /application/config.message Hello - Updated ブラウザー ページを最新の情報に更新し、新しいメッセージが表示されるのを確認します。
リソースをクリーンアップする
この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。
重要
リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。
- Azure portal にサインインし、 [リソース グループ] を選択します。
- [名前でフィルター] ボックスにリソース グループの名前を入力します。
- 結果一覧でリソース グループ名を選択し、概要を表示します。
- [リソース グループの削除] を選択します。
- リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。
しばらくすると、リソース グループとそのすべてのリソースが削除されます。
次のステップ
このチュートリアルでは、App Configuration から動的に構成設定を更新できるように Java アプリを設定しました。 その他の質問については、リファレンス ドキュメントを参照してください。Spring Cloud Azure App Configuration ライブラリのしくみに関する詳細がすべて記載されています。 App Configuration へのアクセスを効率化する Azure マネージド ID を使用する方法については、次のチュートリアルに進んでください。