Comment puis-je transférer mes tables DynamoDB d'un compte AWS à un autre ?

Date de la dernière mise à jour : 17/05/2022

Je souhaite transférer 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 procédant comme suit :

  1. Exportez les données de la table DynamoDB dans un compartiment Amazon Simple Storage Service (Amazon S3) dans l'autre compte.
  2. Utilisez une tâche AWS Glue pour importer les données.
  3. Utilisez une tâche ETL AWS Glue pour lire dans votre table DynamoDB, puis écrire les données dans la table DynamoDB d'un autre compte.
    Remarque : les tâches ETL AWS Glue prennent en charge l'accès interrégion et intercompte aux tables DynamoDB.

Vous pouvez utiliser AWS Data Pipeline ou Amazon EMR pour déplacer des tables DynamoDB vers un autre compte AWS. Data Pipeline fournit la méthode la plus simple pour déplacer les tables, mais elle offre moins d'options de personnalisation. Amazon EMR est un meilleur choix pour les utilisateurs ayant une meilleure expertise technique et qui souhaitent plus de contrôle sur le processus.

Solution

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. Pour plus d'informations, reportez-vous à Exportation de données de table DynamoDB vers Amazon S3.

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, reportez-vous à 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ère automatiquement le code PySpark en fonction de ces entrées. Pour cette tâche, spécifiez la table AWS Glue Data Catalog comme source et ApplyMapping 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 ne sont pas corrects, 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'ajout 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 transférer 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 Réplication intercompte avec Amazon DynamoDB.

Accès intercompte à une table DynamoDB à l'aide d'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 intercompte et interrégion aux tables DynamoDB.

Data Pipeline

Pour déplacer une table DynamoDB vers un autre compte à l'aide de Data Pipeline, reportez-vous à Comment puis-je utiliser Data Pipeline pour sauvegarder une table DynamoDB dans un compartiment S3 situé dans un compte différent ?

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.

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 pour vous 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 :

  1. Lancez les clusters EMR dans les comptes source et destination. 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 ?