Comment effectuer une migration de mes tables Amazon DynamoDB d'un compte AWS à un autre ?

Dernière mise à jour : 02/09/2022

Je souhaite migrer une table Amazon DynamoDB vers un autre compte.

Brève description

Vous pouvez effectuer la migration de vos tables DynamoDB vers un autre compte AWS en choisissant l'une des méthodes suivantes, en fonction de votre cas d'utilisation :

  • AWS Backup
  • Importation et exportation de DynamoDB vers Amazon Simple Storage Service (Amazon S3)
  • Amazon S3 et AWS Glue
  • AWS Data Pipeline
  • Amazon EMR

Solution

AWS Backup

Vous pouvez utiliser AWS Backup pour créer des sauvegardes DynamoDB entre comptes. Pour plus d'informations, consultez Création de copies de sauvegarde sur les comptes AWS et AWS Backup Demo : Cross-Account & Cross-Region Backup (Sauvegardes inter-comptes et inter-régions).

Dans le compte cible, procédez comme suit :

  1. Créez un coffre-fort AWS Backup dans le compte cible de la région où se trouve votre DynamoDB.
  2. Lorsque vous créez le coffre-fort, utilisez la clé AWS Key Management Service (AWS KMS) que vous avez préalablement configurée. Il s'agit de la clé que vous avez déjà partagée avec le compte source de la même organisation.
  3. Après création du coffre-fort, ajoutez une politique AWS Identity and Access Management (IAM) au coffre-fort. Celle-ci permet aux autres comptes de la même organisation d'effectuer des copies dans le coffre-fort. Vous pouvez le faire en sélectionnant l'option Autoriser l'accès à un coffre-fort de sauvegarde de l'organisation.

Dans le compte source, procédez comme suit :

  1. Dans le compte source où se situe votre DynamoDB, créez un coffre-fort AWS Backup, dans la région où les données de votre table doivent être migrées.
  2. Lorsque vous créez le coffre-fort, utilisez la clé AWS KMS que vous avez préalablement configurée. Il s'agit de la clé que vous avez partagée avec d'autres comptes de l'organisation.
  3. Ajoutez une politique IAM au coffre-fort qui permet à d'autres comptes de l'organisation de copier dans le coffre-fort. Vous pouvez le faire en sélectionnant l'option Vous pouvez le faire en sélectionnant l'option Autoriser l'accès à un coffre-fort de sauvegarde depuis l'organisation.
  4. Créez un plan de sauvegarde afin de générer des sauvegardes des tables DynamoDB du compte source vers le compte cible.
  5. Pour Back-up vault (coffre-fort de sauvegarde), assurez-vous de choisir le coffre-fort que vous avez créé dans le compte source.
  6. Ensuite, sélectionnez l'option Copier dans le coffre-fort d'un autre compte.
  7. Pour Assign resources (assigner des ressources), veillez à inclure les ressources dont vous avez besoin pour la sauvegarde. Vous pouvez choisir Inclure des types de ressources spécifiques.
  8. Pour Sélectionner des types de ressources spécifiques, sélectionnez DynamoDB. Vous pouvez choisir toutes les tables ou uniquement celles que vous souhaitez sauvegarder.

Dans le compte cible, procédez comme suit :

  1. Dans le compte cible, accédez au coffre-fort que vous avez créé.
    Comme vous pouvez le voir, les points de récupération sont similaires à ceux du compte source.
  2. Vous pouvez restaurer votre table DynamoDB dans le compte cible.

Remarque : concernant cette approche, les comptes source et cible doivent appartenir à la même organisation.

Importation et exportation de DynamoDB vers Amazon S3

  1. Migrez les données de la table DynamoDB en exportant la table vers un compartiment Amazon S3 du compte cible. Assurez-vous que DynamoDB dispose des autorisations s3:ListBucket pour ce compartiment S3. Assurez-vous que le compartiment S3 ne comporte aucune liste de contrôle d'accès qui refuse l'accès aux données exportées.
  2. Une fois l'exportation terminée, importez les données du compartiment S3 dans une nouvelle table du compte cible. Pour plus d'informations, consultez le Fonctionnement de l'importation de données DynamoDB vers Amazon S3.

