Utilisation d'Amazon DocumentDB en tant que cible pour AWS Database Migration Service - AWS Service de Migration de Base de Données

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation d'Amazon DocumentDB en tant que cible pour AWS Database Migration Service

Pour en savoir plus sur les versions d'Amazon DocumentDB (compatible avec MongoDB) prises en charge par AWS DMS, consultez Objectifs pour AWS DMS. Vous pouvez utiliser AWS DMS pour migrer des données vers Amazon DocumentDB (compatible avec MongoDB) à partir de tout moteur de données source pris en charge par AWS DMS. Le moteur source peut se trouver sur un service géré par AWS tel qu'Amazon RDS, Aurora ou Amazon S3. Le moteur peut également se trouver sur une base de données autogérée, telle que MongoDB, qui s'exécute sur Amazon EC2 ou sur site.

Vous pouvez utiliser AWS DMS pour répliquer des données source dans les bases de données, les collections ou les documents Amazon DocumentDB.

Note

Si votre point de terminaison source est MongoDB ou Amazon DocumentDB, exécutez la migration en mode document.

MongoDB stocke les données au format JSON binaire (BSON). AWS DMS prend en charge tous les types de données BSON qui sont pris en charge par Amazon DocumentDB. Pour obtenir la liste de ces types de données, consultez API, opérations et types de données MongoDB pris en charge dans le Guide du développeur Amazon DocumentDB.

Si le point de terminaison source est une base de données relationnelle, AWS DMS mappe les objets de base de données à Amazon DocumentDB comme suit :

  • Une base de données relationnelle, ou schéma de base de données, est mappée à une base de données Amazon DocumentDB.

  • Les tables situées dans une base de données relationnelle sont mappées à des collections dans Amazon DocumentDB.

  • Les enregistrements situés dans une table relationnelle sont mappés à des documents dans Amazon DocumentDB. Chaque document est construit à partir de données de l'enregistrement source.

Si le point de terminaison source est Amazon S3, les objets Amazon DocumentDB résultants correspondent aux règles de mappage AWS DMS pour Amazon S3. Prenons l'exemple de l'URI suivant :

s3://mybucket/hr/employee

Dans ce cas, AWS DMS mappe les objets de mybucket à Amazon DocumentDB comme suit :

  • La partie supérieure de l'URI (hr) est mappée à une base de données Amazon DocumentDB.

  • La partie suivante de l'URI (employee) est mappée à une collection Amazon DocumentDB.

  • Chaque objet de employee est mappé à un document dans Amazon DocumentDB.

Pour plus d'informations sur les règles de mappage pour Amazon S3, consultez Utilisation d'Amazon S3 en tant que source pour AWS DMS.

Paramètres de point de terminaison Amazon DocumentDB

Dans AWS DMS versions 3.5.0 et ultérieures, vous pouvez améliorer les performances de capture des données de modification (CDC) pour les points de terminaison Amazon DocumentDB en ajustant les paramètres de tâche des threads parallèles et des opérations en bloc. Pour ce faire, vous pouvez spécifier le nombre de threads simultanés, les files d'attente par thread et le nombre d'enregistrements à stocker dans un tampon à l'aide de la tâche ParallelApply*. Par exemple, supposons que vous souhaitiez effectuer un chargement CDC et appliquer 128 threads en parallèle. Vous souhaitez également accéder à 64 files d'attente par thread, avec 50 enregistrements stockés par tampon.

Pour accroître les performances de la fonctionnalité CDC, AWS DMS prend en charge les paramètres de tâche suivants :

  • ParallelApplyThreads : spécifie le nombre de threads simultanés utilisés par AWS DMS pendant un chargement CDC pour transférer des enregistrements de données vers un point de terminaison cible Amazon DocumentDB. La valeur par défaut est zéro (0) et la valeur maximale est 32.

  • ParallelApplyBufferSize : spécifie le nombre maximal d'enregistrements à stocker dans chaque file d'attente de mémoire tampon pour que les threads simultanés soient transférés vers un point de terminaison cible Amazon DocumentDB lors d'un chargement CDC. La valeur par défaut est 100 et la valeur maximale est 1 000. Utilisez cette option lorsque ParallelApplyThreads spécifie plusieurs threads.

  • ParallelApplyQueuesPerThread : spécifie le nombre de files d'attente auxquelles chaque thread accède pour extraire les enregistrements de données des files d'attente et générer un chargement par lots pour un point de terminaison Amazon DocumentDB pendant la CDC. La valeur par défaut est 1. La valeur maximale est 512.

