0

在这个问题上,我与用户处于类似的状态;将弹性 beanstalk 环境与现有 RDS 实例连接

我有一个 Codestar 项目(通过 Beanstalk 进行 Django),我无法让应用程序访问任何 rds 实例。在测试步骤 () 期间尝试部署时,python manage.py test会抛出以下错误消息;

django.db.utils.OperationalError: could not connect to server: Connection timed out
    Is the server running on host "172.31.44.126" and accepting
    TCP/IP connections on port 5432?

我已经尝试过的事情

  • 在本地运行

通过 django 和 psql 工作正常

  • 使用 ipaddress 和公共主机名 (name.key.eu-west-2.rds.amazonaws.com)

两者都可以在本地正常工作并在部署时提供相同的错误消息

  • 通过 EC2 实例连接 rds

这可以通过本地 ip 和名称正常连接。\d 和 \l 等查询返回很好,表明实例可以看到数据库。

  • 更改 vpc / 子网

EC2 和 rds 实例都在同一个 vpc(只有一个)和子网(eu-west,可用性组 2a)中

  • 启动附加的 beanstalk rds 实例

我已经使用 EBS 工具尝试了专用 rds 实例和连接实例,但应用程序无法连接到其中任何一个。

设置.py

if 'RDS_DB_NAME' in os.environ:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': os.environ['RDS_DB_NAME'],
            'USER': os.environ['RDS_USERNAME'],
            'PASSWORD': os.environ['RDS_PASSWORD'],
            'HOST': os.environ['RDS_HOSTNAME'],
            'PORT': os.environ['RDS_PORT'],
        }
    }
else:
    DATABASES = {
        'default':
        {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'postgres',
            'USER': 'db_user',
            'PASSWORD': 'db_pwd',
            'HOST': 'db_host',
            'PORT': '5432',
        }
}
4

1 回答 1

0

您的问题似乎是入站规则。您需要为安全组设置入站规则以连接到数据库。您可以为您的开发环境设置一个入站规则,为 Elastic Beanstalk 设置另一个。有关设置安全组入站规则的信息,请参阅使用安全组控制访问

于 2021-08-10T13:15:57.653 回答