---
# System prepended metadata

title: Spring-Cloud auto injection AWS SSM parameter store
tags: [JAVA, Spring, AWS]

---

---
title: Spring-Cloud auto injection AWS SSM parameter store
---
###### tags `AWS` `JAVA` `Spring`

# Spring-Cloud auto injection AWS SSM parameter store

2021/06/03

## 1.dependency:
a. spring-boot-starter
b. spring-boot-starter-web
c. spring-cloud-starter-aws-parameter-store-config

## 2.@Values:
EX:
```
@{"$ABC.DEF"}
private String HIJK
```

## 3.SSM set configuration parameters
### Spring-Cloud configuration rule：
#### a. default prefix： 
符合 "/config/application/" 者，所有專案、所有環境都會注入。 EX: 
```
/config/application/ABC.DEF
```

#### b. Specific environment： 
yaml配置profiles，則只會根據指定環境注入SSM parameter 擁有相同前綴的參數。

Profiles:
```
spring:
  profiles.active: dev
```
SSM param:
```
"/config/application_dev/ABC.DEF"
```
#### c. Specific project： 
yaml配置Application Name，會取代原始前綴"application"，則只會根據指定專案注入SSM擁有相同前綴的參數。

Profiles:
```
spring:
  application:
    name: demoProject
```

SSM param:
```
"/config/demoProject/ABC.DEF"
```

#### d. Specific prefix： 
修改"/config"前綴，個人無使用需求，但Spring-Cloud有提供這個功能。


## 4. 專案實作靈活使用
假設情境：
有A、B兩個專案，用共DB，需要同樣的DB資訊，但是有dev、prod兩種環境； 
B專案有dev、prod兩種環境，檔案產出路徑參數不同； 
B專案兩種環都有相同客戶資料參數。

SSM設定如下：

1. 專案共用DB，但區分環境： 
```
/config/application_dev/db.name
/config/application_prod/db.name
```
2. B專案專用，但是區分環境：
```
/config/projactB_dev/filepath
/config/projactB_prod/filepath
```
3. B專案專用，不區分環境：
```
/config/projactB/client.data
```

## 5.踩坑說明

1. Spring dependency相關版本號需要匹配，否則報錯之餘，錯誤訊息是相關檔案找不到，導致非常難以debug。
2. IDEA 切換AWS帳號BUG。
本人在使用 IDEA 2021.1.2 版本時，發現切換AWS帳號，雖然在IDEA AWS toolkit上呈現的AWS帳號資訊是正確的，但是程式實際運作時仍然會攜帶default credential進行運作，debug相當不容易。 要另外透過AWS CDK進行環境驗證才會發現程式運作時並沒有真的切換環境，導致參數取得失敗。 
這問題在2020年IDEA版本上運行都是正常的。


## 6.補充說明

Spring版本2.5.0以上，因Spring預設不啟動Spring-Cloud，因此需再新增dependecy: "spring-cloud-start-bootstrap"

## 7.補充文件
https://docs.awspring.io/spring-cloud-aws/docs/2.3.0/reference/html/index.html#integrating-your-spring-cloud-application-with-the-aws-parameter-store

https://rieckpil.de/resolving-spring-boot-properties-using-the-aws-parameter-store-ssm/

## 8.修改預設ssm prefix
```
spring:
  config:
    import: "aws-parameterstore:/groot/at-ut;/config/application_ut"
    