はじめに
先日より試してみている機能の一つとして、アプリの設定や機能フラグを一元的に管理するためのサービスとしてAzure App Configurationというものがあります。
上のドキュメントを読んでもあまり嬉しさがわからないのですが、その嬉しさを理解するためにもSpring Bootアプリで試してみることにしました。今回はプッシュ更新による動的な構成を試してみました...が、結果としてうまく動きませんでした。
これまで試した記事は以下の通り。
- Azure App Configurationを試す(1) - miyohide's blog
- Azure App Configurationを試す(2) - miyohide's blog
- Azure App Configurationを試す(3)ポーリングモデルを使用した動的な構成を試す - miyohide's blog
サンプル
例によってチュートリアルが用意されているのでそれを参考にします。
サンプルの記述はあっさりしすぎていたので、いくらか確認しながら実装していきます。
ライブラリの追加
Spring Actuatorを使うようです。build.gradle
に以下の記述を追加します。
implementation 'org.springframework.boot:spring-boot-starter-actuator'
com.azure.spring:azure-spring-cloud-appconfiguration-config-web
と合わせて使うことで、Spring Actuatorにappconfiguration-refresh
というエンドポイントができるようです。
チュートリアルを眺めてみると、Azure App Configurationから値が変更されたらそれをEvent Grid経由でWebHookが起動されるという流れ。ドキュメントにはEvent Grid では、HTTPS Webhook エンドポイントのみがサポートされています。
と書かれています。
このため、ローカルで実行することはやめてAzure Web Appsにてデプロイすることにしました。JavaアプリをAzure Web AppsへのデプロイはAzure Gradle Pluginsを使うと楽です。
アプリケーションの設定
アプリケーションの設定も行います。Spring Actuatorのappconfiguration-refresh
のWebエンドポイントを使えるようにします。bootstrap.properties
にて
management.endpoints.web.exposure.include=appconfiguration-refresh
と記述します。チュートリアルにあるように二重引用符付きだとうまく動きませんでした。
また、spring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.name
とspring.cloud.azure.appconfiguration.stores[0].monitoring.push-notification.primary-token.secret
のそれぞれの値はWebHooksのパラメータとして使うだけみたいなので、テスト目的だとあまり真面目に考えなくても良さそうです。
あとはAzure Portal上で設定すればできるはずが...
あとはAzure Portal上で設定すればできるはずとたかを括っていたのですが、うまく動かず。
Eventは送信されているようですし...
実際、Application Insightsにてログを確認するとPOST /actuator/appconfiguration-refresh
が発行されているのですが、アプリケーションへ変更が反映されず...
"2022/5/15 6:38:09.629","POST /actuator/appconfiguration-refresh",True,200,"15.642","<250ms",request,,,"POST /actuator/appconfiguration-refresh" "2022/5/15 6:38:15.728","GET /",True,200,"28.683","<250ms",request,,,"GET /"
う〜〜〜ん、もうちょっと見直します。