Uso de Amazon DocumentDB como destino para AWS Database Migration Service - AWS Database Migration Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de Amazon DocumentDB como destino para AWS Database Migration Service

Para obtener información acerca de las versiones de Amazon DocumentDB (con compatibilidad con MongoDB) que AWS DMS admite, consulte Objetivos para AWS DMS. Puede usar AWS DMS para migrar datos a Amazon DocumentDB (con compatibilidad con MongoDB) desde cualquiera de los motores de datos de origen compatibles con AWS DMS. El motor de origen puede estar en un servicio administrado por AWS como Amazon RDS, Aurora o Amazon S3. O el motor puede estar en una base de datos autoadministrada, como MongoDB ejecutándose en Amazon EC2 o en las instalaciones.

Puede utilizar AWS DMS para replicar los datos de origen en bases de datos, recopilaciones o documentos de Amazon DocumentDB.

nota

Si el punto de conexión de origen es MongoDB o Amazon DocumentDB, ejecute la migración en modo documento.

MongoDB almacena los datos en formato JSON binario (BSON). AWS DMS admite todos los tipos de datos BSON compatibles con Amazon DocumentDB. Para obtener una lista de estos tipos de datos, consulte API, operaciones y tipos de datos de MongoDB admitidos en la Guía para desarrolladores de Amazon DocumentDB..

Si el punto de conexión de origen es una base de datos relacional, AWS DMS asigna objetos de la base de datos a Amazon DocumentDB de la siguiente manera:

  • Una base de datos relacional o un esquema de base de datos, se asigna una base de datos de Amazon DocumentDB.

  • Las tablas de una base de datos relacional se corresponden con recopilaciones en Amazon DocumentDB.

  • Los registros de una tabla relacional se asignan a documentos en Amazon DocumentDB. Cada documento se crea a partir de los datos del registro de origen.

Si el punto de conexión de origen es Amazon S3, los objetos de Amazon DocumentDB resultantes se corresponden con reglas de asignación de AWS DMS para Amazon S3. Considere, por ejemplo, el siguiente URI.

s3://mybucket/hr/employee

En este caso, AWS DMS asigna los objetos de mybucket a Amazon DocumentDB tal y como se indica a continuación:

  • La parte del URI del nivel superior (hr) se asigna a una base de datos de Amazon DocumentDB.

  • La parte del URI siguiente (employee) se asigna a una recopilación de Amazon DocumentDB.

  • Cada objeto en employee asigna un documento de Amazon DocumentDB.

Para obtener más información sobre las reglas de asignación de Amazon S3, consulte Uso de Amazon S3 como origen para AWS DMS.

Configuración del punto de conexión de Amazon DocumentDB

En las versiones 3.5.0 y superiores de AWS DMS, puede mejorar el rendimiento de la captura de datos de cambio (CDC) para los puntos de conexión de Amazon DocumentDB ajustando la configuración de las tareas para los subprocesos paralelos y las operaciones masivas. Para ello, puede especificar el número de subprocesos simultáneos, las colas por subproceso y el número de registros que se van a almacenar en un búfer mediante la configuración de tareas ParallelApply*. Suponga, por ejemplo, que desea realizar una carga de CDC y aplicar 128 subprocesos en paralelo. También desea acceder a 64 colas por subproceso, con 50 registros almacenados por búfer.

Para aumentar el rendimiento de CDC, AWS DMS admite esta configuración de las tareas:

  • ParallelApplyThreads: especifica el número de subprocesos simultáneos que utiliza AWS DMS durante una carga de CDC para insertar registros de datos en un punto de conexión de destino de Amazon DocumentDB. El valor predeterminado es cero (0) y el valor máximo es 32.

  • ParallelApplyBufferSize: especifica el número máximo de registros que se almacenan en cada cola del búfer para los subprocesos simultáneos que insertan datos en un punto de conexión de destino de Amazon DocumentDB durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando ParallelApplyThreads especifique más de un subproceso.

  • ParallelApplyQueuesPerThread: especifica el número de colas a las que accede cada subproceso para sacar registros de datos de las colas y generar una carga por lotes para un punto de conexión de Amazon DocumentDB durante el proceso de CDC. El valor predeterminado es 1. El máximo es 512.

