sql >> Base de Datos >  >> NoSQL >> MongoDB

Migración de MongoDB a DynamoDB, Parte 1

AWS Database Migration Service (DMS) está diseñado para migrar bases de datos en AWS de manera confiable, sin tiempo de inactividad. Inicialmente, DMS solo admitía bases de datos relacionales, incluido AWS Redshift. En abril de 2017, DMS agregó dos bases de datos NoSQL:MongoDB como base de datos de origen y AWS DynamoDB como base de datos de destino. En este tutorial de dos artículos, analizaremos la migración de una base de datos MongoDB a DynamoDB en DMS. Uno de los requisitos para usar MongoDB como fuente de DMS es que MongoDB debe ejecutarse como un conjunto de réplicas, que crearemos usando una imagen de Docker en el primero de estos dos artículos.

Este artículo tiene las siguientes secciones:

  • Configuración del entorno
  • Creación de un usuario de IAM para el servicio de migración de base de datos
  • Creación de una clave de cifrado
  • Crear una base de datos MongoDB
  • Creación de una tabla de DynamoDB
  • Conclusión

Configuración del entorno

El único requisito previo es una cuenta de AWS, que se puede crear en https://aws.amazon.com/resources/create-account/. Ejecutaremos las bases de datos de origen y de destino en AWS. Para la fuente de MongoDB, usaremos Docker, para lo cual lanzaremos una instancia EC2 con AMI Container Linux by CoreOS (Stable) seleccionado de AWS Marketplace, como se muestra en la Figura 1. Se elige CoreOS como plataforma Linux porque tiene Docker preinstalado en él.


Figura 1: Seleccionar la AMI de CoreOS para lanzar una instancia EC2

El grupo de seguridad utilizado por la instancia CoreOS EC2 debe tener reglas de entrada/salida configuradas para aceptar todo el tráfico. Esto implica tráfico de todos los protocolos en todos los puertos entre todas las fuentes y destinos (0.0.0.0/0,::/0 ).

Creación de un usuario de IAM para el servicio de migración de base de datos

En esta sección, crearemos un usuario de IAM para acceder a los diferentes servicios de AWS utilizados en la creación de una migración, incluidos DMS, EC2, DynamoDB, KMS, IAM y CloudWatch. Primero, necesitamos crear una Política con los permisos requeridos. Posteriormente, crearemos un usuario y le asignaremos la política. Para crear una política de IAM, seleccione Políticas en la consola de IAM y haga clic en Crear política . En Crear política, seleccione Crear su propia política . En Política de revisión, especifique un Nombre de política (DMS como ejemplo) y copie y pegue el siguiente documento de política en el campo Documento de política.

