我正在研究一个使用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',
}
}
我不确定从这里去哪里。老实说,这超出了我的舒适范围,我不知道自己在做什么。我怀疑安全组需要做些事情,但是我不知所措,非常感谢您的帮助。谢谢!
答案 0 :(得分:0)
经过一番摆弄,我意识到自己已经使事情变得复杂了。 RDS应该保留在启动时所在的子网中,无需将其移到与NAT实例相同的子网中。将其移回原始子网后,它在本地和生产环境中都可以正常运行。