DEV Community

criscarba
criscarba

Posted on

¿Cómo migrar tu base de datos on premise a la nube de AWS?

En esta publicación voy a estar hablando sobre el servicio de AWS llamado Database Migration Service (DMS).

Caracteristicas Principales

  • AWS Database Migration Service (DMS) es un servicio de AWS que nos permite la migración de bases de datos a la nube.

  • Permite realizar la migración de bases de datos On Premise (y cloud) hacia AWS.

  • DMS es un servicio resiliente a potenciales fallos (highly resilient & self–healing)

  • A lo largo de la migración de datos la base de datos de origen (Source) se mantiene activa sin interrupciones.

  • DMS Soporta migraciones de bases de datos de manera:
    Homogéneas: Ej. Caso de uso: PostgreSQL ⇒ PostgreSQL
    Heterogéneas: Ej. Caso de uso: MS Sql Server ⇒ Aurora (Debe utilizarse el SCT (Schema Conversion Tool))

  • Los tipos de migraciones pueden ser:
    Full/Snapshot
    Change Data Capture (CDC)

  • El Schema Conversion Tool (SCT) permite convertir el schema de una BDD de un motor a otro.

  • Puede ser utilizado entre bases de datos OLTP / OLAP
    Ej. OLTP: Oracle ⇒ PostgreSQL
    Ej. OLAP: Teradata ⇒ Redshift

DMS1

Endpoints
Para utilizar DMS es necesario definir un Sourcer y Target Endpoint. A Continuación mostraré los actualmente disponibles:

DMS2

DEMO

Descripción del escenario:

  • La compañía “Sin Nombre SRL” está comenzando a dar sus primeros pasos en el mundo Cloud.
  • Luego de analizar las distintas soluciones y tecnologías disponibles en el mercado, optaron por migrar su infraestructura de Base de datos hacia AWS, utilizando el servicio RDS.
  • La actual base de datos es PostgreSQL y está sobre un servidor dedicado el cual requiere mantenimiento (patches/seguridad/OS/etc), el cual debe ser reducido.
  • Es necesario que el 100% de los datos actuales sean migrados a la nube, exceptuando algunas entidades de datos.
  • Debe replicarse diariamente los cambios ocurridos en el origen.

Arquitectura:
DMS3

NOTA: Debemos contar con una instancia de Clod9

Pasos a Realizar:

  1. Crear las 2 instancias (Source y Target) con un script de CloudFormation.
  2. Crear una Inbound Rule en el security group de cada Base de datos para abrir el puerto de PostgreSQL.
  3. Crear instancia de replicación en DMS.
  4. Instalar Postgres Tools (psql)
  5. Conectarse a Source DB
  6. Ejecutar script de creación de tablas en Source DB
  7. Crear en DMS el Source Endpoint y Target Endpoint.
  8. Probar conexión a Target DB y validar que se encuentra sin datos
  9. Crear tarea de replicación (FULL LOAD) y ejecutar.
  10. Validar que los datos hayan sido replicados en el target.
  11. Crear tarea de replicación (CDC) y ejecutar.
  12. Insertar registros nuevos en la tabla de Source DB.
  13. Validar que los datos hayan sido replicados en el target.
  14. Eliminar Recursos.

Paso # 1: Crear las 2 instancias (Source y Target) con un script de CloudFormation.

  • Ejecutar el siguiente comando para posicionarse en el directorio donde se encuentra el archivo bash para realizar el deployment.

cd /home/ec2-user/environment/Datapath/DMS

DMS6

  • Ejecutar el archivo “deploy.sh” (Creación de Stack CloudFormation)

bash deploy.sh

DMS7

  • Verificar que se esté ejecutando el stack en Cloudformation DSMS99

Paso # 2: Crear una Inbound Rule en el security group de cada Base de datos para abrir el puerto de PostgreSQL.

  • Ir al servicio de RDS y modificar los security groups para poder abrir los puertos 5432 (PostgreSQL)

DMS024

  • En la parte inferior derecha se puede visualizar el security group de nuestra instancia de BDD. Hacer Click en el link del security group para que nos direccione a las configuraciones

DMS124

  • Hacer Click en “Edit inbound Rules” y agregar la misma regla que está en las imágenes de a continuación para abrir el puerto de postgres.

DMS1235

