我对Elastic Beanstalk很陌生,对服务器管理不太熟练,但我需要在连接到外部RDS MySQL数据库的Elastic Beanstalk上设置Django项目。由Elastic Beanstalk创建的连接到外部RDS的EC2权限
我创建了一个单独的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,所以我猜测它被防火墙阻止。
这是我尝试过关于权限:
- 我去RDS仪表板 - >安全组和创建的myapp-mysql的安全组与EC2安全组连接类型指向由弹性使用EC2安全组Beanstalk EC2实例“awseb-e -...”。
- 我去了EC2->安全组和为“awseb-e -...”我设置入站MySQL端口的源0.0.0.0/0
- 我去了VPC仪表板 - >安全组并创建myapp -mysql-security-group,带有源端口为0.0.0.0/0的MySQL端口的入站规则。
然后我尝试重新部署,重新启动服务器甚至重建环境,但没有任何帮助。 MySQL端口3306在由Elastic Beanstalk创建的EC2实例中仍未打开。
我在做什么错或缺少什么?
最初来自Elastic Beanstalk的EC2与RDS不在同一个VPC中。因此,我使用eb create命令中的--vpc switch在与VDS相同的VPC中重新创建了Elastic Beanstalk。为了解决进一步的连接问题,我必须将VPC IP添加到RDS的传入连接。感谢您的广泛解释。我希望它也能帮助其他AWS用户。 –