Elastic Beanstalk应用程序无法连接到RDS MySQL实例

时间:2015-10-18 05:00:18

标签: amazon-ec2 amazon-rds amazon-elastic-beanstalk

我在Elastic Beanstalk实例上设置了CodeIgniter PHP应用程序。我尝试将其连接到我设置的RDS MySQL实例,但加载Elastic Beanstalk站点URL总是导致页面超时连接。我已将问题缩小到无法连接到数据库。

我认为我已正确设置我的安全组以允许Elastic Beanstalk EC2实例与RDS通信,但由于页面仍然无法加载,因此必定存在错误。

我在下面列出了RDS和Elastic Beanstalk使用的安全组的入站/出站规则的屏幕截图,以及我附加到Elastic Beanstalk实例的安全组的屏幕截图。

Inbound rules

Outbound rules

enter image description here

关于为什么我的Elastic Beanstalk应用可以与我的RDS实例通信的任何想法?

编辑:RDS实例和Elastic Beanstalk实例位于同一安全组中。

5 个答案:

答案 0 :(得分:10)

将您设置了Elastic Beanstalk的堆栈安全组名称添加到RDS安全组列表中。

最简单的方法是登录EC2实例(即eb ssh)并测试与数据库的连接以排除应用程序的任何问题。

mysql -u user -p password -h rds.instance.endpoint.region.rds.amazonaws.com

答案 1 :(得分:9)

现在有一个关于如何将ElasticBeanstalk与任何RDS数据库(MySQL等)连接的tutorial,其方式是不将两者绑定在一起,即您可以单独创建它们。本教程将介绍如何通过AWS控制台设置安全组。

之后,您必须设置5个ElasticBeanstalk环境变量(至少对于MySQL):RDS_HOSTNAMERDS_PORTRDS_DB_NAMERDS_USERNAME& RDS_PASSWORD

不同的ElasticBeanstalk实例将以不同的方式访问这些变量以建立数据库连接(我知道在PHP中,您必须使用$_SERVER['RDS_DB_NAME']等)。请参阅上面的链接,了解如何在Java,Node.js,Python,Ruby和.NET中执行此操作。

答案 2 :(得分:8)

您是否也将RDS实例启动到VPC中?

您的RDS安全组需要将端口3306上的传入流量授予beanstalk安全组。

例如RDS安全组

Incoming
ALLOW TCP 3306 from BeanstalkSG

请勿打开0.0.0.0

由于您已允许所有流量传输,因此您的Beanstalk SG不必另外为传出流量授予3306。

您的VPC ACL是否允许3306上的流量? (默认情况下,他们这样做)

答案 3 :(得分:2)

新用户通常会误以为RDS 实例名称数据库名称

实例名称只是您和其他人用来组织RDS项目的标签。此标签根本不会在您的应用程序上使用。

另一方面,数据库名称是您在应用程序上需要的。

创建RDS实例/群集后,请注意您的服务器为EMPTY。 其中没有数据库。

RDS实例或群集中可以有许多数据库,就像MySQL服务器中可以有许多数据库一样。并且默认情况下您没有任何人

在应用程序上使用RDS之前,您需要在MySQL命令行上运行“ CREATE DATABASE ”命令。

为了公平起见,新创建的RDS实例上只有一个数据库。它称为“ mysql ”,但不允许在应用程序上使用它。

创建数据库以在您的应用上使用的唯一方法是通过EC2实例,因为RDS实例不可公开访问。

简单步骤

1。。创建一个Nano实例(在同一VPC /安全组上);

2。。通过SSH(例如ssh -i <my_key.pem> my_nano.amazonaws.com)连接到nano实例;

3。 mysql -u <master_user> -p -h <rds_endpoint>

4。。master_user和master_password是您在创建RDS集群时设置的密码-这些凭据没有默认设置;

5。。在mysql上后,创建一个数据库:CREATE database <my_db>;

6。。然后,在您的应用上,使用: master_user,master_password,my_db,rds_endpoint

答案 4 :(得分:1)

步骤1:验证RDS数据库实例处于“可用”状态

在AWS控制台上访问RDS数据库>>“摘要” >>信息:

enter image description here

步骤2:验证您的 EC2实例是否能够访问 RDS实例

  • 登录到您的EC2实例并运行以下任何命令:

    • telnet <RDS endpoint> <port number>
    • nc [-vz] <RDS endpoint> <port number>

      • 如果 telnet nc 命令成功,则表明网络连接已建立,并且该问题很可能是由对数据库(例如user)的用户身份验证引起的名称和密码。
      • 如果以上命令均未成功执行,请确保将RDS实例的入站规则配置为允许来自EC2实例的安全组的连接

第3步::验证您是否传递了正确的连接参数:

  • 数据库服务器主机:在AWS控制台上访问RDS数据库>>“连接性和安全性” >>端点
  • 数据库端口:访问AWS控制台上的RDS数据库>>“连接性和安全性” >>端口
  • 数据库用户名:访问AWS控制台上的RDS数据库>>“配置” >>“主用户名”
  • 数据库密码:,就像您在创建RDS实例时所提到的
  • 数据库名称::在AWS控制台上访问RDS数据库>>“配置” >>“数据库名称”

    mysql -u user -p password -h <RDS endpoint>

步骤4:验证您的连接字符串网址格式正确:

要从Spring应用程序连接到Mysql RDS实例,URL格式为:

spring.datasource.url=jdbc:mysql://<RDS endpoint>:3306/ebdb?createDatabaseIfNotExist=true