En este Post vamos a crear una máquina virtual o ec2 en Amazon Web Services que actuará como servidor dedicado a una base de datos, en este caso PostgreSQL.

Los requerimientos para toda esta ejecución son los siguientes :

El primero y más importante es tener una cuenta activa en AWS la cuál os podéis abrir desde este link https://aws.amazon.com/es/

El segundo es descargarnos el entorno gráfico de PgAdmin4 el cuál podéis conseguir en la siguiente dirección https://www.pdadmin.org/

Una vez cumplimos con los requisitos podemos empezar a «jugar». El primer paso es crearnos una ec2 en aws para poder conectarnos a ella mediante nuestra cmd y los pasos son:

-Vamos al servicio EC2 de Amazon Web Services, clicamos en Launch Instances o Lanzar Instancia, seleccionamos la capa gratuita, dejamos todo por defecto hasta llegar a las etiquetas, donde le pondremos un nombre especifico a la ec2, a continuación creamos un grupo nuevo si no queremos utilizar cualquier otro existente, descargamos la clave de acceso o el archivo .pem y lanzamos la instancia o máquina virtual.

Sí tenéis dudas de los pasos anteriores podéis consultar el video tutorial.

A continuación debemos otorgarle los permisos necesarios al archivo que nos acabamos de descargar para que podamos acceder a nuestra ec2 recién lanzada.

Permisos1
https://flic.kr/p/2m1Eui3
Permisos2
https://flic.kr/p/2m1EuhS
Permisos3
https://flic.kr/p/2m1D15F
Permisos4
https://flic.kr/p/2m1D15v
Permisos5
https://flic.kr/p/2m1A4Uz
Permisos6
https://flic.kr/p/2m1Euge
Permisos7
https://flic.kr/p/2m1A4U4
Permisos8
https://flic.kr/p/2m1EufH
Permisos9
https://flic.kr/p/2m1vmw6
Permisos10
https://flic.kr/p/2m1vmvz
Permisos11
https://flic.kr/p/2m1vmve

Una vez hemos concedido los permisos necesarios al archivo nos conectamos a través de SSH a nuestra VM/EC2 de AWS con la siguiente línea: ssh -i «Post-Tajamar.pem» ec2-user@ec2-3-86-47-76.compute-1.amazonaws.com la cual sacamos de AWS haciendo click en el boton de conectar o connect dentro de nuestra ec2 que ya esta disponible y corriendo.

Introducimos el comando sudo su para hacernos super usuario en la maquina ec2. El siguiente paso es descargarnos el servidor PostgreSQL de Amazon Linux extras con las siguientes ordenes:

sudo amazon-linux-extras | grep postgre con el cuál vemos la store de Amazon.

amazon-linux-extras install postgresql11 vim epel dado que es la versión mas estable actualmente en la tienda de Amazon Linux extras.

Ahora instalamos el server de PostgreSQL:

yum install -y postgresql-server postgresql-devel

Ya estaría instalado, ahora es el momento de arrancar los servicios y configurar la base de datos:

/usr/bin/postgresql-setup –initdb

arranca la bbdd, que no es lo mismo que el servicio de escucha, es como crear index en apache, por ejemplo

Arrancamos el servicio de BBDD para su escucha.

systemctl enable postgresql

systemctl start postgresql

Vemos el estado del servicio

systemctl status postgresql

ServerClose
https://flic.kr/p/2m1vmE7

Ya nos podemos conectar a la BBDD.

La primera vez, debemos configurar la contraseña para el usuario principal de Postgres,dicho usuario es postgres y vamos a poner la misma contraseña postgres

Nos conectamos con el usuario Admin de Postgres:

sudo su – postgres

Cambiamos la password de nuestro usuario de la base de datos:

psql -c «alter user postgres with password ‘Postgres'»

Creamos nuestra bbdd para el ejemplo Mundo:

createdb Mundo

Por defecto, se crea una base de datos default llamada como el usuario postgres

Nos conectamos a dicha bbdd

psql -U postgres

Cambiamos a la nueva base de datos Mundo

psql postgres=#\c Mundo;

Creamos una Tabla para la base de datos que acabamos de crear

CREATE TABLE «Countries»
(«IdCity» int primary key not null,
«CNAME» char(50),
«LOC» char(50),
«LANG» char(50));

insert into «Countries» values (1, ‘MADRID EC2′,’SPAIN’,’SPANISH’);
insert into «Countries» values (2, ‘LONDON EC2’, ‘UK’,’ENGLISH’);
insert into «Countries» values (3, ‘PEKIN EC2’, ‘CHINA’,’CHINESE’);
insert into «Countries» values (4, ‘NEW YORK EC2’, ‘EEUU’,’AMERICAN ENGLISH’);

SELECT * FROM «Countries»;

Nos conectamos al entorno grafico de PgAdmin4

PgAdmin4
https://flic.kr/p/2m1A4T2

Es el momento de conectarnos con nuestro server remoto de PostgresSQL que contiene la ec2 con la IP Publica

PgAdmin-EC2
https://flic.kr/p/2m1z33D

Al intentar conectar, nos indica que no conoce nuestra IP porque aun necesitamos abrir el puerto de PosgreSQL en el grupo de seguridad en aws

OpenRules
https://flic.kr/p/2m1z38Z

Debemos configurar los accesos de PostgreSQL dentro de la ec2:

Podemos permitir que el acceso sea de una sola IP pública (externa): Acceso a otra máquina dedicada con un Web Server por ejemplo.

Podemos permitir que el acceso sea solo de IP Privada: Grupo de Seguridad o para una aplicación que consume directamente desde la propia máquina (Web Server en la misma máquina EC2).

Para averiguar si me puedo conectar, existe un comando dentro de la máquina virtual 

psql -U postgres -h IPNUMBER

Necesitamos acceder al archivo de configuración de Postgre, para ellos tenemos que salir del servidor de Postgre con el comando \q

cd /var/lib/pgsql/data

En el archivo postgresql.conf debemos indicar que direcciones podrán escuchar utilizando el editor por defecto nano con la siguiente línea de comandos:

sudo nano postgresql.conf

PostgresqlConfig
https://flic.kr/p/2m1EuiD

Indicamos las direcciones que deseamos que se puedan comunicar

sudo nano pg_hba.conf

HbaConfig
https://flic.kr/p/2m1vmSg

Reiniciamos el servidor de Postgres:

systemctl restart postgresql

Verificamos el estado del servidor:

systemctl status postgresql

ServerOpen
https://flic.kr/p/2m1Eut8

Nos conectamos con el entorno grafico de PgAdmin4 a la ec2 la cual contiene PostgreSQL

BBDD
https://flic.kr/p/2m1vmPk

Ya tendríamos nuestra ec2 dedicada a una base de datos.

En caso de querer conectar una app a esta bbdd mediante la Ip privada solo tendríamos que repetir los pasos de configuración de los archivos, pero con la Ip privada en esta ocasión y con trust en vez de con md5, de la app o de la propia ec2 para que solo se puedan conectar aplicaciones internas, reiniciaríamos el servidor, comprobaríamos su estado y verificaríamos el acceso según como lo hayamos configurado.

Autor/a: Enrique Javier Muñoz Romera

Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma

Centro: Tajamar

Año académico: 2020-2021

Recursos utilizados

https://aws.amazon.com/es/rds/postgresql/what-is-postgresql/

https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-amazon-ec2.html

LinkedIn: https://www.linkedin.com/in/enrique-munoz-romera/

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.