GITHUB: https://github.com/apascualco/spring-aws-parameter-store-config
Esta vez pongo primero el github, ya que el valor de este post está en la explicación de cómo funciona, más que en la implementación. De esta manera podéis descargaros el código y seguir el post
Si bien hay algunos detalles que vamos a tratar en los siguientes párrafos y explicaciones de como esta montada este sencillo ejemplo.
Tabla de contenidos
EL POM.XML (Dependencias)
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.apascualco</groupId>
<artifactId>spring-aws-parameter-store-config</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Config Client</name>
<description>Spring cloud configuration client</description>
<properties>
<java-version>1.8</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
<jackson-databind.version>2.10.3</jackson-databind.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId>
</dependency>
</dependencies>
</project>
He intentado poner las mínimas dependencias posibles, para poder generar el ejemplo. Aunque parece que el starter de spring cloud no es necesarios, en verdad lo es, ya que es la parte que gestiona el bootstrap.properties.
Hay que ser consciente de la compatibilidad de spring boot con spring cloud. Ha dia de hoy la matriz de compatibilidades es la siguiente:
LAS PROPIEDADES bootstrap.properties
spring.application.name=apascualco
spring.cloud.config.enabled=false
aws.paramstore.enabled=true
Por defecto, cuando spring cloud va a buscar en el parameter store utiliza el path: /config/
Como se ven las propiedades en el parameter store, si vamos al servicio Systems Manager/Parameter Store y le damos a crear parameter, podemos crear una configuración del actuaror, para decirle los endpoints a publicar, de la siguiente manera
Si filtramos, veremos que sale nuestra configuración ya creada:
Como influye nuestra configuración o como debemos configurar para que lea correctamente. El path como ya he dicho, sino lo sobreescribimos en el bootstrap, por defecto es /config, por eso empieza nuestra propiedad por config.
Seguido se aplica la parte de spring.application.name y seguido de ella, despues del guion bajo _ viene el profile activo extra. Por cierto el separador _ también es configurable mediante propiedades. Pero me limito a una configuración super básica, de aquí podéis investigar o preguntarme.
COMO PROBAR EL MVP
Si tenéis acceso a amazon y ya tenéis configurado el parameter store, podéis lanzar la aplicación en vuestro IDE, siempre que tu pc tenga configurado las credenciales y región.
O podéis dockerizas la applicacion con JIB y lanzar el docker pasando las variables de entorno: docker run -it -p8080:8080 -e SPRING_PROFILES_ACTIVE=dev,extra -e AWS_REGION=REGION -e AWS_ACCESS_KEY_ID=KEY_ID -e AWS_SECRET_ACCESS_KEY=ACCESS_KEY apascualco
Obviamente definir vuestras cred.