web-dev-qa-db-fra.com

Copier la table dynamoDB sur un autre compte aws sans S3

Je voudrais copier toutes les tables dynamoDB sur un autre compte aws sans s3 pour enregistrer les données. J'ai vu des solutions pour copier une table avec un pipeline de données mais tous utilisent s3 pour sauvegarder les données. Je voudrais sauter l'étape s3 car la table contient une grande quantité de données, ce qui peut prendre du temps pour les processus d'écriture s3 et de lecture s3. J'ai donc besoin de copier directement la table d'un compte à un autre.

8
Akhil N

Si cela ne vous dérange pas d'utiliser Python et d'ajouter la bibliothèque boto3 (Sudo python -m pip install boto3), je le ferais comme ceci (je suppose que vous savez comment remplir les noms de clés, de régions et de tables dans le code, respectivement) :

import boto3
import os

dynamoclient = boto3.client('dynamodb', region_name='eu-west-1',
    aws_access_key_id='ACCESS_KEY_SOURCE',
    aws_secret_access_key='SECRET_KEY_SOURCE')

dynamotargetclient = boto3.client('dynamodb', region_name='us-west-1',
    aws_access_key_id='ACCESS_KEY_TARGET',
    aws_secret_access_key='SECRET_KEY_TARGET')

dynamopaginator = dynamoclient.get_paginator('scan')
tabname='SOURCE_TABLE_NAME'
targettabname='TARGET_TABLE_NAME'
dynamoresponse = dynamopaginator.paginate(
    TableName=tabname,
    Select='ALL_ATTRIBUTES',
    ReturnConsumedCapacity='NONE',
    ConsistentRead=True
)
for page in dynamoresponse:
    for item in page['Items']:
        dynamotargetclient.put_item(
            TableName=targettabname,
            Item=item
        )
19
Adam Owczarczyk

Essayez cette nodejsmodule

npm i copy-dynamodb-table
6
Ezzat

Sauvegarde et restauration simples pour Amazon DynamoDB à l'aide de boto

https://github.com/bchew/dynamodump

qui peut faire ce qui suit:

  • Sauvegarde/restauration sur une seule table
  • Sauvegarde/restauration de plusieurs tables
  • Sauvegarde/restauration de tables multiples, mais entre différents environnements (par exemple, des tables de production * à des tables de développement *)
  • Sauvegarder toutes les tables et restaurer uniquement les données (ne supprimera ni ne recréera le schéma)
  • Videz tous les schémas de table et créez-les (par exemple, en créant des tables vides dans un compte AWS différent)
  • Sauvegardez toutes les tables basées sur la balise AWS clé = valeur
  • Sauvegardez toutes les tables basées sur les balises AWS, compressez-les et stockez-les dans le compartiment S3 spécifié.
  • Restauration du compartiment S3 vers la table de destination spécifiée
5
RNA

La lecture et l’écriture sur S3 ne seront pas votre goulet d’étranglement.

Bien que la numérisation à partir de Dynamo soit très rapide, l'écriture des éléments dans la table de destination sera lente. Vous ne pouvez écrire que 1 000 éléments par seconde et par partition. Donc, je ne m'inquiéterais pas du stockage S3 intermédiaire.

Toutefois, Data Pipeline n’est pas non plus le moyen le plus efficace de copier une table dans une autre.

Si vous avez besoin de transferts rapides, votre meilleur choix est de mettre en œuvre votre propre solution. Configurez les tables de destination en fonction du débit de transfert souhaité (mais faites attention aux divisions de partition non souhaitées), puis écrivez une analyse parallèle à l'aide de plusieurs threads, qui écrit également dans la table de destination.

Il existe une implémentation open source en Java que vous pouvez utiliser comme point de départ dans le référentiel AWS Labs.

https://github.com/awslabs/dynamodb-cross-region-library

1
Mike Dinescu

Pour ce faire, vous pouvez utiliser DynamoDb Streams et Lambda. http://searchaws.techtarget.com/tip/DynamoDB-Streams-keep-database-tables-in-sync

0
Barbaros Alp