我对Elastic Beanstalk很新,并且不太熟悉服务器管理,但是我需要在连接到外部RDS MySQL数据库的Elastic Beanstalk上设置一个Django项目。
我创建了一个单独的RDS MySQL数据库,我可以在我的计算机上使用Sequel Pro连接到它,没有任何问题。然后我有我的Django项目,我试图把它放到Elastic Beanstalk,但遗憾的是没有运气。如果我从我的计算机运行本地Django服务器,该项目是可浏览的,并且可以访问Amazon RDS MySQL。但是,当我跑
时eb deploy
我得到了
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server
on 'myapp-staging.xxx.eu-west-1.rds.amazonaws.com' (110)")
(ElasticBeanstalk::ExternalInvocationError)
如果我通过SSH登录EC2服务器
eb ssh
然后用
检查打开的端口netstat -lntu
我没有看到MySQL的端口3306,所以我猜它被防火墙阻止了。
这是我尝试过的权限:
然后我尝试重新部署,重启服务器甚至重建环境,但没有任何帮助。在Elastic Beanstalk创建的EC2实例中,MySQL端口3306仍未打开。
我做错了什么或缺少什么?
答案 0 :(得分:7)
MySQL端口3306仅在RDS实例(不在您的EC2实例中)打开。因此,如果您检查您的EC2实例,它不应该侦听端口3306。
您可以采取的措施来检查RDS是否有效:
eb ssh
)并运行telnet myapp-staging.xxx.eu-west-1.rds.amazonaws.com 3306
。您可能需要先安装telnet
(yum install telnet
)。iptables
中没有拒绝3306规则。