Amazon RDS: OperationalError: (2003, "Can't connect to MySQL server on rds.amazonaws.com (110)")

Amazon RDS: OperationalError: (2003, "Can't connect to MySQL server on rds.amazonaws.com (110)")

我已经设置了一个带有 MySQL 数据库的 Amazon 关系数据库服务 (RDS),我正在尝试将它与我的 Django 应用程序连接,但我收到了上述错误。我在settings.py的数据库设置如下:

DATABASES = {
'default': {
    'ENGINE': config('db_engine'),
    'NAME': config('db_name'),
    'USER': config('db_user'),
    'PASSWORD': config('db_password'),
    'HOST': config('db_host'),
    'PORT': config('db_port')
}

}

和我的数据库环境变量如下:

db_engine=django.db.backends.mysql
db_name=stagingdatabase
db_user=staginguser
db_password=stagingpassword
db_host=somestagingname.somestagingid.us-east-2.rds.amazonaws.com
db_port=3306

我知道端口是正确的,这是大多数出现此类错误的解决方案。所有其他变量也是正确的。

我无法 ping somestagingname.somestagingid.us-east-2.rds.amazonaws.com,即使它的状态可用,所以一定是我设置 RDS 的方式有问题:

这似乎是一个网络问题,Django 服务器无法连接到数据库,这可能发生在多种问题上:

  • 它们位于不同且未连接的 VPN 或网络中。

  • Django 所在的 EC2 机器的安全组 运行 不允许此出站流量到此网络端口组合。

  • RDS 中的安全组不允许来自 EC2 计算机所在网络的 3306 端口的入站流量。

如果您在使用 AWS 帐户提供的默认网络的场景中,则可能会放弃第一个场景。此外,默认情况下,EC2 机器允许所有传出流量。

所以我最好的建议是开始检查控制 RDS 入站流量的安全组。

更多信息:https://docs.aws.amazon.com/en_us/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html