Configuración de Bases de Datos con Django y AWS RDS

Clase 29 de 33Curso de Django

Contenido del curso

Desarrollo de Aplicaciones en Django

Resumen

Cuando una aplicación Django está lista en funcionalidades, el siguiente paso crítico es prepararla para producción. Uno de los cambios más importantes es migrar de SQLite a PostgreSQL, una base de datos robusta que soporta múltiples conexiones simultáneas y garantiza rendimiento bajo carga real.

¿Por qué reemplazar SQLite por PostgreSQL en producción?

Durante el desarrollo es común trabajar con SQLite por su simplicidad, ya que viene configurada por defecto en Django. Sin embargo, en un entorno de producción donde muchos usuarios acceden al mismo tiempo, SQLite no es la opción adecuada [0:18].

PostgreSQL resuelve este problema porque:

  • Soporta múltiples conexiones concurrentes.
  • Ofrece mayor velocidad y estabilidad bajo carga.
  • Es uno de los motores de base de datos más utilizados en producción.

Un principio fundamental es usar el mismo motor de base de datos tanto en local como en producción [0:42]. Esto evita problemas de compatibilidad, ya que ciertos comportamientos pueden diferir entre motores. Si usas PostgreSQL en producción, configúralo también en tu entorno local.

¿Cómo configurar PostgreSQL en el archivo settings de Django?

Toda la configuración del proyecto vive en el archivo settings.py, dentro de la carpeta del proyecto. Allí se encuentra la sección DATABASES, que por defecto apunta a SQLite [1:02].

Para cambiar a PostgreSQL, se modifica el backend del motor de base de datos. Django acepta varios backends, y el que corresponde a PostgreSQL se define así:

python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres_local', } }

Para verificar que la conexión funciona, se ejecuta el comando python manage.py dbshell [1:50]. Es probable que aparezca un error indicando que falta la librería psycopg2.

¿Qué es psycopg2 y por qué es necesario?

La librería psycopg2 actúa como puente entre Django y PostgreSQL [2:08]. Django envía las queries a la base de datos a través de esta librería, que se encarga de formatear las consultas y devolver las respuestas en estructuras que Python puede manejar, como diccionarios.

Para instalarlo se recomienda usar la versión binaria precompilada:

bash pip install psycopg2-binary

Una vez instalada, el comando manage.py dbshell debería conectar exitosamente a la base de datos local [2:42].

¿Cómo crear una base de datos en AWS RDS para producción?

Para producción es clave elegir un servicio estable. AWS RDS (Relational Database Service) permite crear instancias de bases de datos en diferentes motores de forma sencilla [3:00].

¿Qué pasos seguir para crear la instancia?

  • Crear una cuenta en AWS y acceder al servicio RDS desde el buscador.
  • Seleccionar Create Database y elegir PostgreSQL como motor.
  • Elegir el Free Tier para aprovechar la capa gratuita durante un año [3:30].
  • Configurar nombre de la instancia, usuario y contraseña.
  • Marcar la opción Publicly Accessible: Yes para poder conectarse desde el entorno local [3:55].

La creación puede tardar varios minutos.

¿Cómo configurar los Security Groups para permitir la conexión?

Una vez creada la instancia, es necesario ajustar las reglas de red en los Security Groups de AWS [4:20]:

  • Acceder al Security Group asociado a la instancia.
  • En Inbound Rules, agregar una regla con All Traffic y seleccionar My IP.
  • En Outbound Rules, repetir el mismo proceso.

Esto permite que tu IP local se conecte a la base de datos en la nube.

Finalmente, en settings.py se agregan los datos de conexión obtenidos desde la consola de RDS [5:10]:

python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'HOST': 'tu-instancia.rds.amazonaws.com', 'PORT': '5432', 'USER': 'dbusername', 'PASSWORD': 'dbpassword', } }

Con esta configuración, manage.py dbshell confirma la conexión exitosa a la base de datos remota [5:40].

Hay un problema importante: las credenciales sensibles como usuario y contraseña no deben quedar expuestas en settings.py, ya que este archivo se sube al repositorio y cualquier persona con acceso podría verlas [5:55]. Este tema de seguridad es fundamental y se aborda como siguiente paso en la configuración del proyecto.

¿Ya has trabajado con AWS RDS o prefieres otro servicio para bases de datos en producción? Comparte tu experiencia.

      Configuración de Bases de Datos con Django y AWS RDS