django no puede conectarse a RDS postgresql

Mi aplicación Django no puede conectarse a RDS PostgreSQL cuando se implementó en EC2. pero curiosamente, funciona bien cuando se ejecuta en mi escritorio.

El servidor y el escritorio de EC2 se configuraron con python3, django1.9, apache2 y mod_wsgi_py3

Aquí está mi settings.py base de datos settings.py:

 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'some_name', 'PASSWORD': 'some_password', 'HOST': 'myhostname.cltlezrr85xn.ap-northeast-1.rds.amazonaws.com', 'PORT': 5432, } } 

y error.log de apache2:

 Traceback (most recent call last): File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 199, in ensure_connection self.connect() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 171, in connect self.connection = self.get_new_connection(conn_params) File "/usr/local/lib/python3.4/dist-packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib/python3.4/dist-packages/psycopg2/__init__.py", line 164, in connect conn = _connect(dsn, connection_factory=connection_factory, async=async) psycopg2.OperationalError: could not connect to server: Connection timed out Is the server running on host "myhostname.cltlezrr85xn.ap-northeast-1.rds.amazonaws.com" (172.--.--.---) and accepting TCP/IP connections on port 5432? The above exception was the direct cause of the following exception: Traceback (most recent call last): File "manage.py", line 10, in  execute_from_command_line(sys.argv) File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 345, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 348, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/management/commands/createsuperuser.py", line 52, in execute return super(Command, self).execute(*args, **options) File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 399, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/management/commands/createsuperuser.py", line 86, in handle default_username = get_default_username() File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/management/__init__.py", line 189, in get_default_username auth_app.User._default_manager.get(username=default_username) File "/usr/local/lib/python3.4/dist-packages/django/db/models/manager.py", line 122, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 381, in get num = len(clone) File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 240, in __len__ self._fetch_all() File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 1074, in _fetch_all self._result_cache = list(self.iterator()) File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 52, in __iter__ results = compiler.execute_sql() File "/usr/local/lib/python3.4/dist-packages/django/db/models/sql/compiler.py", line 846, in execute_sql cursor = self.connection.cursor() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 231, in cursor cursor = self.make_debug_cursor(self._cursor()) File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 204, in _cursor self.ensure_connection() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 199, in ensure_connection self.connect() File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 95, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/usr/local/lib/python3.4/dist-packages/django/utils/six.py", line 685, in reraise raise value.with_traceback(tb) File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 199, in ensure_connection self.connect() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 171, in connect self.connection = self.get_new_connection(conn_params) File "/usr/local/lib/python3.4/dist-packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib/python3.4/dist-packages/psycopg2/__init__.py", line 164, in connect conn = _connect(dsn, connection_factory=connection_factory, async=async) django.db.utils.OperationalError: could not connect to server: Connection timed out Is the server running on host "myhostname.cltlezrr85xn.ap-northeast-1.rds.amazonaws.com" (172.--.--.---) and accepting TCP/IP connections on port 5432? 

gracias por las sugerencias ..

Editar:

Simplemente corrí a través de esto otra vez, y tengo una manera más fácil.

Cuando intenta utilizar una base de datos RDS existente con Django en EC2 o EB, deberá ajustar los grupos de seguridad y luego obtener los parámetros adecuados y establecerlos como variables de entorno (RDS_ *)

1) Crea RDS, y combina estos:

 Environment variables - RDS console label RDS_HOSTNAME - Endpoint (this is the hostname) RDS_PORT - Port RDS_DB_NAME – DB Name RDS_USERNAME – Username RDS_PASSWORD – Password you set for your DB 

2) Establezca los que utilizan, por ejemplo, eb setenv

3) Vaya a su instancia de EC2 / EB y obtenga el grupo de seguridad para eso, por ejemplo, awseb-z-afsafdsaf-stack-AWSEBSecurityGroup-asfdsadfasdf

4) Vaya al panel de su instancia de RDS, desplácese hasta Grupos de seguridad y tome nota de qué grupo de seguridad tiene. por ejemplo, rds-launch-wizard-1 (ab-sdjfalkajsdf39)

5) Seleccione el grupo de seguridad RDS y agregue una regla de entrada con el tipo: PostgreSQL (o cualquier db que esté usando), y use la instancia de EC2 o EB que obtuvo en el paso 2 como fuente ( awseb-z-afsafdsaf-stack-AWSEBSecurityGroup-asfdsadfasdf ). Protocolo y rango de puertos debe autopopular.

6) guardalo

Eso es.


Original:

Para cualquiera que se tope con esta pregunta:

Cuando intenta utilizar una base de datos RDS existente con Django en EC2 o EB, deberá ajustar los grupos de seguridad y luego obtener los parámetros adecuados y establecerlos como variables de entorno (RDS_ *)

1) Crea RDS, y combina estos:

 Environment variables - RDS console label RDS_HOSTNAME - Endpoint (this is the hostname) RDS_PORT - Port RDS_DB_NAME – DB Name RDS_USERNAME – Username RDS_PASSWORD – Password you set for your DB 

2) Establezca los que utilizan, por ejemplo, eb setenv

3) Vaya a su instancia de EC2 / EB y obtenga el grupo de seguridad para, por ejemplo, awseb-z-afsafdsaf-stack-AWSEBSecurityGroup-asfdsadfasdf y para el equilibrador de carga: awseb-e-adsfadsf-stack-AWSEBLoadBalancerSecurityGroup-asdfadsf

4) Vaya al panel de su instancia de RDS, desplácese hasta Grupos de seguridad y tome nota de qué grupo de seguridad tiene. por ejemplo, rds-launch-wizard-1 (ab-sdjfalkajsdf39)

5) Haga clic en Modificar para la instancia de RDS, y en la configuración de Grupos de seguridad en el medio, agregue el grupo de seguridad del equilibrador de carga que encontró anteriormente. Debe tener sugerencias.

6) Vaya al panel de EC2 y elija grupos de seguridad en el menú de la izquierda.

7) Seleccione el grupo de seguridad del equilibrador de carga y agregue una regla de salida. El tipo debe ser su tipo de RDS (PostgreSQL) y el destino debe ser personalizado y el grupo de seguridad de la instancia de RDS. Salvar.

8) Haga lo mismo para Inbound, use el mismo tipo de RDS y Destino

9) Seleccione el grupo de seguridad RDS y agregue una regla de entrada, similar a 8, pero utilizando la instancia de EC2 o EB que obtuvo en el paso 2.

10) Guardar, ya está. Deberían poder trabajar juntos ahora.

No estoy 100% seguro de que todos estos pasos son necesarios, uno o dos podrían no serlo, pero esto hizo el trabajo por mí.