aws / aws-secretsmanager-jdbc

The AWS Secrets Manager JDBC Library enables Java developers to easily connect to SQL databases using secrets stored in AWS Secrets Manager.
Apache License 2.0
161 stars 77 forks source link

Springboot - Exception encountered during context initialization #220

Closed prafullazee closed 11 months ago

prafullazee commented 11 months ago

Basic configuration, created a secret manager added RDS database details there, in springboot using dependencies

 <dependency>
      <groupId>com.amazonaws.secretsmanager</groupId>
      <artifactId>aws-secretsmanager-jdbc</artifactId>
      <version>2.0.0</version>
</dependency>
<dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <version>8.2.0</version>
      </dependency>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-jdbc</artifactId>
 </dependency>

Steps to reproduce the behavior: Deployed in amazon aws ECS and got below stacktrace `2023-12-07T12:15:08.189Z WARN 1 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed 2023-12-07T12:15:08.477Z INFO 1 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-12-07T12:15:08.510Z ERROR 1 --- [ main] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575) `

If I am trying to access secret manager data through aws cli from the same ECS, I am able to access it with:

aws secretsmanager get-secret-value --secret-id secret-rds-details --region="ap-southeast-1"

With the same database credential, I am able to connect directly with below configuration:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:abcd.rds.amazonaws.com}:3306/database
spring.datasource.username=databaseuser
spring.datasource.password=databasepassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

I replaced this with

spring.datasource.driver-class-name=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver
spring.datasource.url=jdbc-secretsmanager:mysql://${MYSQL_HOST:abcd.rds.amazonaws.com}:3306/database
spring.datasource.username=secret-rds-details
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect

Expected behavior It should be able to connect to RDS.

Environment:

Java version: 20
Springboot: 3.1.2
prafullazee commented 11 months ago

The issue was my ECS was not having access to the secret manager. so this is not a bug.