连接到Django后端的AWS Postgres实例

时间:2018-01-18 03:31:22

标签: django postgresql amazon-web-services django-database

我在AWS上创建了一个PostgreSQL数据库,我想将它用于Django项目。

我修改了settings.py以便

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': <db name>,
        'USER': <user>,
        'PASSWORD': <password>,
        'HOST': 'projectdevelopment.foobar.us-east-1.rds.amazonaws.com',
        'PORT': '5432',
    }
}

我认为这看起来非常简单。除了当我尝试进行迁移时,我收到此错误:

django.db.utils.OperationalError: could not translate host name "projectdevelopment.foobar.us-east-1.rds.amazonaws.com" to address: nodename nor servname provided, or not known

projectdevelopment.foobar.us-east-1.rds.amazonaws.com已直接从RDS控制台中端点下的值复制。

我是否错过了设置或配置错误?或两者兼而有之?

3 个答案:

答案 0 :(得分:6)

确保服务器已启动并正常运行 亚马逊的结束。

检查这个issue,他们有同样的问题。

尝试使用'ENGINE' = 'django.db.backends.postgresql_psycopg2',请检查此SO answer

  

阅读: How To Use PostgreSQL with your Django Application on Ubuntu 14.04

尝试指定DATABASE_URL RDS postgres 连接到您的django应用。

DATABASE_URL=postgis://<user>:<password>@<host>:<port>/<db-name>
  

注意:按照相同的语法声明DATABASE_URL,请检查以上网址中的这些特殊字符。

     
      用户和密码
  • :
  •   密码和主机之间的
  • @
  •   主机和端口之间的
  • :
  •   端口和数据库名称之间的
  • /
  •   

并将其分配给 settings.py

中的DATABASES
DATABASES['default'] = DATABASE_URL
  

在您的情况下,DATABASE_URL将是。

     

<强> PostGIS的:// <user><password> @ projectdevelopment.foobar.us-east-1.rds.amazonaws.com5432 / <db name>

     
      
  • 5432是postgres服务器
  • 使用的默认端口   

答案 1 :(得分:3)

看起来你使用的是错误的引擎。除此之外,如果您没有为应用程序使用Elastic Beanstalk等托管服务,请确保将RDS实例的安全组添加到应用程序环境中,以便应用程序能够访问RDS实例。

如果您使用的是Elastic Beanstalk:Click herehere

如果你没有使用弹性beanstalk,很可能是VPC的问题。请参考this讨论,直接使用RDS配置EC2。 该方案在官方文档here中得到了很好的解释。

答案 2 :(得分:2)

您的主机字符串错误。

(venv) duddits@dev:~/movina$ host projectdevelopment.foobar.us-east-1.rds.amazonaws.com
Host projectdevelopment.foobar.us-east-1.rds.amazonaws.com not found: 3(NXDOMAIN)


(venv) duddits@dev:~/movina$ dig  projectdevelopment.foobar.us-east-1.rds.amazonaws.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> projectdevelopment.foobar.us-east-1.rds.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 30254
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;projectdevelopment.foobar.us-east-1.rds.amazonaws.com. IN A

;; AUTHORITY SECTION:
us-east-1.rds.amazonaws.com. 55 IN      SOA     ns-1420.awsdns-49.org. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; Query time: 0 msec
;; SERVER: 109.197.120.67#53(109.197.120.67)
;; WHEN: Thu Jan 25 04:43:44 +07 2018
;; MSG SIZE  rcvd: 164

这意味着没有名称为projectdevelopment.foobar.us-east-1.rds.amazonaws.com的主机,您将无法连接到它,因为无法区分它的IP地址。所以你应该找到正确的主机名。