web-dev-qa-db-fra.com

Duplication plus rapide du bucket s3

J'ai essayé de trouver un meilleur outil de ligne de commande pour la duplication de compartiments que s3cmd . s3cmd peut dupliquer des compartiments sans avoir à télécharger et télécharger chaque fichier. La commande que j'exécute normalement pour dupliquer des compartiments à l'aide de 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 pourrait fonctionner en mode parallèle, je serais très heureux.

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

Edit: On dirait que s3cmd-modification est exactement ce que je recherche. Dommage que cela ne fonctionne pas. Il y a-t-il des alternatives?

86
Sean McCleary

L'AWS CLI semble parfaitement faire le travail et a l'avantage d'être un outil officiellement pris en charge.

aws s3 sync s3://mybucket s3://backup-mybucket

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 augmenter max_concurrent_requests pour réduire l'impact de la latence. Par exemple:

aws configure set default.s3.max_concurrent_requests 200
146
python1981

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

  1. Sélectionnez tous les fichiers/dossiers dans le premier compartiment
  2. Cliquez sur Actions> Copier
  3. Créez un nouveau compartiment et sélectionnez-le
  4. Cliquez sur Actions> Coller

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

65
deadwards

J'ai essayé de cloner deux compartiments à l'aide de la console Web AWS, le s3cmd et l'AWS CLI. Bien que ces méthodes fonctionnent la plupart du temps, elles sont douloureusement lentes.

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

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

23
Ketil

Pour une solution adhoc, utilisez aws cli pour synchroniser entre les compartiments:

aws s3 sync la vitesse dépend de:
- latence pour un appel API au point de terminaison S3
- nombre d'appels d'API effectués simultanément

Pour augmenter la vitesse de synchronisation:
- courir 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 le bucket (309 Go, 72 000 fichiers, us-east-1) en 474 secondes.

Pour une solution plus générique, envisagez la réplication entre régions AWS DataPipeLine ou S3.

9
Tom Lime

Comme il s'agit du premier succès de Google sur ce sujet, l'ajout d'informations supplémentaires.

'Cyno' a créé une nouvelle version de s3cmd-modification, qui prend désormais en charge la synchronisation parallèle de bucket à bucket. Exactement ce que j'attendais aussi.

La demande d'extraction est à https://github.com/pcorliss/s3cmd-modification/pull/2 , sa version à https://github.com/pearltrees/s3cmd-modification

3

Je ne connais aucun autre outil de ligne de commande S3 mais si rien ne vient ici, il pourrait être plus facile d'écrire le vôtre.

Choisissez la langue et le kit de développement logiciel Amazon SDK que vous préférez. Il vous suffit ensuite de lister/récupérer le contenu du bucket source et de copier chaque fichier (en parallèle évidemment)

En regardant la source de s3cmd-modification (et j'avoue que je ne sais rien de python), il semble qu'ils n'aient pas mis en parallèle le code bucket-to-bucket mais peut-être pourriez-vous utiliser le téléchargement/téléchargement standard code parallèle comme point de départ pour ce faire.

3
Geoff Appleford