Para obtener más información sobre cómo trabajar con Amazon DocumentDB como destino para AWS DMS, consulte las secciones siguientes:

nota

Para ver un recorrido paso a paso del proceso de migración, consulte Migración de MongoDB a Amazon DocumentDB en la Guía de migración paso a paso de AWS Database Migration Service.

Asignación de datos desde un origen a un destino de Amazon DocumentDB

AWS DMS lee los registros del punto de enlace de origen y crea documentos JSON en función de los datos que lee. Para cada documento JSON, AWS DMS debe determinar un campo _id que actúe como un identificador único. A continuación, escribe el documento JSON en una recopilación de Amazon DocumentDB, con el campo _id como clave principal.

Datos de origen que están en una sola columna

Si los datos de origen constan de una única columna, deben ser del tipo cadena. (En función del motor de origen, el tipo de datos real puede ser VARCHAR, NVARCHAR, TEXTO, LOB, CLOB o similar). AWS DMS presupone que los datos son un documento JSON válido y replica los datos en Amazon DocumentDB tal como están.

Si el documento JSON resultante contiene un campo llamado _id, entonces se utiliza ese campo como el _id único en Amazon DocumentDB.

Si JSON no contiene un campo _id, Amazon DocumentDB genera un valor de _id automáticamente.

Datos de origen que están en varias columnas

Si los datos de origen constan de varias columnas, AWS DMS crea un documento JSON a partir de todas estas columnas. Para determinar el campo _id del documento, AWS DMS procede de la siguiente manera:

  • Si una de las columnas se llama _id, los datos de esa columna se utilizan como el _id de destino.

  • Si no hay ninguna columna _id, pero los datos de origen tienen una clave principal o un índice único, AWS DMS utiliza el valor de esa clave o índice como el valor de _id. Los datos de la clave principal o el índice único también aparecen como campos explícitos en el documento JSON.

  • Si no hay ninguna columna _id y tampoco hay una clave principal o un índice único, Amazon DocumentDB genera un valor de _id automáticamente.

Forzar un tipo de datos en el punto de enlace de destino

AWS DMS puede modificar las estructuras de datos cuando escribe en un punto de conexión de destino de Amazon DocumentDB. Puede solicitar estos cambios modificando los nombres de las columnas y las tablas en el punto de enlace de origen o proporcionando reglas de transformación que se apliquen cuando se ejecute una tarea.

Uso de un documento JSON anidado (json_ prefix)

Para forzar un tipo de datos, puede incluir el prefijo json_ en el nombre de la columna de origen (por ejemplo, json_columnName) manualmente o mediante una transformación. En este caso, la columna se crea como un documento JSON anidado dentro del documento de destino, en lugar de como un campo de cadena.

Suponga, por ejemplo, que desea migrar el siguiente documento desde un punto de enlace de origen de MongoDB.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}" }

Si no fuerza ningún tipo de datos de origen, el documento ContactDetails incrustado se migra como una cadena.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}" }

Sin embargo, puede añadir una regla de transformación para obligar a que ContactDetails sea un objeto JSON. Suponga, por ejemplo, que el nombre original de la columna de origen es ContactDetails. Para forzar el tipo de datos como JSON anidado, es necesario cambiar el nombre de la columna situada en el punto de conexión de origen a “json_ContactDetails”, agregando el prefijo “*json_*” a la fuente de forma manual o mediante reglas de transformación. Por ejemplo, puede usar la siguiente regla de transformación:

{ "rules": [ { "rule-type": "transformation", "rule-id": "1", "rule-name": "1", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "ContactDetails" }, "rule-action": "rename", "value": "json_ContactDetails", "old-value": null } ] }

AWS DMS replica el campo ContactDetails como JSON anidado, de la siguiente manera.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": { "Home": { "Address": "Boston", "Phone": "1111111111" }, "Work": { "Address": "Boston", "Phone": "2222222222" } } }

Uso de una matriz JSON (array_ prefix)

