エキサイト株式会社メディア事業部エンジニアの佐々木です。タイトルがわかりにくいですが、SpringBootのローカル開発環境でもAWS PamareterStoreにある値を使用したいのでご紹介します。通常はAWS ParameterStoreのパッケージを入れるだけで、すぐできるのですが弊事業部はAWS SSOを全面的に採用しています。($HOME/.aws配下に設定を書かないです)このAWS SSOの場合の設定が割となかったので書きます。
前提
$ java --version openjdk 21.0.3 2024-04-16 LTS OpenJDK Runtime Environment Corretto-21.0.3.9.1 (build 21.0.3+9-LTS) OpenJDK 64-Bit Server VM Corretto-21.0.3.9.1 (build 21.0.3+9-LTS, mixed mode, sharing) $ ./gradlew --version ------------------------------------------------------------ Gradle 8.5 ------------------------------------------------------------ Build time: 2023-11-29 14:08:57 UTC Revision: 28aca86a7180baa17117e0e5ba01d8ea9feca598 Kotlin: 1.9.20 Groovy: 3.0.17 Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023 JVM: 21.0.3 (Amazon.com Inc. 21.0.3+9-LTS) OS: Mac OS X 14.4.1 aarch64 $./gradlew bootRun . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.5)
AWSの設定
AWS ParameterStore
を下記のような設定にします。
key: /config/sample/techblog.demo value: デモです
依存関係の設定
build.gradle
に下記を書きます。
dependencies { .... implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.1.0") implementation platform("software.amazon.awssdk:bom:2.26.7") developmentOnly "software.amazon.awssdk:sso" developmentOnly "software.amazon.awssdk:ssooidc" implementation "io.awspring.cloud:spring-cloud-aws-starter-parameter-store" .... }
記述量が多いですが、spring-cloud-aws-dependencies
はAWSがSpringBoot用に提供してくれているライブラリを統合管理してくれています。あとは必要なものだけ追加するような感じです。AWS SSO を使用している場合に必要なのは、下記の2つです。
developmentOnly "software.amazon.awssdk:sso" developmentOnly "software.amazon.awssdk:ssooidc"
Application.ymlの設定
application.yml
の設定にて、ParameterStoreの読み込み指定を行います。
spring: config: import: aws-parameterstore:/config/sample
aws-parameterstore
という接頭辞で起動時にParamterStoreからパラメータを読み出してくれます。
コード例
application.ymlの設定で、SpringBootの起動時にParameterStoreからの読み込みはできるようになりました。これを下記のようなコードでJavaConfigにマッピングを行います。
@ConfigurationProperties("config.sample") public record S3ConfigProperties(TechBlog techblog) { record TechBlog(String demo) {} }
最近は、record
の対応が進んで、application.yml
からのプロパティの読み込みもイミュータブルで読み込めるようになりました。
起動します
SpringBootを起動する前に、aws sso login
コマンドを実行してログインする必要があります。
aws sso login --profile ${sample-app}
これでログインしたあとにSpringBootを起動するとデータが取得できています。
ログインしない場合
aws sso login
でログインせずにSprginBootを実行すると下記のようなエラーがでます。
Config data resource '[ParameterStoreConfigDataResource@77795936 context = '/config/sample', optional = false]' via location 'aws-parameterstore:/config/sample' does not exist
まとめ
セキュリティの重要性が高まっている昨今、ローカルでもAWSパラメータストアが使いたいケースはあるかと思います。この設定をしておくと、AWSの他のサービスへの接続もライブラリが提供されている範囲内でローカル環境から接続できるので便利です。ぜひ使ってみてください。
さいごに
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com