Paso # 3: Crear instancia de replicación en DMS.

  • Ingresar al servicio DMS y crear una nueva Replication Instance haciendo click en el boton “Create replicacion instance” (boton naranja)

DMS55

  • Ingresar un nombre (no utilizar el de la imagen) que debe ser único. Se recomienda agregarle de sufijo el ID de cuenta de AWS

  • Dejar los valores por default y establecer:
    Allocated Storage: 5 Gb
    VPC: Dejar la default
    Type: Single AZ
    Publicly Accessible: No seleccionado

DMS268

Paso # 4: Instalar Postgres Tools (psql)

  • Dentro de la instancia de Cloud9, ejecutar el siguiente comando:

sudo yum install postgresql -y

DMS5477

Paso #5: Conectarse a Source DB

  • Dentro de la instancia de Cloud9, ejecutar el siguiente comando para conectarnos a la Source DB:

Asegurarse de reemplazar el valor en rojo por el endpoint de la base de datos source:

psql -h [[++SOURCE_ENDPOINT++]] \
-U postgres \
-p 5432 \
-d postgres

Password es: source_p4assw0rd

DMSSQL

Paso #6: Ejecutar script de creación de tablas en Source DB

`create table if not exists personas
(
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre varchar(100),
apellido varchar(100),
telefono varchar(100)
);

insert into personas (nombre, apellido, telefono) values ('cristian','carballo','1234');
insert into personas (nombre, apellido, telefono) values ('Juan','Lopez','1234');
insert into personas (nombre, apellido, telefono) values ('Miguel','Garcia','1234');
insert into personas (nombre, apellido, telefono) values ('Roman','Riquelme','1234');
insert into personas (nombre, apellido, telefono) values ('Diego','Maradona','1234');

create table if not exists marcas
(
id bigint GENERATED ALWAYS AS IDENTITY,
nombre varchar(100),
ubicacion varchar(100)
);

insert into marcas (nombre, ubicacion) values ('Nike','USA');
insert into marcas (nombre, ubicacion) values ('Reebok','UK');
insert into marcas (nombre, ubicacion) values ('Adidas','Nigeria');
`

DMS56278

Paso #7: Crear en DMS el Source Endpoint y Target Endpoint.

  • Ingresar al servicio DMS y dentro de la opción de Endpoints, crear 2 endpoint:

Source Endpoint ⇒ PostgreSQL Source
Target Endpoint ⇒ PostgreSQL Target

SDM

SOURCE

TARGET

*Paso #8: Probar conexión a Target DB y validar que se encuentra sin datos
*

  • Dentro de la instancia de Cloud9, ejecutar el comando para conectarnos a la Target DB, de igual manera a lo realizado en paso # 5.

  • Para validar que la Target BDD esté vacía, ejecutar el siguiente comando:

SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';

MM

Paso #9: Crear tarea de replicación (FULL LOAD) y ejecutar.

  • Dentro del servicio DMS crear una Migration Task con los siguientes parametros:

DEME

Paso #10: Validar que los datos hayan sido replicados en el target.

  • Ejecutar en el Target BDD el siguiente comando y ver que se generó la tabla personas y luego accederla:

SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';

DMSK

Paso #11: Crear tarea de replicación (CDC) y ejecutar.

  • Dentro del servicio DMS crear una Migration Task con los siguientes parametros:

MKL

Paso # 12: Insertar registros nuevos en la tabla de Source DB.

  • Para este ejemplo insertaremos 2 registros y actualizaremos uno ya existente

IUY

Paso #13: Validar que los datos hayan sido replicados en el target.

  • Como se puede ver en la imagen a continuación, los registros fueron migrados correctamente.

KIU

Paso #14: Eliminar Recursos

  • Para eliminar los recursos realizarlos de la siguiente manera respetando el orden:

Detener la tarea de migración del CDC.

Esperar que detenga y eliminar tarea de migración de CDC y FULL.

Esperar a que terminen de eliminarse las 2 tareas de migración y luego eliminar la Replication Instance.

Eliminar los 2 endpoints (Source & Target) creados en DMS.

Eliminar las 2 bases de datos en RDS de manera manual asegurándose de no realizar el backup.

En CloudFormation eliminar el stack de RDS (StackRDS).

En CloudFormation eliminar el stack generado por la creación de Cloud9 (aws-cloud9-datapath-xxxxx)

Top comments (0)