はじめに
-
DBアクセス用パスワード等の秘匿情報を設定ファイルに記載しておくのは管理上好ましくないので、AWSパラメータストアで管理するにあたり、Spring Bootアプリケーション設定値(application.yml/application.properties)にパラメータストアの設定値を統合(パラメータストアの値をアプリケーション設定値に反映)する作業を行いました。
-
本番と開発の設定を分離している点と合わせて手順等を備忘録としてまとめたものです。(乱筆な点、ご容赦ください)
注意点
- 実際の設定ファイルの値とは変えている個所がありますので、この値そのもので動作検証して保証したものではありません。
環境
- Spring Boot 3.1.0
- Java 17
- gradle 8.8
依存関係の追加
まず、Spring BootプロジェクトにAWSパラメータストアを使用するための依存関係を追加します。build.gradle
ファイルに以下のエントリを追加します。
dependencies {
implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.1.1")
implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store'
}
パラメータストアの設定値(例)
パス | 値 |
---|---|
/hogehogeapp/mysqlusername |
appuser |
/hogehogeapp/development/mysqlpassword |
dev_pass123 |
/hogehogeapp/production/mysqlpassword |
prd_pass123 |
SpringBootのアプリケーション設定値(抜粋)
application.yml
spring:
application:
name: hogehogeapp
profiles:
active: ${APPENV} # APPENVには環境変数として production or development のいずれかが定義されている
cloud:
aws:
parameterstore:
region: ap-northeast-1
application-production.yml
spring:
config:
import: 'aws-parameterstore:/hogehogeapp/'
datasource:
url: jdbc:mysql://db:3306/hogehogeapp
username: ${mysqlusername}
password: ${production.mysqlpassword}
driver-class-name: com.mysql.cj.jdbc.Driver
application-development.yml
spring:
config:
import: 'aws-parameterstore:/hogehogeapp/'
datasource:
url: jdbc:mysql://db:3306/hogehogeapp
username: ${mysqlusername}
password: ${development.mysqlpassword}
driver-class-name: com.mysql.cj.jdbc.Driver
少し詰まったところ
-
import: 'aws-parameterstore:/hogehogeapp/'
について-
import: 'aws-parameterstore:/'
だとパラメータストア全体の値が取れることを期待したが、うまく取れないような動きになった。(当初${hogehogeapp.mysqlusername}という紐づけで試行) - 同じく
import: 'aws-parameterstore:/hogehogeapp/'
についてアポストロフィで囲んでいる点やimport: 'aws-parameterstore:/hogehogeapp'
とパスの最後にスラッシュがないケースなどでもうまく取得出来ないケースあり試行錯誤して最終的には上記のような構成に。
-