Para forzar un tipo de datos, puede incluir el prefijo array_ en el nombre de la columna (por ejemplo, array_columnName) manualmente o mediante una transformación. En este caso, AWS DMS considera la columna como una matriz JSON y la crea como tal en el documento de destino.

Suponga que desea migrar el siguiente documento desde un punto de enlace de origen de MongoDB.

{ "_id" : "1", "FirstName": "John", "LastName": "Doe",
 "ContactAddresses": ["Boston", "New York"],
 "ContactPhoneNumbers": ["1111111111", "2222222222"] }

Si no fuerza ningún tipo de datos de origen, el documento ContactDetails incrustado se migra como una cadena.

{ "_id": "1", "FirstName": "John", "LastName": "Doe",
 "ContactAddresses": "[\"Boston\", \"New York\"]",
 "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]"
 }

Sin embargo, puede añadir reglas de transformación para imponer el tipo de datos de matriz JSON a ContactAddress y ContactPhoneNumbers, tal y como se muestra en la siguiente tabla.

Nombre original de la columna de origen Nuevo nombre de la columna de origen
ContactAddress array_ContactAddress
ContactPhoneNumbers array_ContactPhoneNumbers

AWS DMS replica ContactAddress y ContactPhoneNumbers de la manera siguiente.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactAddresses": [ "Boston", "New York" ], "ContactPhoneNumbers": [ "1111111111", "2222222222" ] }

Conexión a Amazon DocumentDB mediante TLS

De forma predeterminada, un clúster de Amazon DocumentDB recién creado solo acepta conexiones seguras mediante la seguridad de la capa de transporte (TLS). Cuando TLS está habilitado, cada conexión a Amazon DocumentDB requiere una clave pública.

Puede recuperar la clave pública para Amazon DocumentDB descargando el archivo, rds-combined-ca-bundle.pem, desde un bucket de Amazon S3 alojado en AWS. Para obtener más información acerca de la descarga de este archivo, consulte Cifrado de conexiones mediante TLS en la Guía para desarrolladores de Amazon DocumentDB

Después de descargar este archivo .pem, puede importar la clave pública que contiene en AWS DMS como se describe a continuación.

AWS Management Console

Para importar el archivo de clave pública (.pem)
  1. Abra la consola de AWS DMS en https://console.aws.amazon.com/dms.

  2. En el panel de navegación, elija Certificates.

  3. Elija Import certificate (Importar certificado) y haga lo siguiente:

    • En Certificate identifier (Identificador del certificado), escriba un nombre único para el certificado (por ejemplo docdb-cert).

    • En Import file (Archivo de importación), desplácese hasta la ubicación en la que guardó el archivo .pem.

    Cuando los ajustes sean los deseados, elija Add new CA certificate (Añadir nuevo certificado de CA).

AWS CLI

Utilice el comando aws dms import-certificate, tal y como se muestra en el ejemplo siguiente.

aws dms import-certificate \ --certificate-identifier docdb-cert \ --certificate-pem file://./rds-combined-ca-bundle.pem

Cuando cree un punto de enlace de destino de AWS DMS, proporcione el identificador de certificado (por ejemplo, docdb-cert). A continuación, establezca el parámetro de modo de SSL en verify-full.

Conexión a los clústeres elásticos de Amazon DocumentDB como destino

En las versiones 3.4.7 y superiores de AWS DMS, puede crear un punto de conexión de destino de Amazon DocumentDB como un clúster elástico. Si crea el punto de conexión de destino como un clúster elástico, debe adjuntar un certificado SSL nuevo al punto de conexión de clúster elástico de Amazon DocumentDB, ya que el certificado SSL existente no funcionará.

