我在Elastic Beanstalk实例上设置了CodeIgniter PHP应用程序。我尝试将其连接到我设置的RDS MySQL实例,但加载Elastic Beanstalk站点URL总是导致页面超时连接。我已将问题缩小到无法连接到数据库。
我认为我已正确设置我的安全组以允许Elastic Beanstalk EC2实例与RDS通信,但由于页面仍然无法加载,因此必定存在错误。
我在下面列出了RDS和Elastic Beanstalk使用的安全组的入站/出站规则的屏幕截图,以及我附加到Elastic Beanstalk实例的安全组的屏幕截图。
关于为什么我的Elastic Beanstalk应用可以与我的RDS实例通信的任何想法?
编辑:RDS实例和Elastic Beanstalk实例位于同一安全组中。
答案 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_HOSTNAME
,RDS_PORT
,RDS_DB_NAME
,RDS_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数据库>>“摘要” >>信息:
步骤2:验证您的 EC2实例是否能够访问 RDS实例:
登录到您的EC2实例并运行以下任何命令:
telnet <RDS endpoint> <port number>
nc [-vz] <RDS endpoint> <port number>
第3步::验证您是否传递了正确的连接参数:
数据库名称::在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