Je suis à la recherche d'un outil pour m'aider à copier le contenu d'un compartiment AWS S3 dans un deuxième compartiment AWS S3 sans télécharger d'abord le contenu dans le système de fichiers local.
J'ai essayé d'utiliser l'option de copie de la console AWS S3, mais cela a entraîné l'absence de certains fichiers imbriqués.
J'ai essayé d'utiliser l'application Transmit (par Panic). La commande duplicate télécharge d'abord les fichiers sur le système local, puis les télécharge de nouveau dans le deuxième compartiment, ce qui est assez inefficace.
amazon-s3
copy
amazon-web-services
cnicolaou
la source
la source
aws configure set default.s3.max_concurrent_requests 200
Voir cet article pour plus de détails et d' options stackoverflow.com/questions/4663016/...Réponses:
Copie entre les compartiments S3
AWS (tout récemment) a publié une interface de ligne de commande pour la copie entre les buckets.
http://aws.amazon.com/cli/
Cela copiera d'un bucket cible vers un autre bucket.
Consultez la documentation ici: Documentation de la CLI S3
la source
A client error (PermanentRedirect) occurred when calling the ListObjects operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Un exemple simplifié utilisant le gem aws-sdk:
Si vous souhaitez effectuer la copie entre différents buckets, spécifiez le nom du bucket cible:
la source
Vous pouvez maintenant le faire depuis l'interface d'administration S3. Allez dans un seul compartiment, sélectionnez tous vos dossiers
actions->copy
. Ensuite, passez à votre nouveau seauactions->paste
.la source
C'est possible avec la gemme aws-sdk récente , voir l'exemple de code:
plus de détails: Comment copier un fichier dans des buckets à l'aide de la gemme aws-s3
la source
Copier entre des buckets dans différentes régions
La commande ci-dessus copie un fichier d'un compartiment en Europe (eu-west-1) vers le Japon (ap-Nord-Est-1). Vous pouvez obtenir le nom de code de la région de votre bucket avec cette commande:
À propos, il est facile d'utiliser Copier et Coller dans la console Web S3, mais il semble que le téléchargement du compartiment source dans le navigateur, puis le téléversement vers le compartiment de destination. Utiliser "aws s3" était beaucoup plus rapide pour moi.
la source
J'ai créé un exécutable Docker de l' outil s3s3mirror . Un utilitaire pour copier et mettre en miroir un compartiment AWS S3 vers un autre.
Il est threadé permettant une COPIE parallèle et très efficace en mémoire, il réussit là où s3cmd échoue complètement.
Usage:
Pour une liste complète des options, essayez:
la source
Consultez la documentation ci-dessous. Je suppose que c'est ce que vous recherchez. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
S3Interface de RightAws gem a une fonction de copie qui fait ce qui précède.
http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method
la source
J'imagine que vous avez probablement trouvé une bonne solution maintenant, mais pour d'autres qui rencontrent ce problème (comme je l'ai été récemment), j'ai conçu un utilitaire simple spécifiquement dans le but de mettre en miroir un compartiment S3 dans un autre dans une manière hautement simultanée, mais efficace en termes de CPU et de mémoire
C'est sur github sous une licence Apache ici: https://github.com/cobbzilla/s3s3mirror
Lorsque vous avez un très grand compartiment et que vous recherchez des performances maximales, cela vaut la peine d'essayer.
Si vous décidez d'essayer, faites-moi savoir si vous avez des commentaires.
la source
Si vous êtes dans le shell et que vous souhaitez copier plusieurs fichiers mais pas tous les fichiers: s3cmd cp --recursive s3: // BUCKET1 / OBJECT1 s3: // BUCKET2 [/ OBJECT2]
la source
J'ai écrit un script qui sauvegarde un compartiment S3: https://github.com/roseperrone/aws-backup-rake-task
J'utilise ceci dans une tâche de rake (pour une application Rails):
la source
J'entends qu'il y a un module de nœud pour cela si vous aimez javascript: p
À partir des documents knox-copy :
la source
J'ai été informé que vous pouvez également le faire en utilisant s3distcp sur un cluster EMR. Il est censé être plus rapide pour les données contenant de gros fichiers. Cela fonctionne assez bien sur de petits ensembles de données - mais j'aurais préféré une autre solution compte tenu de la courbe d'apprentissage qu'il a fallu pour configurer pour si peu de données (je n'ai jamais travaillé avec EMR auparavant).
Voici un lien de la documentation AWS: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
Mise à jour: pour le même ensemble de données, s3s3mirror était beaucoup plus rapide que s3distcp ou le cli AWS. Beaucoup plus facile à configurer aussi.
la source
Pour copier d'un compartiment S3 vers le même ou un autre compartiment S3 sans téléchargement vers local, c'est assez simple. Utilisez la commande shell ci-dessous.
Cela copiera tous les fichiers du
SourceFoldername
dossier du bucket source vers le dossier du bucket cibleTargetFoldername
. Dans le code ci - dessus, s'il vous plaît remplacerAccessKey
,SecurityKey
etExternalBucket
avec vos valeurs correspondantes.la source
hdfs
?depuis AWS cli https://aws.amazon.com/cli/ vous pouvez faire
aws s3 ls
- Cela listera tous les seaux S3aws cp --recursive s3://<source bucket> s3://<destination bucket>
- Cela copiera les fichiers d'un compartiment à un autreRemarque * Très utile lors de la création de compartiments de réplication interrégionale, en faisant ce qui précède, vos fichiers sont tous suivis et une mise à jour du fichier de la région source sera propagée vers le compartiment répliqué. Tout sauf les suppressions de fichiers sont synchronisés.
Pour CRR, assurez-vous que la gestion des versions est activée sur les buckets.
la source
Que diriez-vous de la
aws s3 sync
commande cli. aws s3 sync s3: // bucket1 / s3: // bucket2 /la source
Comme Neel Bhaat l'a expliqué dans ce blog , il existe de nombreux outils différents qui peuvent être utilisés à cette fin. Certains sont fournis par AWS, la plupart étant des outils tiers. Tous ces outils vous obligent à enregistrer votre clé de compte AWS et votre secret dans l'outil lui-même. Soyez très prudent lorsque vous utilisez des outils tiers, car les informations d'identification que vous enregistrez peuvent vous coûter la totalité de votre valeur et vous faire mourir.
Par conséquent, je recommande toujours d'utiliser l' AWS CLI à cette fin. Vous pouvez simplement l'installer à partir de ce lien . Ensuite, exécutez la commande suivante et enregistrez votre clé, vos valeurs secrètes dans AWS CLI.
Et utilisez la commande suivante pour synchroniser votre compartiment AWS S3 avec votre machine locale. (L'AWS CLI doit être installée sur la machine locale)
Exemples:
1) Pour AWS S3 vers le stockage local
2) Du stockage local à AWS S3
3) Du bucket AWS s3 vers un autre bucket
la source
La meilleure façon de copier le compartiment S3 consiste à utiliser l' AWS CLI .
Il implique ces 3 étapes:
Si vous copiez des buckets entre deux comptes AWS, vous devez attacher la stratégie correcte à chaque bucket.
Après cela, utilisez cette commande pour copier d'un compartiment à un autre.
Les détails des étapes 2 et 3 sont donnés dans ce lien:
la source
Vous pouvez écrire une application Java - peut-être même une application GUI SWING qui utilise les API Java AWS Pour copier des objets, voir -
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/CopyObject.java
la source