J'ai essayé de trouver un meilleur outil de ligne de commande pour dupliquer des buckets que s3cmd . s3cmd
peut dupliquer des buckets sans avoir à télécharger et télécharger chaque fichier. La commande que j'exécute normalement pour dupliquer des seaux à 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
pouvait fonctionner en mode parallèle, je serais très heureux.
Existe-t-il d'autres options disponibles en tant qu'outils de ligne de commande ou code que les gens utilisent pour dupliquer des buckets plus rapides que s3cmd
?
Edit: On dirait que s3cmd-modification est exactement ce que je recherche. Dommage que ça ne marche pas. Il y a-t-il des alternatives?
amazon-web-services
amazon-s3
Sean McCleary
la source
la source
Réponses:
AWS CLI semble parfaitement faire le travail et a l'avantage d'être un outil officiellement pris en charge.
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-la
max_concurrent_requests
pour réduire l'impact de la latence. Par exemple:la source
Si cela ne vous dérange pas d'utiliser la console AWS, vous pouvez:
C'est encore assez lent, mais vous pouvez le laisser seul et le laisser faire son travail.
la source
J'ai essayé de cloner deux buckets à l'aide de la console Web AWS,
s3cmd
et de l'AWS CLI. Bien que ces méthodes fonctionnent la plupart du temps, elles sont extrêmement 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.Découvrez-le sur https://github.com/cobbzilla/s3s3mirror ou téléchargez un conteneur Docker sur https://registry.hub.docker.com/u/pmoust/s3s3mirror/
la source
Pour une solution adhoc, utilisez
aws cli
pour synchroniser entre les buckets:aws s3 sync
la vitesse dépend:- de la latence d'un appel d'API vers un point de terminaison S3
- du nombre d'appels d'API effectués simultanément
Pour augmenter la vitesse de synchronisation:
- exécutez
aws s3 sync
depuis 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, 72K 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.
la source
awscli
doc -aws sync
copie uniquement les fichiers nouveaux et mis à jour. vous devriez probablement vous attendre à des performances élevées avecaws cp
(la copie est effectuée en interne, votre client émet simplement un appel API). les performances dépendent de ces facteurs: 1. latence entre les régions src et dst (par exemple, us-east-X vers us-west-X) 2. latence entre votre client et le point de terminaison d'API AWS (à quelle vitesse vous pouvez émettre un appel d'API) 3. quantité de requêtes simultanées (combien de requêtes par seconde votre client peut émettre). Dans mon cas, 309G a été copié entre des seaux dans la même région (us-east-1)Comme il s'agit du premier succès de Google sur ce sujet, ajouter des informations supplémentaires.
«Cyno» a créé une version plus récente de s3cmd-modification, qui prend désormais en charge la synchronisation parallèle de bucket-to-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
la source
Je ne connais aucun autre outil de ligne de commande S3, mais si rien ne se présente ici, il serait peut-être plus facile d'écrire le vôtre.
Choisissez la langue et Amazon SDK / Toolkit que vous préférez. Ensuite, il vous suffit 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'admets que je ne sais rien sur python), il semble qu'ils n'aient pas parallélisé le code bucket-to-bucket, mais vous pourriez peut-être utiliser le code parallèle standard de téléchargement / téléchargement comme point de départ pour fais ça.
la source
un simple
aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursive
fonctionne bien (en supposant que vous ayez la configuration aws cli)la source