设置NAT实例后无法本地连接到RDS Postgres

时间:2018-10-18 22:02:16

标签: django postgresql amazon-rds amazon-vpc python-zappa

我正在研究一个使用Zappa在Lambda上托管无服务器应用程序的Django项目。它在背面使用了Postgres数据库,一段时间以来,我一直可以完美使用它。最近,我需要使用urllib,因此我需要一个NAT实例(EC2微型实例)以允许Lambda访问Internet。

现在,它已经设置好,可以在生产环境中正常工作了,我可以看到我的网站正常运行,并且所有部件都可以正确交互。但是,在本地,Django似乎无法连接,它会收到以下错误:

  

django.db.utils.OperationalError:无法连接到服务器:连接超时(0x0000274C / 10060)
     服务器是否在主机“ XXXXXXXXX.XXXXXXXXX.us-west-2.rds.amazonaws.com”(54.70.245.158)上运行并接受       端口5432上的TCP / IP连接?

为概述我经过的步骤,我通过向导创建了一个具有私有和公共子网的VPC网络。为了增加可用性,我在其他区域中添加了另外2个私有子网。我使用Lambda函数,将子网更改为新的子网,还将RDS移到了相同的子网(私有子网)中。对于我的RDS,我为Postgres创建了一个新的安全组(端口5432入站,源为0.0.0.0/0)。

我在Django下的settings.py保持不变:

DATABASES = {
    # AMAZON RDS Instance
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'XXXXXXXXX',
        'USER': 'XXXXXXXXX',
        'PASSWORD': 'XXXXXXXXX',
        'HOST': 'XXXXXXXXXX.XXXXXXXXXX.us-west-2.rds.amazonaws.com',
        'PORT': '5432',
    }
}

我不确定从这里去哪里。老实说,这超出了我的舒适范围,我不知道自己在做什么。我怀疑安全组需要做些事情,但是我不知所措,非常感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

经过一番摆弄,我意识到自己已经使事情变得复杂了。 RDS应该保留在启动时所在的子网中,无需将其移到与NAT实例相同的子网中。将其移回原始子网后,它在本地和生产环境中都可以正常运行。