es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring Boot y AWS Secret Manager – cómo marcar con características el listener para configurar las contraseñas solo en entorno de producción pero no en el entorno de pruebas.

Necesito integrar mi aplicación de Spring Boot con el administrador de secretos de AWS para recuperar las credenciales de la base de datos desde allí. Debe funcionar solo en el entorno de producción.
Esto es lo que he hecho hasta ahora:

xml
<dependency>
<groupid>com.amazonaws</groupid>
<artifactid>aws-java-sdk-secretsmanager</artifactid>
<version>1.12.131</version>
</dependency>

SpringApplication application = new SpringApplication(MyApplication.class);
    application.addListeners(new DatabasePropertiesListener());
    application.run(args);

Y mi listener implementa la interfaz ApplicationListener<applicationpreparedevent>.

¿Existe alguna forma de ejecutar mi método dentro de ese listener solo en un entorno específico (algo así como una bandera de función)? Debo decir que es demasiado temprano para usar variables de archivos de propiedades.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de ejecutar tu método dentro del listener solo en un entorno específico utilizando una bandera de características (feature flag). Un enfoque que puedes tomar es usar perfiles de Spring, donde puedes definir perfiles para diferentes entornos como prod, dev, test, etc. Por ejemplo, en tu archivo application.yaml o application.properties, puedes definir el perfil activo para el entorno prod de esta manera:

    spring.profiles.active=prod
    

    Luego, en tu listener, puedes verificar si el perfil activo es prod y ejecutar tu método en consecuencia. Aquí tienes un ejemplo:

    @Component
    public class DatabasePropertiesListener implements ApplicationListener<ApplicationPreparedEvent> {
    
        @Autowired
        private AWSSecretsManagerClient secretsManagerClient;
    
        @Override
        public void onApplicationEvent(ApplicationPreparedEvent event) {
            // Verificar si el perfil activo es prod
            Environment environment = event.getApplicationContext().getEnvironment();
            if (environment.getActiveProfiles()[0].equals("prod")) {
                // Ejecutar tu método para obtener las credenciales de la base de datos desde AWS Secret Manager
                String dbName = secretsManagerClient.getSecretValue("db-name");
                String dbUser = secretsManagerClient.getSecretValue("db-user");
                String dbPassword = secretsManagerClient.getSecretValue("db-password");
                // Hacer algo con las credenciales de la base de datos...
            }
        }
    }
    

    Ten en cuenta que debes definir el AWSSecretsManagerClient como un bean e inyectarlo en tu listener para que funcione. Además, asegúrate de establecer el perfil activo correctamente para tu entorno prod. También puedes usar este enfoque para definir diferentes propiedades o configuraciones para diferentes entornos.

Comments are closed.