Elastic Beanstalk连接到外部RDS创建的EC2权限

Aid*_*tis 8 permissions amazon-web-services amazon-rds amazon-elastic-beanstalk

我对Elastic Beanstalk很新,并且不太熟悉服务器管理,但我需要在Elastic Beanstalk上设置一个连接到外部RDS MySQL数据库的Django项目.

我创建了一个单独的RDS MySQL数据库,我可以在我的计算机上使用Sequel Pro连接到它,没有任何问题.然后我有我的Django项目,我试图把它放到Elastic Beanstalk,但遗憾的是没有运气.如果我从我的计算机运行本地Django服务器,该项目是可浏览的,并且可以访问Amazon RDS MySQL.但是,当我跑

eb deploy
Run Code Online (Sandbox Code Playgroud)

我明白了

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server
on 'myapp-staging.xxx.eu-west-1.rds.amazonaws.com' (110)")
(ElasticBeanstalk::ExternalInvocationError)
Run Code Online (Sandbox Code Playgroud)

如果我通过SSH登录EC2服务器

eb ssh
Run Code Online (Sandbox Code Playgroud)

然后检查打开的端口

netstat -lntu
Run Code Online (Sandbox Code Playgroud)

我没有看到MySQL的端口3306,所以我猜它被防火墙阻止了.

这是我尝试的权限:

  1. 我去了RDS仪表板 - >安全组并创建了myapp-mysql-security-group,EC2安全组连接类型指向Elastic Beanstalk EC2实例"awseb-e -..."使用的EC2安全组.
  2. 我去了EC2 - >安全组和"awseb-e -..."我设置了入口MySQL端口,源为0.0.0.0.0
  3. 我去了VPC Dashboard - > Security Groups并使用源端口0.0.0.0/0创建了带有MySQL端口入站规则的myapp-mysql-security-group.

然后我尝试重新部署,重启服务器甚至重建环境,但没有任何帮助.MySQL端口3306在Elastic Beanstalk创建的EC2实例中仍未打开.

我做错了什么或者缺少什么?

Edw*_*uel 7

MySQL端口3306仅在RDS实例(不在您的EC2实例中)打开.因此,如果您检查您的EC2实例,它不应该侦听端口3306.

你可以做的事情来检查RDS工作:

  • 检查您的EC2实例与RDS的连接.
    • SSH到您的实例(eb ssh)并运行telnet myapp-staging.xxx.eu-west-1.rds.amazonaws.com 3306.您可能需要先安装telnet(yum install telnet).
    • 如果成功,请检查您的应用.
    • 如果失败,请检查下一点.
  • 确保您的RDS和EC2放置正确:
    • 仅限私人访问 RDS:
      • 确保它们位于相同的VPC中并允许RDS中的传入连接从VPC的IP到3306.为了获得更好的性能,请使用IP地址而不是安全组名称.
      • 如果它们位于不同的VPC上,则可以创建VPC对等.
    • 对于公共访问RDS:
      • 与上面相同,允许来自VPC IP的传入连接.
  • 确保允许EC2实例与EC2安全组中的端口3306建立传出连接.
  • 确保您的EC2主机没有拒绝3306规则iptables.
  • 如果您的EC2和RDS位于不同的VPC中并且您为EC2使用专用IP,请检查NAT服务器.确保允许端口3306被代理.