Open2
[ASM] Spring Boot のシークレット管理
背景・目的
Spring boot で dve, staging, prod でアプリ起動に必要なシークレット情報を差し込みたい。
Spring boot アプリ起動プロパティ設定要点
spring.profiles
による外部化の優先順位や挙動はapplication.yaml
と同様です。
Spring Bootでは、以下の優先順位でプロパティの値を読み込みます。
- 引数で指定された値 (コマンドライン引数や
System.setProperty()
で指定された値) - Systemプロパティから指定された値 (
System.getProperties()
で取得できる値) - OS環境変数から指定された値
-
application.properties
やapplication.yaml
のファイル内の値
この優先順位は、プロファイル(spring.profiles
)の値に関係なく適用されます。
つまり、特定のプロファイル用の設定を外部から上書きすることも可能です。例えば、以下のようにコマンドライン引数で上書きできます。
application.yaml
ファイル内:
spring:
profiles: prod
server:
port: 8080
---
spring:
profiles: prod
server:
port: 8081
コマンドラインで実行:
java -jar app.jar --server.port=9090 --spring.profiles.active=prod
この場合、prod
プロファイルのserver.port
は9090になります。
このように、application.yaml
内の設定に関係なく、外部から上書きすることが可能です。開発環境と本番環境で設定を使い分けたり、一時的にパラメータを変更したりするために便利な機能です。
実行ツール・サービス(terminal / IntelliJ boot config / ASM+ECS taskdefinition)に適宜環境変数エクスポート必要。
参考
ASM 機能紹介