1

RDS를 사용하여 Java 8 Elastic Beanstalk 인스턴스를 만든 후에는 RDS 연결 세부 정보가 환경 변수로 표시되지 않습니다 (실행중인 다른 인스턴스에서 볼 수 있음).RDS 환경 변수를 AWS의 Elastic Beanstalk 인스턴스에서 사용할 수 없습니까?

printenv 명령을 실행 한 후 이러한 값을 사용할 수 있지만 기대치는 아닙니다.

RDS_HOSTNAME = foo.com

RDS_USERNAME = foo는

이들은 그들이 응용 프로그램 발사하는 동안 서버 설정

database: 
    driverClass: com.mysql.jdbc.Driver 
    user: ${RDS_USERNAME} 
    password: ${RDS_PASSWORD} 
    url: jdbc:mysql://${RDS_HOSTNAME}/${RDS_DB_NAME} 

에 필요한

RDS_PASS = 바 사용할 수없는 경우 로그에 Java 예외가 표시됩니다. annot은 환경 변수를 찾습니다.

io.dropwizard.configuration.UndefinedEnvironmentVariableException : 'RDS_USERNAME'환경 변수가 정의되지 않았습니다. 표현식 '$ {RDS_USERNAME}'을 (를) 대체 할 수 없습니다. org.apache.commons.lang3.text.StrSubstitutor.resolveVariable에서 io.dropwizard.configuration.EnvironmentVariableLookup.lookup (EnvironmentVariableLookup.java:41) (StrSubstitutor.java:934) org.apache.commons.lang3에서 에서 . text.StrSubstitutor.substitute (StrSubstitutor.java:855) at org.apache.commons.lang3.text.StrSubstitutor.substitute (StrSubstitutor.java:743) at org.apache.commons.lang3.text.StrSubstitutor.replace (io.dropwizard.configuration.BaseConfigurationFactory.build (BaseConfigurationFactory.java:83) io.dropwizard.cli에서 에서 io.dropwizard.configuration.SubstitutingSourceProvider.open (SubstitutingSourceProvider.java:39) 에서 StrSubstitutor.java:403) . ConfiguredCommand.parseConfiguration (ConfiguredCommand.java:124)io.dropwizard.cli.ConfiguredCommand.run (ConfiguredCommand.java:72)에서io.dropwizard.cli.Cli.run (Cli.java:75)에서 at io.dropwizard.Application.run (Application.java : 93)

내가 EC2 인스턴스에서 다음 명령을 실행 그러나 경우

sudo /opt/elasticbeanstalk/bin/get-config environment 

은 JSON의 값을 출력합니다 다음에 대한 이러한 값을 복원하는 방법

{"CONFIG":"dev.yml","RDS_HOSTNAME":"foo.com","RDS_PASSWORD":"foo","M2":"/usr/local/apache-maven/bin","M2_HOME":"/usr/local/apache-maven","RDS_DB_NAME":"foo","JAVA_HOME":"/usr/lib/jvm/java","RDS_USERNAME":"foo","GRADLE_HOME":"/usr/local/gradle","RDS_PORT":"3306"} 

어떤 아이디어 ec2 -사용자?

나는 시도했다 :

  • 인스턴스
  • cat를 재 구축 EB 인스턴스
  • 를 다시 시작 그들이 왜 eb deploy

어떤 아이디어 후에을 설정하는 스크립트에 값 이 특정 인스턴스에서 보이지 않습니까?

인스턴스

Environment details foo: foo-service 
    Application name: foo-service 
    Region: eu-west-2 
    Platform: arn:aws:elasticbeanstalk:eu-west-2::platform/Java 8 running on 64bit Amazon Linux/2.6.0 
    Tier: WebServer-Standard 
+0

당신은/etc/환경에서 초기화를 시도 할 수 있습니다? 환경 변수가 있는지 반드시 확인하고 거기에 추가하십시오. 모든 사용자 쉘은 그 변수를 그런 식으로 설정합니다. –

답변

0

당신은/etc/환경에서 초기화를 시도 할 수 있습니다 자세한 사항? 환경 변수가 있는지 반드시 확인하고 거기에 추가하십시오. 모든 사용자 쉘은 그 변수를 그런 식으로 설정합니다.

1

EB 환경 업데이트를 실행하고 인스턴스를 교체합니다. 아니면

환경 업데이트가 완료 "Storing the Connection String in Amazon S3"로 이동할 수 있으며, DB 인스턴스의 호스트 이름 및 기타 연결 정보는 다음 환경 속성을 통해 응용 프로그램 에 사용할 수 있습니다

RDS_HOSTNAME -의 호스트 이름 DB 인스턴스. Amazon RDS 콘솔 레이블 - 끝점 (호스트 이름)

RDS_PORT - DB 인스턴스가 연결을 허용하는 포트입니다. 기본값은 DB 엔진마다 다릅니다. Amazon RDS 콘솔 레이블 - 포트

RDS_DB_NAME - 데이터베이스 이름, ebdb. Amazon RDS 콘솔 레이블 - DB 이름

RDS_USERNAME - 데이터베이스에 대해 구성한 사용자 이름입니다. Amazon RDS 콘솔 레이블 - 사용자 이름

RDS_PASSWORD - 데이터베이스에 대해 구성한 암호입니다.

private static Connection getRemoteConnection() { 
    if (System.getenv("RDS_HOSTNAME") != null) { 
     try { 
     Class.forName("org.postgresql.Driver"); 
     String dbName = System.getenv("RDS_DB_NAME"); 
     String userName = System.getenv("RDS_USERNAME"); 
     String password = System.getenv("RDS_PASSWORD"); 
     String hostname = System.getenv("RDS_HOSTNAME"); 
     String port = System.getenv("RDS_PORT"); 
     String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password; 
     logger.trace("Getting remote connection with connection string from environment variables."); 
     Connection con = DriverManager.getConnection(jdbcUrl); 
     logger.info("Remote connection successful."); 
     return con; 
    } 
    catch (ClassNotFoundException e) { logger.warn(e.toString());} 
    catch (SQLException e) { logger.warn(e.toString());} 
    } 
    return null; 
    } 

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-rds.html#java-rds-javase