--- 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"