Cómo crear una base de datos PostgreSQL en AWS RDS
Crear la instancia
Consola
Entra al servicio Aurora and RDS y haz clic en Create database.

Dos cosas que decidir primero:
- Creation method. Yo uso Create with full configuration. La opción rápida esconde ajustes que vas a necesitar más adelante de todos modos.
- Engine. Elegí PostgreSQL. El resto del post asume Postgres y el puerto 5432. Para MySQL el flujo es el mismo, el puerto es 3306.

Después AWS te pide Express configuration o Full configuration. Express elige por ti el tamaño de la instancia y la red. Full te deja elegir a ti. Para aprender, Express está bien. Para algo que vas a conservar, usa Full y así sabes por qué estás pagando.
Elige el DB instance size. Esta es la parte que cuesta dinero, así que revisa las opciones del free tier antes de hacer clic.
RDS cobra por hora mientras la instancia exista, la consultes o no. Si estás siguiendo este post para aprender, decide ahora que la vas a borrar cuando termines.

Define el usuario y la contraseña maestros. Anótalos ahora. Cambiarlos después se puede, pero es molesto.

CLI
Lo mismo en un solo comando:
aws rds create-db-instance \
--db-instance-identifier my-postgres-db \
--engine postgres \
--db-instance-class db.t4g.micro \
--allocated-storage 20 \
--master-username postgres \
--master-user-password 'CHANGE_ME' \
--publicly-accessibleAquí la contraseña se va directo al historial de tu shell. Léela desde una variable de entorno o un gestor de secretos si te importa, y debería importarte.
Las clases de instancia no están disponibles en todas las regiones ni para todas las versiones del motor, así que db.t4g.micro te puede fallar. Revisa cuál es la clase elegible para el free tier antes de ejecutar esto.
La creación tarda unos minutos. Bloquea hasta que esté lista:
aws rds wait db-instance-available --db-instance-identifier my-postgres-dbHacerla accesible desde fuera de la VPC
Por defecto la base de datos solo acepta conexiones desde dentro de su VPC. Tu laptop no está dentro de la VPC.
Consola
Modifica la instancia, ve a Connectivity y pon Public access en Publicly accessible. RDS le asigna entonces una IP pública a la base de datos. Los recursos de fuera de la VPC pueden conectarse, y los de dentro siguen pudiendo.

CLI
aws rds modify-db-instance \
--db-instance-identifier my-postgres-db \
--publicly-accessible \
--apply-immediatelySin --apply-immediately el cambio espera a la siguiente ventana de mantenimiento.
De cualquier forma, esto solo no basta. El acceso público abre la puerta, el security group decide quién pasa.
Abrir el puerto en el security group
Si la conexión se queda colgada después de activar el acceso público, el puerto está cerrado.
Consola
Ve a Security group rules en la página de la base de datos y haz clic en una de las reglas de entrada. Eso te lleva a Security Groups. Selecciona el grupo asociado a tu base de datos, luego Edit inbound rules y añade:
- Type: PostgreSQL
- Port: 5432
- Source: tu IP


CLI
Primero busca el security group asociado a la base de datos:
aws rds describe-db-instances \
--db-instance-identifier my-postgres-db \
--query 'DBInstances[0].VpcSecurityGroups[0].VpcSecurityGroupId' \
--output textDespués añade la regla con tu propia IP:
aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--protocol tcp \
--port 5432 \
--cidr 203.0.113.42/32Usa tu propia IP con /32, no 0.0.0.0/0. 0.0.0.0/0 significa que todo internet puede llegar a tu base de datos, y los bots escanean puertos de bases de datos abiertos todo el tiempo. Tu contraseña sería lo único que queda ahí en medio.
Si tu IP de casa cambia, vas a tener que actualizar la regla otra vez. Esa molestia es el precio de que no te escaneen.
Conectarte desde tu máquina
Consola
En la página de la base de datos, abre Connect using y elige Endpoints. Copia el endpoint y el puerto.

CLI
aws rds describe-db-instances \
--db-instance-identifier my-postgres-db \
--query 'DBInstances[0].Endpoint.[Address,Port]' \
--output textAhora conecta
psql -h <tu-endpoint>.rds.amazonaws.com -p 5432 -U postgres -d postgres-U es el usuario maestro que definiste, -d es el nombre de la base de datos. Si no creaste ninguna, Postgres te deja en la base postgres por defecto.

Si se queda colgado sin error, es el security group, no las credenciales. Las credenciales malas fallan rápido, los puertos bloqueados dan timeout.
Bórrala cuando termines
Detener la instancia no basta. Una instancia de RDS detenida sigue cobrando por almacenamiento y backups.
Si la base de datos era solo para aprender, bórrala:
aws rds delete-db-instance \
--db-instance-identifier my-postgres-db \
--skip-final-snapshot \
--delete-automated-backups--skip-final-snapshot significa que tus datos desaparecen sin copia. Eso es lo que quieres para una base de prueba y lo último que quieres para cualquier otra cosa.
En la consola: selecciona la instancia, Actions, Delete, desmarca la opción del snapshot final y escribe la frase de confirmación.
Dos cosas más que siguen cobrando cuando la instancia ya no está: los snapshots manuales que hiciste y cualquier snapshot final que decidieras conservar. Revisa también la sección Snapshots.
La parte que yo no publicaría
Acceso público más una contraseña no es un setup de producción. Para algo real, la base de datos se queda privada y llegas a ella desde dentro de la VPC: una instancia EC2, un bastion host o una VPN. Yo usé acceso público porque necesitaba consultar la base desde mi propia máquina mientras construía, y pienso apagarlo.
Frequently asked questions
¿Puedo conectarme a RDS sin hacerlo público?
Sí, y es la mejor opción. Coloca una instancia de EC2 en la misma VPC y abre un túnel SSH a través de ella, o usa AWS Systems Manager Session Manager para no exponer tampoco un puerto SSH. De esta manera, tu computadora se comunica con la base de datos a través de ese túnel y la base de datos permanece privada.
¿Necesito reiniciar la instancia después de cambiar el acceso público?
No. El cambio se aplica sin necesidad de reiniciar, pero no es instantáneo.
¿Debería usar RDS o Aurora?
RDS ejecuta PostgreSQL o MySQL estándar. Aurora es el motor de almacenamiento propio de AWS con el mismo protocolo de transmisión, mejor para escalar lecturas y más costoso en tamaños pequeños. Para un proyecto personal o una primera base de datos, RDS básico es la respuesta.
Comments