Para adjuntar un certificado SSL nuevo al punto de conexión del clúster elástico de Amazon DocumentDB
  1. En un navegador, abra https://www.amazontrust.com/repository/SFSRootCAG2.pem y guarde el contenido en un archivo .pem con un nombre de archivo único, por ejemplo SFSRootCAG2.pem. Este es el archivo de certificado que debe importar en los pasos siguientes.

  2. Cree el punto de conexión del clúster elástico y establezca las siguientes opciones:

    1. En Configuración del punto de conexión, elija Agregar un nuevo certificado de entidad de certificación.

    2. En Identificador del certificado, escriba SFSRootCAG2.pem.

    3. Para Importar archivo de certificado, elija Elegir archivo, después acceda al archivo SFSRootCAG2.pem que descargó anteriormente.

    4. Seleccione y abra el archivo SFSRootCAG2.pem descargado.

    5. Seleccione Import certificate.

    6. En el menú desplegable Elegir un certificado, elija SFSRootCAG2.pem.

El nuevo certificado SSL del archivo SFSRootCAG2.pem descargado ahora está adjunto al punto de conexión del clúster elástico de Amazon DocumentDB.

Replicación continua con Amazon DocumentDB como destino

Si la replicación continua (captura de datos de cambio, CDC) está habilitada para Amazon DocumentDB como objetivo, las versiones 3.5.0 y superiores de AWS DMS proporcionan una mejora del rendimiento veinte veces mayor que las versiones anteriores. En versiones anteriores, AWS DMS gestiona hasta 250 registros por segundo, AWS DMS ahora gestiona aproximadamente 5000 registros por segundo. AWS DMS también garantiza que los documentos de Amazon DocumentDB permanecen sincronizados con el origen. Cuando se crea o actualiza un registro de origen, AWS DMS debe determinar primero qué registro de Amazon DocumentDB resultará afectado mediante el siguiente procedimiento:

  • Si el registro de origen tiene una columna denominada _id, el valor de esa columna determina el _id correspondiente en la recopilación de Amazon DocumentDB.

  • Si no hay ninguna columna _id, pero los datos de origen tienen una clave principal o un índice único, AWS DMS utiliza el valor de esa clave o índice como el _id para la recopilación de Amazon DocumentDB.

  • Si el registro de origen no tiene una columna _id, una clave principal ni un índice único, AWS DMS empareja todas las columnas de origen con los campos correspondientes de la recopilación de Amazon DocumentDB.

Cuando se crea un nuevo registro de origen, AWS DMS escribe un documento correspondiente en Amazon DocumentDB. Si se actualiza un registro de origen existente, AWS DMS actualiza los campos correspondientes del documento de destino de Amazon DocumentDB. Los campos que existen en el documento de destino pero no en el registro de origen se mantienen tal cual están.

Cuando se elimina un registro de origen, AWS DMS elimina el documento correspondiente de Amazon DocumentDB.

Cambios estructurales (DDL) en el origen

Con la replicación continua, todos los cambios realizados en las estructuras de datos de origen (como tablas, columnas, etc.) se propagan a los elementos correspondientes en Amazon DocumentDB. En las bases de datos relacionales, estos cambios se inician con instrucciones del lenguaje de definición de datos (DDL). Puede ver cómo AWS DMS propaga estos cambios a Amazon DocumentDB en la siguiente tabla.

DDL en el origen Efecto en el objetivo de Amazon DocumentDB
CREATE TABLE Crea una colección vacía.
Instrucción que cambia el nombre de una tabla (RENAME TABLE, ALTER TABLE...RENAME y similar) Cambia el nombre de la colección.
TRUNCATE TABLE Elimina todos los documentos de la colección, pero solo si HandleSourceTableTruncated es true. Para obtener más información, consulte Configuración de tareas para la administración de DDL del procesamiento de cambios.
DROP TABLE Elimina la colección, pero solo si HandleSourceTableDropped es true. Para obtener más información, consulte Configuración de tareas para la administración de DDL del procesamiento de cambios.
Instrucción que añade una columna a una tabla (ALTER TABLE...ADD y similar) La instrucción DDL se omite y se envía una advertencia. Cuando se ejecuta la primera instrucción INSERT en el origen, se añade el nuevo campo al documento de destino.
ALTER TABLE...RENAME COLUMN La instrucción DDL se omite y se envía una advertencia. Cuando se ejecuta la primera instrucción INSERT en el origen, el campo con el nuevo nombre se añade al documento de destino.
ALTER TABLE...DROP COLUMN La instrucción DDL se omite y se envía una advertencia.
Instrucción que cambia el tipo de datos de las columnas (ALTER COLUMN...MODIFY y similar) La instrucción DDL se omite y se envía una advertencia. Cuando se ejecuta la primera instrucción INSERT en el origen con el nuevo tipo de datos, se crea el documento de destino con un campo de ese nuevo tipo de datos.

