About
Spring Bootを利用するProjectからRailsを利用するProjectにうつり、ふと、RailsからもSpringCloudConfigサーバーにつなげるクライアントGemがあるのではないかと思って調べてみました。
Spring Cloud Configとは
設定情報をGitなどで管理し、設定情報を返すサーバーの役割をするマイクロサービス(Spring Cloud Config Server) と、クライアントとなる設定を利用するマイクロサービスにより設定情報を活用します。クライアントの設定を利用するマイクロサービスは、 Spring Cloud Config ClientのJarをロードすることと、 Config ServerのURL等情報のみで設定を利用することができます。
ConfigServerをたてます
github上でサンプルを探してConfigServerをたてます。 こちらを利用しました。
README.md にあるように実行するか、 mvnw spring-boot:run
で実行できますが、少しだけ中身に触れておきます。
pom.xml(抜粋)はつぎのとおりで、 bootのバージョンは2.3.3.RELEASE
で、spring-cloud-config-server
をdependencyに追加します。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
....
設定情報のデータソースは、 bootstrap.yml に次のように定義します。
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://{設定を保存するリポジトリ}
searchPaths: {リポジトリ内で設定を保存するフォルダ}
Spring Boot Application に以下のようにアノテーション@EnableConfigServer
を追加します。
@SpringBootApplication
@EnableConfigServer
public class Application {
public static void main(String args[]) {
SpringApplication.run(Application.class, args);
}
}
設定を利用するクライアントのマイクロサービスは、 pom.xml に次のように config client のdependencyを追加し、
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
bootstrap.ymlに次のように、 config server のURLを設定します。
pring:
application:
name: config-client-test
cloud:
config:
env: default # optional
label: master # optional
uri: http://localhost:8888 # optional
Rubyでの利用について
ここまでは全段で、 spring-bootでのconfig serverの利用についてを簡単に記載しました。ここからはRubyでの利用について記載していきます。
Googleで検索してみると、
が見つかったのですが、 今回試したRails6には対応していないようでした。また、config serverのサポートバージョンもコミットコメントからv2までのようです。もうひとつは、
というものでした。こちらは、 Gemfileにgem 'scc_ruby'
を追加するのみで利用できました。次のように利用できます。
h = SccRuby::Api.fetch('http://localhost:8888', 'sample', Rails.env)
クライアントライブラリは要らない?
ここで思ったのが、HTTPでとってこれば良いので、クライアントライブラリを利用しなくても良いのではということです。例えば次のように取得できます。
uri = URI.parse("http://localhost:8888/sample/" + Rails.env)
response = Net::HTTP.get_response(uri)
他の言語のクライアント
中は見ていませんが、 python のクライアントに次のようなものがあるようです。
spring-config-clientのほうは 2019から更新されていませんが、config-clientは 2021/04の更新がありました。
go-langも調べてみました。
も 2021の更新がありました。
まとめ
- Spring Cloud Configに他の言語のクライアントから繋ぐことができる
- クライアントライブラリを利用することができるが、ライブラリが古いことがありそう
- ライブラリを利用しなくてもHTTPで繋いで設定を取得することができる。