{ "Versión":"2012-10-17", "Declaración":[ { "Efecto":"Permitir", "Acción":"dms:*", "Recurso":"*" }, { "Efecto":"Permitir", "Acción":"dynamodb:*", "Recurso":"*" }, { "Efecto":"Permitir", "Acción":"kms:*", "Recurso":"*" }, { "Efecto":"Permitir", "Acción":"iam:*", "Recurso":"*" }, { "Efecto":"Permitir", "Acción":"ec2:* ", "Recurso":"*" }, { "Efecto":"Permitir", "Acción":"cloudwatch:*", "Recurso":"*" }, { "Efecto":"Permitir", "Acción ":"aws-marketplace:*", "Recurso":"*" }, { "Efecto":"Permitir", "Acción":"registros:*", "Recurso":"*" }, { "Efecto ":"Permitir", "Acción":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}

Haga clic en Validar política . Si el resultado es "Esta política es válida", haga clic en Crear política. , como se muestra en la Figura 2.


Figura 2: Creación de una política de IAM

Se crea una nueva política de IAM, como se muestra en la Figura 3.


Figura 3: Política de IAM "DMS"

A continuación, cree un usuario de IAM. Seleccione Usuarios y haz clic en Añadir usuario , como se muestra en la Figura 4.


Figura 4: Añadir usuario

En Añadir usuario , especifique un Nombre de usuario , como se muestra en la Figura 5. Para Tipo de acceso , seleccione Acceso programático y acceso a la consola de administración de AWS .


Figura 5: Agregar usuario

Para contraseña de consola , seleccione Contraseña personalizada y especifique una contraseña (consulte la Figura 6). Haga clic en Siguiente.


Figura 6: Seleccione Tipo de acceso de AWS>Siguiente

En Establecer permisos, haga clic en Adjuntar políticas existentes directamente , como se muestra en la Figura 7.


Figura 7: Configuración de permisos

Seleccione la política DMS creada anteriormente y haga clic en Siguiente, como se muestra en la Figura 8.


Figura 8: Selección de política de DMS

En Revisión, haga clic en Crear usuario , como se muestra en la Figura 9.


Figura 9: Revisar>Crear usuario

Se crea un usuario de IAM. Copie la URL que se muestra en la Figura 10 para iniciar sesión en la Consola de administración de AWS como la creó el usuario.


Figura 10: URL de usuario de IAM

Un nuevo usuario se incluye en Usuarios (ver Figura 11).


Figura 11: URL de usuario de IAM

Crear una clave de cifrado

A continuación, cree una clave de cifrado que se utilizará para la migración de DMS. Inicie sesión como el usuario de IAM creado y use la URL copiada en la Figura 10. Seleccione el IAM servicio en la consola de administración de AWS y seleccione Claves de cifrado . Haz clic en Crear clave para iniciar un asistente para crear una clave de cifrado. Utilice el asistente para crear una clave de cifrado (dms ), como se muestra en la Figura 12.


Figura 12: Nueva clave de cifrado

Creación de una base de datos MongoDB

En esta sección, crearemos una base de datos MongoDB que migraremos posteriormente a DynamoDB. Usaremos Docker para ejecutar una instancia de MongoDB, para la cual se lanzó una instancia de CoreOS. Para iniciar sesión en una instancia de CoreOS, obtenga la dirección IP pública de la instancia de CoreOS, como se muestra en la Figura 13.


Figura 13: Dirección IP pública de la instancia de CoreOS

SSH inicie sesión en la instancia de CoreOS utilizando el par de claves y la IP pública.

ssh -i "docker.pem" [email protected]

Se muestra el indicador de línea de comandos de la instancia de CoreOS, como se muestra en la Figura 14.


Figura 14: Instancia de CoreOS

A continuación, ejecute el siguiente comando para iniciar un contenedor Docker para MongoDB utilizando la imagen de MongoDB "mongo". El puerto del contenedor Docker 27017 se expone en el host también como 27017 usando -p opción para ejecutar ventana acoplable . El nombre del contenedor se establece en "mongo1" y el comando mongod --replSet repl0 se ejecuta en el contenedor creado para iniciar un conjunto de réplicas de MongoDB llamado "repl0". Como se mencionó anteriormente, para usar MongoDB como fuente de DMS, se requiere un conjunto de réplicas de MongoDB y un MongoDB independiente no se puede usar como fuente.

docker ejecutar -p 27017:27017 mongo mongod --replSet repl0

La imagen de Docker mongo se extrae y, como lo indica el mensaje "MongoDB iniciando" en la Figura 15, MongoDB comienza a iniciarse.


Figura 15: Descargando la ventana acoplable Imagen de Docker

Se inicia una instancia de MongoDB en el puerto 27017 (consulte la Figura 16). Todavía no se ha creado un conjunto de réplicas y, a continuación, inicializaremos un conjunto de réplicas.


Figura 16: Instancia de Mongo iniciada

Un contenedor Docker aparece en la lista con docker ps comando, como se muestra en la Figura 17.


Figura 17: Listado de contenedores Docker para Mongo

Utilice el siguiente comando para iniciar un shell de comandos para la interfaz de línea de comandos (CLI) de Mongo.

docker exec -it mongo1 mongo

MongoDB shell versión 3.4.4 se conecta a la URL mongodb://127.0.0.1:27017 , como se muestra en la Figura 18.


Figura 18: Conectando MongoDB Shell

Se muestra el símbolo del sistema de la CLI de Mongo, como se muestra en la Figura 19.


Figura 19: Símbolo del sistema de Mongo Shell

Configure la base de datos MongoDB para usarla como prueba con la prueba de uso comando, como se muestra en la Figura 20.


Figura 20: Configuración de la base de datos como prueba

A continuación, inicializaremos un conjunto de réplicas para el que necesitamos definir los miembros o instancias del conjunto de réplicas. Obtenga la IP privada de la instancia CoreOS EC2 en la que se ejecuta el contenedor Docker para MongoDB (consulte la Figura 21).


Figura 21: IP privada de la instancia de CoreOS

En la CLI de Mongo, especifique la siguiente configuración para la configuración del conjunto de réplicas.

config ={ "_id" :"repl0", "miembros" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}

La configuración del conjunto de réplicas se establece, como se muestra en la Figura 22.


Figura 22: Configuración de la configuración del conjunto de réplicas

Inicie la configuración del conjunto de réplicas utilizando la configuración.

rs.initiate(config)

El conjunto de réplicas se inicializa, como se muestra en la Figura 23.


Figura 23: Conjunto de réplicas inicializado

Muestra la configuración del conjunto de réplicas.

rs.conf()

El repl0:PRIMARIO El símbolo del sistema indica que el conjunto de réplicas se ha inicializado y el miembro principal del conjunto de réplicas se ha configurado para ejecutar los comandos de la CLI de Mongo. El principal es el único miembro de un conjunto de réplicas para operaciones de escritura. Cree una colección MongoDB llamada wlslog con db.createCollection() comando.

db.createCollection("wlslog")

Se crea una colección MongoDB, como se muestra en la Figura 24. Una colección MongoDB es una colección de documentos. Los documentos están en formato BSON (JSON binario).


Figura 24: Creando colección

Ejecute las siguientes instrucciones que definen los documentos JSON en la CLI de Mongo.

doc1 ={"timestamp":"8 de abril de 2014 7:06:16 p. m. PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code ":"BEA-000365", "msg":"El estado del servidor cambió a STANDBY"}doc2 ={"timestamp":"8 de abril de 2014 7:06:17 p. m. PDT", "category":"Aviso"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"El estado del servidor cambió a INICIANDO"}doc3 ={"timestamp":"8 de abril de 2014 7 :06:18 p. to ADMIN"}doc4 ={"timestamp":"8 de abril de 2014 7:06:19 p. m. PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer"," code":"BEA-000365", "msg":"El estado del servidor cambió a REANUDAR"}doc5 ={"timestamp":"8 de abril de 2014 7:06:20 p. m. PDT", "category":"Aviso", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"Servidor de administración de WebLogic iniciado"}doc6 ={"timestamp":"8 de abril de 2014 7 :06:21 p. m. PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"El estado del servidor cambió a RUNNING"}doc7 ={" timestamp":"8 de abril de 2014 7:06:22 p. , "msg":"Servidor iniciado en modo EJECUTANDO"}

Las variables de los documentos JSON se definen, como se muestra en la Figura 25.


Figura 25: Definición de variables para documentos JSON

Agregue los documentos JSON al wlslog colección.

db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])

