Amazon RDS 和 Elastic Beanstalk 连接

Posted

技术标签:

【中文标题】Amazon RDS 和 Elastic Beanstalk 连接【英文标题】:Amazon RDS and Elastic Beanstalk connectivity 【发布时间】:2011-09-06 00:02:23 【问题描述】:

已经有几个线程讨论了这个问题,我已经尝试过实施中讨论的建议 Elastic Beanstalk -> RDS connection error using Grails.

我还在我的 EC2 实例中打开了端口以接受来自“全部”的 ICMP、TCP 和 UDP 连接。

我已确保我的 RDS 和 EC2 实例位于同一地区(东部)

我还在RDS默认安全组中添加了“elasticbeanstalk-default”安全组

我已经在 RDS CIDR 设置中添加了我本地机器的 IP 地址,并且我可以从我的机器通过 SQLYog 连接到 RDS。

但是当我尝试从 Elastic Beanstalk 连接我的 RDS 实例时,我收到以下异常

Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at java.net.Socket.<init>(Socket.java:392)
at java.net.Socket.<init>(Socket.java:235)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
... 18 more

Jun 1, 2011 5:12:41 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error listenerStart
Jun 1, 2011 5:12:41 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [] startup failed due to previous errors
Jun 1, 2011 5:12:41 AM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class         org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name.....
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)

我的DataSource.groovy参数如下。

production 
    dataSource 
        pooled = true
        dbCreate = "update" // one of 'create', 'create-drop','update'
        url = "jdbc:mysql://[MyEndPoint]:3306/*****"
        username = "*****"
        password = "*****"
        dialect = org.hibernate.dialect.MySQL5InnoDBDialect
        properties 
            validationQuery = "SELECT 1"
            testOnBorrow = true
            testOnReturn = true
            testWhileIdle = true
            timeBetweenEvictionRunsMillis = 1000 * 60 * 30
            numTestsPerEvictionRun = 3
            minEvictableIdleTimeMillis = 1000 * 60 * 30
        
    

【问题讨论】:

这是一个非常困难的问题还是答案如此简单以至于不值得回答?:( 【参考方案1】:

我解决了,不过答案很愚蠢。

我一直觉得(认为)在为 NetBeans 中的 Grails 项目构建新的 WAR 文件时,它是在“生产”环境中创建的,但事实并非如此。我必须转到项目属性并将“活动 grails 环境”设置更改为“生产”并修复它。

简而言之,Amazon Web Services Elastic Beanstalk 试图连接到我的开发环境数据库“localhost”。

【讨论】:

默认情况下,Grails 在运行war 脚本时使用生产环境,所以这是一个合理的假设。 但是这个问题发生在我身上的次数比以往任何时候都多,现在我正在编写并在我的项目文件夹中保存一个批处理文件,我用它来创建产品构建 您可能需要考虑设置 Jenkins 以直接从源代码控制自动构建您的战争,因此您不必维护脚本。

以上是关于Amazon RDS 和 Elastic Beanstalk 连接的主要内容,如果未能解决你的问题,请参考以下文章

Django 迁移:sqlite3 开发数据库、Amazon Elastic Beanstalk 和 Amazon RDS postgresql 实时数据库

Amazon Elastic Beanstalk:多个应用程序可以共享一个 Amazon RDS 数据库实例吗?

将现有 RDS 连接到 Elastic Beanstalk

Elastic Beanstalk 未创建 RDS 参数

使用 RDS 实例快照创建 Elastic Beanstalk 环境

Elastic Beanstalk 是不是支持 Amazon 的 Aurora DB?