Open2

[ASM] Spring Boot のシークレット管理

munno000munno000

背景・目的

Spring boot で dve, staging, prod でアプリ起動に必要なシークレット情報を差し込みたい。

Spring boot アプリ起動プロパティ設定要点

spring.profilesによる外部化の優先順位や挙動はapplication.yamlと同様です。

Spring Bootでは、以下の優先順位でプロパティの値を読み込みます。

  1. 引数で指定された値 (コマンドライン引数やSystem.setProperty()で指定された値)
  2. Systemプロパティから指定された値 (System.getProperties()で取得できる値)
  3. OS環境変数から指定された値
  4. application.propertiesapplication.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)に適宜環境変数エクスポート必要。

参考

https://spring.pleiades.io/spring-boot/appendix/application-properties/