Spring Boot Config Client for Server with vault backend

Spring Boot Config Serverでvaultの設定ファイルを取得し、そのserverに対して設定ファイルを取得しにいくclientのサンプルです。

  • イメージ図

f:id:tomoTaka:20171229085155p:plain

  • vaultのtokenをbootstrap.ymlファイルに追加
spring:
  cloud:
    config:
      token: your-vault-token
  • controllerクラスでvaultに保管しているファイルの値をconfig server 経由で取得
package com.example.configclient.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RefreshScope
public class ConfigController {
    @Value("${foo}")
    private String vaultFoo;

    @Value("${baz}")
    private String vaultBaz;
    @RequestMapping("/show/vaultconfig")
    @ResponseBody
    public String getVaultConfig() {
        String config = String.format("vault:foo=[%s], baz=[%s]", vaultFoo, vaultBaz);
        return config;
    }
}
  • serverで取得した時のvaultの値
{"name":"app-config","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"vault:app-config","source":{"foo":"bar"}},{"name":"vault:application","source":{"baz":"bam","foo":"bar"}}]}
  • clientから設定ファイルを取得

f:id:tomoTaka:20171229082643p:plain

コードは、アップ
github.com