Remarque : l'exportation de la table ne consomme aucune capacité de lecture sur celle-ci et n'a aucun impact sur les performances ou la disponibilité de la table. De plus, l'importation de la table ne consomme aucune capacité d'écriture. Par conséquent, vous n'avez pas besoin de capacité supplémentaire pendant le processus d'importation.

Amazon S3 et AWS Glue

Vous pouvez transférer votre table DynamoDB vers un autre compte AWS à l'aide d'un compartiment S3 et d'une tâche AWS Glue.

1. Vous pouvez effectuer la migration initiale de la table DynamoDB en exportant les tables vers un compartiment Amazon S3 de l'autre compte.

Lorsque vous exportez vos tables du compte A vers un compartiment S3 du compte B, les objets appartiennent toujours au compte A. Les utilisateurs AWS Identity Access Management (IAM) du compte B ne peuvent pas accéder aux objets par défaut. La fonction d'exportation n'écrit pas de données avec la liste de contrôle d'accès (ACL) bucket-owner-full-control. Pour contourner ce problème de propriété d'objet, incluez l'autorisation PutObjectAcl sur tous les objets exportés une fois l'exportation terminée. Cette astuce autorise l'accès à tous les objets exportés pour les propriétaires de compartiments dans le compte B. Pour plus d'informations, voir Pourquoi ne puis-je pas accéder à un objet qui a été chargé dans mon compartiment Amazon S3 par un autre compte AWS ?

2. Utilisez une tâche Glue pour lire les fichiers du compartiment S3 et les écrire dans la table DynamoDB cible. Après avoir exporté les données vers un compartiment S3 dans le compte cible comme indiqué à l'étape 1, procédez comme suit dans le compte cible :

Exécutez un analyseur AWS Glue sur les données dans Amazon S3. L'analyseur déduit le schéma et crée une table AWS Glue Data Catalog avec cette définition de schéma.

Utilisez AWS Glue Studio pour créer une tâche ETL. Une fois que vous avez spécifié une source, une transformation et une cible, AWS Glue Studio génèrera automatiquement le code PySpark en fonction de ces entrées. Pour cette tâche, spécifiez la table du Catalogue de données AWS Glue comme source et ApplyMApplyMapping comme transformation. Ne spécifiez pas de cible. AWS Glue Studio génère le code PySpark pour créer un DynamicFrame à partir de S3.

Assurez-vous que le nom de clé et le mappage du type de données du code généré par AWS Glue Studio sont corrects. Si les mappages sont incorrects, modifiez le code et corrigez-les. Comme vous n'avez pas précisé la cible lors de la création de la tâche AWS Glue, ajoutez une opération de collecteur similaire à la suivante dans cet exemple. L'inclusion de cette opération permet à la tâche d'écrire directement dans la table DynamoDB cible :

glueContext.write_dynamic_frame_from_options ( frame = Mapped, connection_type = "dynamodb", connection_options = { "dynamodb.region": "", "dynamodb.output.tableName": "", "dynamodb.throughput.write.percent": "1.0" } )

Pour charger les données dans la table cible, exécutez la tâche à partir d'AWS Glue Studio ou de la page Tâches de la console AWS Glue.

3. Après avoir exporté les tables vers le compartiment Amazon S3, utilisez les flux DynamoDB et AWS Lambda pour migrer les insertions de données et les mises à jour de la table source vers la table de destination d'un autre compte. Pour plus d'informations, consultez l'article Cross-account replication with Amazon DynamoDB.

AWS Glue