Pour plus de détails sur l'utilisation d'Amazon DocumentDB en tant que cible pour AWS DMS, consultez les sections suivantes :

Note

Pour une présentation détaillée du processus de migration, consultez Migration de MongoDB vers Amazon DocumentDB dans le guide de migration étape par étape d'AWS Database Migration Service.

Mappage de données d'une source vers une cible Amazon DocumentDB

AWS DMS lit les enregistrements du point de terminaison source et crée des documents JSON en fonction des données lues. Pour chaque document JSON, AWS DMS doit déterminer un champ _id faisant office d'identifiant unique. Il écrit ensuite le document JSON dans une collection Amazon DocumentDB en utilisant le champ _id comme clé primaire.

Données source se composant d'une colonne unique

Si les données source se composent d'une seule colonne, elles doivent être de type string (chaîne). (En fonction du moteur source, le type de données réel peut être VARCHAR, NVARCHAR, TEXT, LOB, CLOB, etc.). AWS DMS suppose que les données sont un document JSON valide et les réplique telles quelles sur Amazon DocumentDB.

Si le document JSON résultant contient un champ nommé _id, ce dernier est utilisé comme _id unique dans Amazon DocumentDB.

Si le document JSON ne contient pas de champ _id, Amazon DocumentDB génère une valeur _id automatiquement.

Données source se composant de plusieurs colonnes

Si les données source se composent de plusieurs colonnes, AWS DMS crée un document JSON à partir de l'ensemble de ces colonnes. Pour déterminer le champ _id du document, AWS DMS procède comme suit :

  • Si l'une des colonnes est nommée _id, les données de cette colonne sont utilisées comme _id cible.

  • S'il n'y a pas de colonne _id, mais que les données source comportent une clé primaire ou un index unique, AWS DMS utilise cette valeur de clé ou d'index comme valeur _id. Les données de la clé primaire ou de l'index unique apparaissent également sous forme de champs explicites dans le document JSON.

  • S'il n'y a pas de colonne _id et aucune clé primaire ni aucun index unique, Amazon DocumentDB génère une valeur _id automatiquement.

Imposition d'un type de données au niveau du point de terminaison cible

AWS DMS peut modifier les structures de données lors de l'écriture sur un point de terminaison cible Amazon DocumentDB. Vous pouvez demander ces modifications en renommant des colonnes et des tables au niveau du point de terminaison source ou en fournissant des règles de transformation qui sont appliquées lorsqu'une tâche est en cours d'exécution.

Utilisation d'un document JSON imbriqué (préfixe json_)