Limitaciones para usar Amazon DocumentDB como destino

Al utilizar Amazon DocumentDB como destino de AWS DMS se aplican las siguientes restricciones:

  • En Amazon DocumentDB, los nombres de las recopilaciones no pueden incluir el símbolo del dólar ($). Además, los nombres de las bases de datos no pueden contener caracteres Unicode.

  • AWS DMS no permite combinar varias tablas de origen en una sola recopilación de Amazon DocumentDB.

  • Cuando AWS DMS procesa los cambios de una tabla de origen que no dispone de una clave principal, las columnas LOB de esa tabla se omiten.

  • Si la opción Change table (Tabla de cambios) está habilitada y AWS DMS encuentra una columna de origen llamada "_id", esa columna aparece como "__id" (con dos caracteres de subrayado) en la tabla de cambios.

  • Si elige Oracle como punto de enlace de origen, el origen de Oracle debe tener el registro suplementario completo habilitado. De lo contrario, si hay columnas en el origen que no han cambiado, los datos se cargan en Amazon DocumentDB como valores nulos.

  • La configuración de tareas de replicación, TargetTablePrepMode:TRUNCATE_BEFORE_LOAD no se admite para su uso con un punto de conexión de destino de DocumentDB.

Uso de la configuración de puntos de conexión con Amazon DocumentDB como destino

Puede utilizar la configuración de punto de conexión para configurar la base de datos de destino de Amazon DocumentDB de forma similar al uso de atributos de conexión adicionales. Se especifican los ajustes cuando se crea el punto de conexión de destino mediante la consola de AWS DMS o mediante el comando create-endpoint en la AWS CLI, con la sintaxis JSON --doc-db-settings '{"EndpointSetting": "value", ...}'.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Amazon DocumentDB como destino.

Nombre de atributo Valores válidos Valor predeterminado y descripción

replicateShardCollections

booleano

true

false

Cuando se establece en true, esta configuración de punto de conexión tiene los siguientes efectos e impone las siguientes limitaciones:

  • Se permite AWS DMS para replicar datos en recopilaciones de particiones de destino. Esta configuración solo se aplica si el punto de conexión de DocumentDB de destino es un clúster elástico.

  • Debe establecer TargetTablePrepMode en DO_NOTHING.

  • AWS DMS establece automáticamente useUpdateLookup en false durante la migración.

Tipos de datos de destino de Amazon DocumentDB

En la tabla siguiente, puede encontrar los tipos de datos de destino de Amazon DocumentDB que se admiten cuando se utiliza AWS DMS y la asignación predeterminada de los tipos de datos de AWS DMS. Para obtener más información sobre los tipos de datos de AWS DMS, consulte Tipos de datos de AWS Database Migration Service.

Tipo de datos de AWS DMS

Tipo de datos de Amazon DocumentDB

BOOLEANO

Booleano

BYTES

Datos binarios

DATE

Fecha

TIME

Cadena (UTF8)

DATETIME

Fecha

INT1

Entero de 32 bits

INT2

Entero de 32 bits

INT4

Entero de 32 bits

INT8

Entero de 64 bits

NUMERIC

Cadena (UTF8)

REAL4

Doble

REAL8

Doble

STRING

Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se corresponden con una cadena (UTF8).

UINT1

Entero de 32 bits

UINT2

Entero de 32 bits

UINT4

Entero de 64 bits

UINT8

Cadena (UTF8)

WSTRING

Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se corresponden con una cadena (UTF8).

BLOB

Binario

CLOB

Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se corresponden con una cadena (UTF8).

NCLOB

Si los datos se reconocen como JSON, AWS DMS los migra a Amazon DocumentDB como un documento. De lo contrario, los datos se corresponden con una cadena (UTF8).