Les tâches ETL AWS Glue prennent en charge à la fois la lecture et l'écriture de données dans la table DynamoDB d'un autre compte. Utilisez le paramètre dynamodb.sts.roleArn pour assumer un rôle intercompte dans le script de tâche. En assumant ce rôle, vous pouvez obtenir les informations d'identification temporaires qui doivent être utilisées pour l'accès intercompte à DynamoDB. Pour plus d'informations, consultez Accès inter-comptes entre régions aux tables DynamoDB et Comment exporter une table Amazon DynamoDB vers Amazon S3 à l'aide d'AWS Step Functions et d'AWS Glue.

Data Pipeline

Pour transférer une table DynamoDB vers un autre compte à l'aide de Data Pipeline, vous pouvez également procéder comme suit :

  1. Exportez la table DynamoDB du compte source vers Amazon S3 dans le compte de destination.
  2. Importez les données exportées depuis le compartiment S3.

Pour plus d'informations, consultez Comment utiliser Data Pipeline pour sauvegarder une table DynamoDB dans un compartiment S3 situé dans un compte différent ? et Comment migrer les tables Amazon DynamoDB d'un compte AWS vers un autre avec AWS Data Pipeline.

Remarque : Le compte de destination ne peut pas accéder aux données DynamoDB dans le compartiment S3. Pour utiliser les données, restaurez-le dans une table DynamoDB. Data Pipeline propose la méthode la plus simple pour déplacer la table avec le moins d'effort manuel possible. Toutefois, les options de personnalisation sont moins nombreuses.

Amazon EMR

Lorsque vous utilisez Amazon EMR pour migrer des tables DynamoDB, vous disposez de deux options, selon votre cas d'utilisation :

  • Si vous pouvez vous permettre un temps d'arrêt pendant la migration, arrêtez les opérations d'écriture dans la table source. Cela permet de s'assurer que la table cible est synchronisée avec la table source.
  • Si vous ne pouvez pas vous permettre un temps d'arrêt, vous devez stocker toutes les transactions qui se produisent au cours de la migration dans une table intermédiaire. Une fois la table d'origine migrée vers l'autre compte AWS, déplacez les nouvelles transactions de la table intermédiaire vers la table cible.

Remarque : le temps requis pour migrer des tables avec Amazon EMR peut varier considérablement en fonction des performances du réseau, du débit provisionné de la table DynamoDB, de la quantité de données stockées dans la table, etc.

Pour migrer une table DynamoDB à l'aide d'Amazon EMR procédez comme suit :

  1. Lancez les clusters EMR dans les comptes source et cible. Dans la section Configuration du logiciel, choisissez une option qui inclut bien Apache Hive. Remarque : il est recommandé de lancer les clusters Amazon EMR dans des sous-réseaux privés. Les sous-réseaux privés doivent avoir un point de terminaison d'un VPC Amazon S3 et une route vers DynamoDB. Pour plus d'informations, reportez-vous à la section Sous-réseaux privés. Si les clusters doivent accéder à Internet, utilisez une passerelle NAT qui réside dans un sous-réseau public. Pour plus d'informations, reportez-vous à VPC avec des sous-réseaux publics et privés (NAT).
  2. Assurez-vous que les rôles IAM EMR_EC2_DefaultRole des deux comptes ont l'autorisation d'écrire dans le compartiment S3 du compte cible. Pour plus d'informations, reportez-vous à Configurer les rôles de service IAM pour les autorisations Amazon EMR sur les services et ressources AWS.
  3. Dans le compte source, connectez-vous au nœud maître à l'aide de SSH.
  4. Dans le compte source, utilisez les commandes Hive pour exporter les données de la table DynamoDB vers le compartiment S3 du compte de destination.
  5. Dans le compte de destination, importez les données Amazon S3 dans la nouvelle table DynamoDB.
  6. Si vous utilisez une table intermédiaire pour capturer les écritures qui se sont produites pendant la migration, répétez les étapes 4 et 5 de la table intermédiaire.

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?