Pour imposer un type de données, vous pouvez préfixer le nom de colonne source avec json_ (c'est-à-dire, json_columnName), manuellement ou à l'aide d'une transformation. Dans ce cas, la colonne est créée sous la forme d'un document JSON imbriqué dans le document cible, plutôt que sous la forme d'un champ de chaîne.

Par exemple, supposons que vous souhaitiez migrer le document suivant à partir d'un point de terminaison source MongoDB.

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

Si vous n'imposez aucun des types de données source, le document ContactDetails imbriqué est migré sous la forme d'une chaîne.

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

Toutefois, vous pouvez ajouter une règle de transformation pour contraindre l'insertion de ContactDetails dans un objet JSON. Par exemple, supposons que le nom de la colonne source d'origine est ContactDetails. Pour forcer à appliquer le type de données JSON imbriqué, la colonne du point de terminaison source doit être renommée « json_ContactDetails », soit en ajoutant manuellement le préfixe « *json_* » sur la source, soit par le biais de règles de transformation. Par exemple, vous pouvez utiliser la règle de transformation ci-dessous :

{ "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 réplique le champ ContactDetails au format JSON imbriqué, comme suit.

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

Utilisation d'un tableau JSON (préfixe array_)

Pour imposer un type de données, vous pouvez préfixer un nom de colonne avec array_ (c'est-à-dire, array_columnName), manuellement ou à l'aide d'une transformation. Dans ce cas, AWS DMS considère la colonne comme un tableau JSON et le crée en tant que tel dans le document cible.

Supposons que vous souhaitiez migrer le document suivant à partir d'un point de terminaison source MongoDB.

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

Si vous n'imposez aucun des types de données source, le document ContactDetails imbriqué est migré sous la forme d'une chaîne.

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

Toutefois, vous pouvez ajouter des règles de transformation pour forcer l'insertion de ContactAddress et de ContactPhoneNumbers dans des tableaux JSON, comme illustré dans le tableau suivant.

Nom de la colonne source d'origine Colonne source renommée
ContactAddress array_ContactAddress
ContactPhoneNumbers array_ContactPhoneNumbers

AWS DMS réplique ContactAddress et ContactPhoneNumbers comme suit.

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

Connexion à Amazon DocumentDB à l'aide de TLS

Par défaut, un cluster Amazon DocumentDB récemment créé n'accepte que les connexions sécurisées qui utilisent le protocole TLS (Transport Layer Security). Lorsque TLS est activé, chaque connexion à Amazon DocumentDB nécessite une clé publique.

Vous pouvez récupérer la clé publique pour Amazon DocumentDB en téléchargeant le fichier rds-combined-ca-bundle.pem à partir d'un compartiment Amazon S3 hébergé par AWS. Pour plus d'informations sur le téléchargement de ce fichier, consultez Chiffrement des connexions à l'aide de TLS dans le Guide du développeur Amazon DocumentDB.

Après avoir téléchargé ce fichier .pem, vous pouvez importer la clé publique qu’il contient dans AWS DMS, comme décrit ci-dessous.

AWS Management Console

Pour importer le fichier de clé publique (.pem)
  1. Ouvrez la console AWS DMS à l'adresse https://console.aws.amazon.com/dms.

  2. Dans le volet de navigation, choisissez Certificates.

  3. Choisissez l'onglet Import certificate (Importer le certificat) et effectuez les opérations suivantes :

    • Pour Certificate identifier (Identifiant de certificat), entrez un nom unique pour le certificat, par exemple, docdb-cert.

    • Pour Import file (Importer un fichier), accédez à l'emplacement où vous avez enregistré le fichier .pem.

    Lorsque les paramètres vous conviennent, choisissez Add new CA certificate (Ajouter un nouveau certificat CA).

AWS CLI

Utilisez la commande aws dms import-certificate, comme illustré dans l'exemple suivant.

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

Lorsque vous créez un point de terminaison cible AWS DMS, fournissez l'identifiant de certificat (par exemple, docdb-cert). Définissez aussi le paramètre de mode SSL sur verify-full.

Connexion aux clusters Elastic Amazon DocumentDB en tant que cible

Dans AWS DMS versions 3.4.7 et ultérieures, vous pouvez créer un point de terminaison cible Amazon DocumentDB en tant que cluster Elastic. Si vous créez votre point de terminaison cible en tant que cluster Elastic, vous devez attacher un nouveau certificat SSL au point de terminaison de votre cluster Elastic Amazon DocumentDB, car votre certificat SSL existant ne fonctionnera pas.

Pour attacher un nouveau certificat SSL au point de terminaison de votre cluster Elastic Amazon DocumentDB
  1. Dans un navigateur, ouvrez https://www.amazontrust.com/repository/SFSRootCAG2.pem et enregistrez le contenu dans un fichier .pem portant un nom de fichier unique, par exemple SFSRootCAG2.pem. Il s'agit du fichier de certificat que vous devrez importer lors des étapes suivantes.

  2. Créez le point de terminaison de cluster Elastic et définissez les options suivantes :

    1. Sous Configuration du point de terminaison, choisissez Ajouter un certificat CA.

    2. Pour Identifiant de certificat, entrez SFSRootCAG2.pem.

    3. Pour Importer un fichier de certificat, choisissez Choisir un fichier et accédez au fichier SFSRootCAG2.pem que vous avez téléchargé précédemment.

    4. Sélectionnez et ouvrez le fichier SFSRootCAG2.pem téléchargé.

    5. Sélectionnez Importer un certificat.

    6. Dans le menu déroulant Choisir un certificat, choisissez SFSRootCAG2.pem.

Le nouveau certificat SSL issu du fichier SFSRootCAG2.pem téléchargé est désormais attaché au point de terminaison de votre cluster Elastic Amazon DocumentDB.

Réplication continue avec Amazon DocumentDB en tant que cible

Si la réplication continue (capture des données de modification, CDC) est activée pour Amazon DocumentDB en tant que cible, AWS DMS versions 3.5.0 et ultérieures fournit une amélioration des performances vingt fois supérieure à celle des versions précédentes. Dans les versions précédentes où AWS DMS gérait jusqu'à 250 enregistrements par seconde, AWS DMS gère désormais environ 5 000 enregistrements/seconde. AWS DMS garantit également que les documents d'Amazon DocumentDB restent synchronisés avec la source. Lorsqu'un enregistrement source est créé ou mis à jour, AWS DMS doit d'abord déterminer quel enregistrement Amazon DocumentDB est affecté en procédant comme suit :

  • Si l'enregistrement source comporte une colonne nommée _id, la valeur de cette colonne détermine la valeur _id correspondante dans la collection Amazon DocumentDB.

  • S'il n'y a pas de colonne _id, mais que les données source comportent une clé primaire ou un index unique, AWS DMS utilise cette valeur de clé ou d'index comme valeur _id pour la collection Amazon DocumentDB.

  • Si l'enregistrement source ne comporte pas de colonne _id, ni de clé primaire ou d'index unique, AWS DMS fait correspondre toutes les colonnes source avec les champs correspondants dans la collection Amazon DocumentDB.

Lorsqu'un nouvel enregistrement source est créé, AWS DMS écrit un document correspondant dans Amazon DocumentDB. Si un enregistrement source existant est mis à jour, AWS DMS met à jour les champs correspondants du document cible dans Amazon DocumentDB. Tous les champs qui existent dans le document cible, mais pas dans l'enregistrement source, restent intacts.

Lorsqu'un enregistrement source est supprimé, AWS DMS supprime le document correspondant d'Amazon DocumentDB.

Modifications structurelles (DDL) à la source

Avec la réplication continue, les modifications des structures de données source (telles que les tables, colonnes, etc.) sont propagées à leurs homologues dans Amazon DocumentDB. Dans les bases de données relationnelles, ces modifications sont lancées à l'aide d'instructions DDL (Data Definition Language). Vous pouvez voir la façon dont AWS DMS propage ces modifications dans Amazon DocumentDB dans le tableau suivant.

DDL à la source Effet sur la cible Amazon DocumentDB
CREATE TABLE Crée une collection vide.
Déclaration qui renomme une table (RENAME TABLE, ALTER TABLE...RENAME, etc.) Renomme la collection.
TRUNCATE TABLE Supprime tous les documents de la collection, mais uniquement si HandleSourceTableTruncated a pour valeur true. Pour de plus amples informations, veuillez consulter Paramètres de tâche pour la gestion du DDL de traitement des modifications.
DROP TABLE Supprime la collection, mais uniquement si HandleSourceTableDropped a pour valeur true. Pour de plus amples informations, veuillez consulter Paramètres de tâche pour la gestion du DDL de traitement des modifications.
Instruction qui ajoute une colonne à une table (ALTER TABLE...ADD, etc.) L'instruction DDL est ignorée et un avertissement est émis. Lorsque la première instruction INSERT est exécutée à la source, le nouveau champ est ajouté au document cible.
ALTER TABLE...RENAME COLUMN L'instruction DDL est ignorée et un avertissement est émis. Lorsque la première instruction INSERT est exécutée à la source, le nouveau champ est ajouté au document cible.
ALTER TABLE...DROP COLUMN L'instruction DDL est ignorée et un avertissement est émis.
Déclaration qui modifie le type de données de la colonne (ALTER COLUMN...MODIFY, etc.) L'instruction DDL est ignorée et un avertissement est émis. Lorsque la première instruction INSERT est exécutée à la source avec le nouveau type de données, le document cible est créé avec un champ ayant ce nouveau type de données.

Limitations de l'utilisation d'Amazon DocumentDB en tant que cible

Les limitations suivantes s'appliquent lorsque vous utilisez Amazon DocumentDB en tant que cible pour AWS DMS :

  • Dans Amazon DocumentDB, les noms de collection ne peuvent pas contenir le symbole du dollar ($). En outre, les noms de base de données ne peuvent pas contenir de caractères Unicode.

  • AWS DMS ne prend pas en charge la fusion de plusieurs tables source dans une seule collection Amazon DocumentDB.

  • Lorsque AWS DMS traite les modifications provenant d'une table source qui ne possède pas de clé primaire, les colonnes LOB de cette table sont ignorées.

  • Si l'option Change table (Modifier la table) est activée et que AWS DMS rencontre une colonne source nommée « _id », cette colonne apparaît sous la forme « __id » (deux traits de soulignement) dans la table modifiée.

  • Si vous choisissez Oracle comme point de terminaison source, une journalisation supplémentaire complète doit être activée sur la source Oracle. Dans le cas contraire, s'il existe des colonnes à la source qui n'ont pas été modifiées, les données seront chargées dans Amazon DocumentDB tant que valeurs nulles.

  • Le paramètre de tâche de réplication TargetTablePrepMode:TRUNCATE_BEFORE_LOAD n'est pas pris en charge pour une utilisation avec un point de terminaison cible DocumentDB.

Utilisation des paramètres de point de terminaison avec Amazon DocumentDB en tant que cible

Vous pouvez utiliser des paramètres de point de terminaison pour configurer la base de données cible Amazon DocumentDB comme si vous utilisiez des attributs de connexion supplémentaires. Vous spécifiez les paramètres lorsque vous créez le point de terminaison cible à l'aide de la console AWS DMS ou à l'aide de la commande create-endpoint dans AWS CLI, avec la syntaxe JSON --doc-db-settings '{"EndpointSetting": "value", ...}'.

Les paramètres de point de terminaison que vous pouvez utiliser avec Amazon DocumentDB en tant que cible sont indiqués dans le tableau suivant.

Nom d'attribut Valeurs valides Valeur par défaut et description

replicateShardCollections

boolean

true

false

Lorsque ce paramètre de point de terminaison est défini sur true, il a les effets suivants et impose les limitations suivantes :

  • AWS DMS est autorisé à répliquer les données vers des collections de partitions cibles. Ce paramètre n'est applicable que si le point de terminaison DocumentDB cible est un cluster Elastic.

  • Vous devez définir TargetTablePrepMode sur DO_NOTHING.

  • AWS DMS définit automatiquement useUpdateLookup sur false pendant la migration.

Types de données cibles pour Amazon DocumentDB

Dans le tableau suivant, vous trouverez les types de données cibles Amazon DocumentDB qui sont pris en charge lorsque vous utilisez AWS DMS et le mappage par défaut à partir des types de données AWS DMS. Pour plus d'informations sur les types de données AWS DMS, consultez Types de données pour AWS Database Migration Service.

Type de données AWS DMS

Type de données Amazon DocumentDB

BOOLEAN

Booléen

BYTES

Données binaires

DATE

Date

TIME

Chaîne (UTF8)

DATETIME

Date

INT1

Entier 32 bits

INT2

Entier 32 bits

INT4

Entier 32 bits

INT8

Entier 64 bits

NUMERIC

Chaîne (UTF8)

REAL4

Double

REAL8

Double

CHAÎNE

Si les données sont reconnues comme étant au format JSON, AWS DMS les migre vers Amazon DocumentDB sous la forme d'un document. Dans le cas contraire, les données sont mappées au format Chaîne (UTF8).

UINT1

Entier 32 bits

UINT2

Entier 32 bits

UINT4

Entier 64 bits

UINT8

Chaîne (UTF8)

WSTRING

Si les données sont reconnues comme étant au format JSON, AWS DMS les migre vers Amazon DocumentDB sous la forme d'un document. Dans le cas contraire, les données sont mappées au format Chaîne (UTF8).

BLOB

Binaire

CLOB

Si les données sont reconnues comme étant au format JSON, AWS DMS les migre vers Amazon DocumentDB sous la forme d'un document. Dans le cas contraire, les données sont mappées au format Chaîne (UTF8).

NCLOB

Si les données sont reconnues comme étant au format JSON, AWS DMS les migre vers Amazon DocumentDB sous la forme d'un document. Dans le cas contraire, les données sont mappées au format Chaîne (UTF8).