【问题标题】:EC2 connection to RDS using Play framework使用 Play 框架的 EC2 连接到 RDS
【发布时间】:2011-04-05 02:58:16
【问题描述】:

我有一个使用 Play 框架构建的小型站点,我试图在 EC2 服务器上针对 Amazon RDS 实例运行该站点。我可以在我的机器上针对 RDS 实例运行该应用程序,并且一切正常。但是当我将它部署到我的 EC2 服务器时,它会收到此错误:

从服务器成功接收到的最后一个数据包是 1,282,977,731,085 毫秒前。最后一个成功发送到服务器的数据包是 0 毫秒前。 在 play.db.DBPlugin.onApplicationStart(DBPlugin.java:87) 在 play.Play.start(Play.java:381) 在 play.Play.init(Play.java:247) 在 play.server.Server.main(Server.java:85) 引起:java.net.ConnectException:连接被拒绝

我的第一个想法是它是某种安全设置,但我有一个基于 Spring 的应用程序在同一 EC2 服务器上的 Tomcat 中运行,该应用程序使用相同的用户名和密码连接到同一个 RDS 实例,它工作得很好。只有 Play 应用存在连接问题。

我似乎无法解释为什么会发生这种情况,或者关于如何解决它的想法。

有人见过这样的事情吗?

【问题讨论】:

  • 我将“java”添加到您的标签列表中,以防这是一个特定于 java 的问题。

标签: java amazon-ec2 playframework amazon-rds


【解决方案1】:

问题出在 application.conf 文件上。如果您像这样指定本地数据库:

db=mysql:root:pass@db

你的产品数据库是这样的:

%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db
%prod.db.user=db_user
%prod.db.pass=db_pass

尝试在生产环境中运行时会出现此错误,因为 Play!实际上是在尝试使用 db=mysql:root:pass@db 参数进行连接,因为 prod 参数不会专门覆盖该参数。要解决此问题,请务必在本地和产品中以相同的方式连接到数据库。这对我有用:

db.url=jdbc:mysql://localhost:3306/db
db.user=root
db.pass=pass

%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db
%prod.db.user=db_user
%prod.db.pass=db_pass

【讨论】:

    【解决方案2】:

    我在这里问过同样的问题

    Amazon RDS and Elastic Beanstalk connectivity

    您的问题很可能会在您解决后得到解决 在RDS默认安全组中添加“elasticbeanstalk-default”安全组

    【讨论】:

      【解决方案3】:

      您的错误可能是由多种原因引起的,并且似乎发生在比您所看到的更低级别的协议堆栈上。我建议在发送服务器上运行一个数据包分析器(例如wireshark)来尝试找出发生了什么。也许数据包没有到达那里?也许您的客户因为所处的环境不同而感到困惑?数据包嗅探器对于解开断开连接的奥秘非常有用。

      如果您的服务器是无头服务器,或者您无法转发图形会话,您始终可以使用命令行工具,例如 *nix 系统上的 tcpdump。

      【讨论】:

        【解决方案4】:

        我对这两个框架(或一般的 Java)一无所知,但我对这两种亚马逊服务都有一些经验——这些框架是否有可能使用不同的协议或在不同的端口进行通信?如果是这样,它仍然可能是一个安全问题。

        如果可能,请转到 EC2 > 安全组,如果您没有这三行,请尝试添加它们:

        All | icmp | -1 |    -1 | default group
        All | tcp  |  0 | 65535 | default group
        All | udp  |  0 | 65535 | default group
        

        (“默认组”是默认名称,我称之为我的,但您的组名可能不同——无论如何请确保它们是组名而不是“0.0.0.0/0”)

        另外,如果您知道需要打开的特定协议/端口,那么显然也要添加它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-23
          • 2012-05-31
          • 2021-07-29
          • 2020-08-07
          • 1970-01-01
          • 2021-11-17
          • 2018-03-15
          • 2015-01-29
          相关资源
          最近更新 更多