AWS Parameter Store trong SpringBoot
NỘI DUNG BÀI VIẾT
AWS Systems Manager Parameter Store là một dịch vụ của AWS, giúp quản lý cấu hình cho các ứng dụng một cách an toàn, bảo mật. Bạn có thể lưu trữ những dạng data như password, thông tin database, license codes,… một cách tập trung nhất cho tất cả các môi trường (dev, testing, staging, production)
Một ứng dụng Spring luôn luôn cần config và thường thì sẽ đặt các giá trị cần config đó tại file properties, sử dụng biến môi trường để đưa giá trị vào từ bên ngoài (dùng .env file)
Setup AWS parameter store trong Spring Boot
Đây là file pom.xml mẫu. Đang sử dụng spring boot 2.3.4, spring cloud Hoxton.SR8
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.ngockhuong</groupId> <artifactId>spring-boot-aws-ssm-parameter-resolving</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-aws-ssm-parameter-resolving</name> <description>Resolving SSM parameters for a Spring Boot application</description> <properties> <java.version>11</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-aws</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId> </dependency> <!-- Test Dependencies --> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Mấu chốt là đoạn này nè:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-aws</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId> </dependency>
và này:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
(AWS hoạt động trên Spring Cloud)
Config credentials để ứng dụng truy cập được AWS Parameter Store
Có nhiều cách để config credentials đảm bảo cho ứng dụng Spring Boot có thể access được vào AWS.
- Sử dụng biến môi trường (AWS_ACCESS_KEY_ID và AWS_SECRET_ACCESS_KEY hoặc AWS_ACCESS_KEY và AWS_SECRET_KEY)
- Java System Properties (aws.accessKeyId and aws.secretKey)
- Credentials profile (Mặc định cấu hình được lưu trữ tại file ~/.aws/credentials)
- Credentials thông qua Amazon EC2 container service
- Thông qua Amazon EC2 metadata service
Config các giá trị tại properties file
cloud: aws: region: static: ${aws_region:ap-northeast-1} stack: auto: false
/config/<name-of-the-spring-application>_<profile>/<parameter-name>
Thay đổi các thiết lập AWS mặc định trong Spring Boot
aws: paramstore: enabled: ${aws_paramstore_enabled:true} name: app_name prefix: /config profile-separator: '_'
/config/<paramstore-name>_<profile>/<parameter-name>
Kết luận
Trên đây mình chỉ giới thiệu những thiết lập chính để Spring Boot có thể get được data từ AWS Store cũng như cách đặt tên aws parameter sao cho map với file properties của Spring Boot.
Để lại một bình luận