108 votes

Duplication plus rapide du compartiment s3

J'ai essayé de trouver un meilleur outil en ligne de commande pour dupliquer des buckets que s3cmd. s3cmd peut dupliquer des buckets sans avoir à télécharger et téléverser chaque fichier. La commande que j'exécute normalement pour dupliquer des buckets en utilisant s3cmd est :

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

Cela fonctionne, mais c'est très lent car il copie chaque fichier via l'API un par un. Si s3cmd pouvait fonctionner en mode parallèle, je serais très heureux.

Y a-t-il d'autres options disponibles en tant qu'outils en ligne de commande ou du code que les gens utilisent pour dupliquer des buckets plus rapidement que s3cmd ?

Édition : On dirait que s3cmd-modification est exactement ce que je recherche. Dommage que cela ne fonctionne pas. Y a-t-il d'autres options ?

182voto

adamp Points 196

L'AWS CLI semble faire parfaitement le travail, et a l'avantage d'être un outil officiellement supporté.

aws s3 sync s3://monbucket s3://backup-monbucket

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

Prend en charge les transferts simultanés par défaut. Voir http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests

Pour transférer rapidement un grand nombre de petits fichiers, exécutez le script à partir d'une instance EC2 pour réduire la latence, et augmentez max_concurrent_requests pour réduire l'impact de la latence. Par exemple:

aws configure set default.s3.max_concurrent_requests 200

75voto

deadwards Points 592

Si cela ne vous dérange pas d'utiliser la console AWS, vous pouvez :

  1. Sélectionner tous les fichiers/dossiers dans le premier seau
  2. cliquer sur Actions > Copier
  3. Créer un nouveau seau et le sélectionner
  4. cliquer sur Actions > Coller

C'est toujours assez lent, mais vous pouvez le laisser tranquille et le laisser faire son travail.

29voto

Ketil Points 291

J'ai essayé de cloner deux buckets en utilisant la console web AWS, le s3cmd et l'AWS CLI. Bien que ces méthodes fonctionnent la plupart du temps, elles sont douloureusement lentes.

Ensuite, j'ai trouvé s3s3mirror : un outil spécialisé pour synchroniser deux buckets S3. Il est multi-thread et beaucoup plus rapide que les autres méthodes que j'ai essayées. J'ai rapidement déplacé des giga-octets de données d'une région AWS à une autre.

Découvrez-le sur https://github.com/cobbzilla/s3s3mirror, ou téléchargez un conteneur Docker depuis https://registry.hub.docker.com/u/pmoust/s3s3mirror/

12voto

Tom Lime Points 139

Pour une solution ad hoc, utilisez aws cli pour synchroniser entre des buckets :

La vitesse de synchronisation de aws s3 sync dépend de :
- la latence pour un appel API à l'endpoint S3
- la quantité d'appels API effectués en parallèle

Pour augmenter la vitesse de synchronisation :
- exécutez aws s3 sync à partir d'une instance AWS (c3.large sur FreeBSD est OK ;-) )
- mettez à jour ~/.aws/config avec :
-- max_concurrent_requests = 128
-- max_queue_size = 8096

Avec la configuration et le type d'instance suivants, j'ai pu synchroniser un bucket (309 Go, 72 000 fichiers, us-east-1) en 474 secondes.

Pour une solution plus générique, envisagez - AWS DataPipeLine ou la réplication inter-région S3.

3voto

NetwOrchestration Points 2965

Comme il s'agit du premier hit de Google sur ce sujet, ajoutons des informations supplémentaires.

'Cyno' a fait une nouvelle version de s3cmd-modification, qui prend désormais en charge la synchronisation entre les buckets en parallèle. Exactement ce que j'attendais également.

La demande de tirage se trouve à https://github.com/pcorliss/s3cmd-modification/pull/2, sa version à https://github.com/pearltrees/s3cmd-modification

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X