Archive : 2017-04

spring-bootの公式リファレンスに載っているのですが、Spring Boot ActuatorのCloudFoundry連携機能とSpring Securityを同時に使う場合、Spring Boot Actuatorが提供するエンドポイントである/cloudfoundryapplication以下をSpring Securityによる認証対象から外す必要があります。なお、/cloudfoundryapplication以下はCloudFoundryのUAAトークン認証で保護されているので、Spring Securityの認証対象外にしても認証なしで外部に曝される訳ではありません。PCF側のドキュメントには載っていなかったのでメモ。

 

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .mvcMatchers("/cloudfoundryapplication/**")
                .permitAll()
            .mvcMatchers("/mypath")
                .hasAnyRole("SUPERUSER")
            .anyRequest()
                .authenticated().and()
        .httpBasic();
}

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-cloudfoundry.html

APR
7

PCF Dev v0.25.0がリリースされています。今回のリリースから、Spring Boot Actuator連携機能が含まれているので、Spring Boot Actuatorが提供するエンドポイントを通じて、PCFのApp Managerがアプリのヘルスチェック情報を収集したり、Logger別にログレベルを動的に変更することが出来るようになりました。

早速試してみたのでそのメモ。

Spring Boot Actuatorを有効にしたアプリの作成

まずはSpring InitializrでSpring Bootアプリを作成。Versionは、1.5以上、Dependencyとしては、WebとActuatorが必要です。

image

生成されたソースのzipを解凍し、解凍して出来たディレクトリの中でmavenなら以下のコマンドを実行します。(そういえば、Windows 10のBash on Windowsも、Creators updateからOpenJDKが動作するようになっていました。色々便利ですね。)

./mvnw package

 

アプリのPCF Devへのpush

そしていつも通りcf push

cf push pcfdev-actuator-demo -i 3 -p target/pcfdev-actuator-demo-0.0.1-SNAPSHOT.jar

PCF DevのApp Managerからインスタンスのヘルスチェック情報の確認

デプロイされたアプリをPCF DevのApp Managerから確認すると、アプリ名の左にSpring Bootのロゴが表示されており、各インスタンスのヘルスチェック情報が詳しく表示されるようになりました。

image

PCF Devから、アプリのログレベルを動的に変更

また、Logsタブには"Configure Logging Levels"というボタンが追加されており、各Loggerのログレベルを画面から動的に変更することが可能です。

image

うーん、面白い。

 

ちなみに、App ManagerとSpring Boot Actuatorの間の認証は、ザックリいうと以下のようなプロセスのようです。

  1. PCFがSpring Bootアプリを、APIエンドポイントのURLを環境変数として与えた状態で起動
  2. Actuatorは環境変数から取得したPCFのAPIを叩き、PCFの公開鍵を取得
  3. App ManagerがActuatorの提供しているPCF連携用APIを呼び出した場合、Actuatorは取得した公開鍵でリクエストを認証

環境変数から設定へのポインタを渡す、Twelve-Factor Appのお手本のような構成ですね。