Como se indica en el resultado de la Figura 26, se agregan siete documentos al wlslog colección.


Figura 26: Documentos JSON agregados a la colección

Enumere los documentos agregados al wlslog colección.

db.wlslog.find()

Los siete documentos agregados se enumeran, como se muestra en la Figura 27.


Figura 27: Encontrar u obtener documentos de una colección de Mongo

Creación de una tabla de DynamoDB

Habiendo creado un conjunto de réplicas de MongoDB para el origen de DMS, a continuación crearemos una tabla de DynamoDB para el destino de DMS. Inicie sesión como el usuario de IAM (dvohra) creado anteriormente y al que se le asignó una política. Seleccione el servicio DynamoDB en AW Management Console y seleccione Crear tabla , como se muestra en la Figura 28.


Figura 28: DynamoDB>Crear tabla

En Crear tabla de DynamoDB, especifique un Nombre de tabla y especifique la clave principal , que también es la clave de partición, como _id , como se muestra en la Figura 29. Aunque el nombre de la tabla es arbitrario y se establece en wlslog , que es lo mismo que la colección de MongoDB creada en el conjunto de réplicas de MongoDB, la clave principal debe establecerse en _id porque a cada documento MongoDB se le asigna el campo de clave principal _id .


Figura 29: Creación de una tabla de DynamoDB

La tabla de DynamoDB wlslog se crea, como se muestra en la Figura 30.


Figura 30: Tabla de DynamoDB wlslog creada

Haga clic en la tabla de DynamoDB wlslog en el Tablero y los detalles de la tabla, incluida la clave principal _id , se muestran (consulte la Figura 31).


Figura 31: Detalles de wlslog de la tabla de DynamoDB

Cuando se crea una migración de DMS, un rol de IAM dms-vpc-role con política administrada AmazonDMSVPCManagementRole se crea automáticamente. Para que el servicio DMS acceda al servicio DynamoDB, debemos modificar el rol de acceso al servicio dms-vpc-role para agregar el siguiente documento de política, que brinda acceso a DynamoDB desde DMS.

{ "Versión":"2012-10-17", "Declaración":[{ "Efecto":"Permitir", "Acción":[ "dynamodb:*" ], "Recurso":["*" ] }]}

Con el mismo procedimiento utilizado para crear la política de DMS, cree una política de DynamoDB y especifique el documento de política anterior en el cuadro de campo Documento de política, como se muestra en la Figura 32. Haga clic en Crear política. .


Figura 32: Revisar política>Crear política

Se crea la política de DynamoDB, como se muestra en la Figura 33.


Figura 33: Política de IAM creada en DynamoDB

El dms-vpc-role al que se agregará la política de DynamoDB se muestra en la Figura 34.


Figura 34: Rol de VPC de DMS

Haga clic en dms-vpc-role y agregue la política de DynamoDB mediante Adjuntar política. Las políticas de AmazonDMSVPCManagementRole y DynamoDB deben aparecer como Políticas administradas, como se muestra en la Figura 35.


Figura 35: Políticas de permisos en el rol de VPC de DMS

Conclusión

En este artículo, presentamos el uso de AWS Database Migration Service (DMS) para migrar MongoDB a Amazon DynamoDB. Comenzamos creando un conjunto de réplicas de MongoDB como fuente de datos para migrar y también creamos una tabla de DynamoDB como tabla de destino. En un artículo posterior, analizaremos la creación y ejecución de una migración de DMS para migrar datos.