LoginSignup
9
5

More than 5 years have passed since last update.

CloudFoundry × SpringBoot環境でDBの鍵をUserProvidedServiceで管理

Last updated at Posted at 2018-01-26

この資料について

CloudFoundryにデプロイしているSpringBootアプリケーションの鍵を管理する際に直接書いたりしたくないので、CloudFoundryが用意しているUserProviededService(UPS)を使っていい感じにやる方法を記述する

導入までの大筋

  1. UPSインスタンスを立ち上げて鍵を登録する
  2. アプリケーションからUPSで登録した鍵を引けるように記述する
  3. manifest.ymlにUPSをバインドする設定を記述する
  4. アプリケーションをCFにpushする

導入するアプリケーション

MySQLに接続してデータを返却するAPIとする。詳細なコードは巻末のソースを参照すること

導入する

1. UPSインスタンスを立ち上げて鍵を登録する

下記コマンドを実行して鍵を対話的に登録する
$ cf cups my-user-provided-service -p "url, user, password"

url> jdbc:mysql://your.mysql.server.domain:3306/demo

user> demo

password> secret
補足. 登録すると下記のようなJSONがバインドしたインスタンスの環境変数に登録される
"VCAP_SERVICES": {
  "user-provided": [
   {
    "credentials": {
     "password": "secret",
     "url": "jdbc:mysql://your.mysql.server.domain:3306/demo",
     "user": "demo"
    },
    "label": "user-provided",
    "name": "my-user-provided-service",
    "syslog_drain_url": "",
    "tags": [],
    "volume_mounts": []
  }
 ]
}

2. アプリケーションからUPSで登録した鍵を引けるように記述する

application.ymlにMySQLの接続情報を下記のように記述する
spring:
  datasource:
    url: ${vcap.services.my-user-provided-service.credentials.url}
    username: ${vcap.services.my-user-provided-service.credentials.user}
    password: ${vcap.services.my-user-provided-service.credentials.password}
補足. 配信されるVCAP_SERVICEの情報は下記で取得できる

SpringBootでは、内部的にVCAP_*の情報をパースして下記の指定方法で使用できるようしているため、独自でJSONのパーサ等を作る必要はない

${vcap.services.UPSのnameにあたるもの.user-provided以下のkey名.前で指定したオブジェクトのkey名}
もしくは、
${cloud.services.UPSのnameにあたるもの.user-provided以下のkey名.前で指定したオブジェクトのkey名}

3. manifest.ymlにUPSをバインドする設定を記述する

applications:
- name: bind-ups-sample
  buildpack: https://github.com/cloudfoundry/java-buildpack.git
  memory: 1G
  path: build/libs/bind-ups-sample-0.0.1-SNAPSHOT.jar
  services:
    - my-user-provided-service # これがバインドする設定

4. アプリケーションをCFにpushして起動できれば完了

$ cf push

ソース

mitsuya-saida/bind-ups-sample

参考にした資料

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5