Spring Cloud AWS を使用した Spring Boot アプリケーションがあります。Amazon RDS データベースを使用して Elastic Beanstalk にアプリケーションをデプロイしています。
ドキュメントによると、Elastic Beanstalk は、アプリケーションをデプロイするときに作成する AWS リソースに固定のリソース名を提供します。
つまり、実際のインスタンス ID ( など) で RDS データベースを参照するのではなくaxxt7bi97gbjy4
、Elastic Beanstalk リソース名 を使用できるはずAWSEBRDSDatabase
です。これを行う理由は、Elastic Beanstalk 環境のクローン作成が、正しいデータベースを構成するために手動で介入しなくても実際に機能するようにするためです。
問題:
Elastic Beanstalk 固定リソース名を使用して Spring Boot/Spring Cloud アプリケーションのデータ ソースを設定するとAWSEBRDSDatabase
...
cloud.aws.stack.auto=false
cloud.aws.region.auto=true
cloud.aws.credentials.instanceProfile=true
cloud.aws.rds.AWSEBRDSDatabase.username=user
cloud.aws.rds.AWSEBRDSDatabase.password=password
cloud.aws.rds.AWSEBRDSDatabase.databaseName=ebdb
...次の例外が発生します...
Caused by: java.lang.IllegalStateException: No database instance with id:'AWSEBRDSDatabase' found. Please specify a valid db instance
at org.springframework.cloud.aws.jdbc.rds.AmazonRdsDataSourceFactoryBean.getDbInstance(AmazonRdsDataSourceFactoryBean.java:170) ~[spring-cloud-aws-jdbc-1.0.4.RELEASE.jar!/:1.0.4.RELEASE]
at org.springframework.cloud.aws.jdbc.rds.AmazonRdsDataSourceFactoryBean.createDataSourceInstance(AmazonRdsDataSourceFactoryBean.java:151) ~[spring-cloud-aws-jdbc-1.0.4.RELEASE.jar!/:1.0.4.RELEASE]
at org.springframework.cloud.aws.jdbc.rds.AmazonRdsDataSourceFactoryBean.createInstance(AmazonRdsDataSourceFactoryBean.java:129) ~[spring-cloud-aws-jdbc-1.0.4.RELEASE.jar!/:1.0.4.RELEASE]
at org.springframework.cloud.aws.jdbc.rds.AmazonRdsDataSourceFactoryBean.createInstance(AmazonRdsDataSourceFactoryBean.java:45) ~[spring-cloud-aws-jdbc-1.0.4.RELEASE.jar!/:1.0.4.RELEASE]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134) ~[spring-beans-4.3.4.RELEASE.jar!/:4.3.4.RELEASE]
...
特定の RDS インスタンスへの参照を使用してデータソースを構成すると、次のようになります。
cloud.aws.stack.auto=false
cloud.aws.region.auto=true
cloud.aws.credentials.instanceProfile=true
cloud.aws.rds.axxt7bi97gbjy4.username=user
cloud.aws.rds.axxt7bi97gbjy4.password=password
cloud.aws.rds.axxt7bi97gbjy4.databaseName=ebdb
...すべて順調。
Elastic Beanstalk 固定リソース名が存在するように環境を変更するにはどうすればAWSEBRDSDatabase
よいですか?
アップデート
以下を .ebextensions に追加し、EB CLI を使用して新しい環境を作成しました。変更なし、同じエラー。AWSEBRDSDatabase リソースが利用できません。
Resources:
AWSEBRDSDatabase:
Type: AWS::RDS::DBInstance
Properties:
AllocatedStorage: 5
DBInstanceClass: db.t2.small
DBName: test
Engine: postgres
EngineVersion: 9.3
MasterUsername: test
MasterUserPassword: testtesttest