Meilleure façon de déplacer des fichiers entre S3?
Je voudrais copier des fichiers à partir d'une production seau pour un développement seau quotidien.
Par exemple:
Copie productionbucket/feed/feedname/date
pour developmentbucket/feed/feedname/date
Parce que les fichiers que je veux sont si profonds dans la structure de dossiers, c'est beaucoup trop de temps pour aller à chaque dossier et copier/coller.
J'ai joué avec le montage de disques de chaque compartiment et la rédaction d'un windows script de commandes, mais c'est très lent et il inutilement télécharge tous les fichiers/dossiers sur le serveur local et à nouveau de retour.
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Comme souligné par alberge (+1), aujourd'hui l'excellent Interface de Ligne de Commande AWS fournit le plus polyvalent approche pour interagir avec (presque) toutes les choses AWS - il pendant ce temps couvre la plupart des services et Api dispose également d' niveau supérieur S3 commandes pour traiter votre cas d'utilisation, en particulier, consultez le AWS CLI de référence pour les S3:
--exclude
,--include
et un préfixe de manutention etc. est également disponible):Pour être complet, je vais mentionner que le niveau inférieur S3 commandes sont également toujours disponibles via le s3api sous commande, ce qui permettrait de traduire directement toute solution basée sur le SDK AWS CLI avant d'adopter son plus haut niveau de fonctionnalités par la suite.
Première Réponse
Le déplacement de fichiers entre le S3 peut être atteint par des moyens de la METTRE l'Objet - Copie de l'API (suivi par SUPPRIMER l'Objet):
Il y a des échantillons respectifs pour tous les AWS Sdk disponibles, voir La copie d'Objets en une Seule Opération. Naturellement, un script basé solution serait évidente de premier choix ici, donc Copier un Objet en Utilisant le SDK AWS pour Ruby pourrait être un bon point de départ; si vous préférez Python au lieu de cela, le même effet peut être obtenu via boto ainsi, bien sûr, voir la méthode
copy_key()
dans boto est S3 documentation de l'API.PUT Object
copie uniquement les fichiers, donc vous devez explicitement supprimer un fichier viaDELETE Object
encore après le succès de l'opération de copie, mais ce sera juste quelques lignes une fois que l'ensemble de la gestion de scripts le seau et les noms de fichiers est en place (il y a respectifs d'exemples, voir, par exemple,La Suppression D'Un Objet Par Demande).mv
commande est encore mieux quesync
. Regardez sgimeno de réponse.La nouvelle officielle AWS CLI supporte la plupart des fonctionnalités de
s3cmd
. J'avais déjà été à l'aide des3cmd
ou le rubis SDK AWS pour faire des choses comme ça, mais l'officiel de la CLI fonctionne très bien pour cela.http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1
nohup aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1 &
thegeekstuff.com/2010/12/5-ways-to-execute-linux-commandPour déplacer/copier à partir d'un seau à l'autre ou le même seau-je utiliser s3cmd outil et fonctionne très bien. Par exemple:
J'ai passé des journées à écrire mon propre outil de paralléliser les copies nécessaires pour cela, mais ensuite, j'ai couru à travers la documentation sur comment obtenir AWS S3 CLI la commande sync pour synchroniser les seaux avec la parallélisation massive. Les commandes suivantes vont dire AWS de la CLI pour l'utilisation de 1 000 threads pour exécuter les travaux (chacun un fichier de petite taille ou d'une partie d'un multipart copie) et regardez devant plus de 100 000 emplois:
Après l'exécution de ces, vous pouvez utiliser une simple synchronisation de la commande comme suit:
Sur un m4.xlarge machine (dans AWS: 4 cœurs, 16 GO de RAM), pour mon cas (3-50 GO de fichiers) sync/vitesse de copie est passé d'environ 9.5 mo/s à plus de 700 mo/s, une augmentation de la vitesse de 70x sur la configuration par défaut.
Mise à jour: Notez que S3CMD a été mis à jour au fil des années et ces changements sont maintenant en vigueur uniquement lorsque vous travaillez avec un grand nombre de petits fichiers. Notez également que S3CMD sur Windows (uniquement sur Windows) est sérieusement limitée dans le débit global et ne peut atteindre environ 3 gbits /sec par processus, peu importe ce que la taille de l'instance ou les paramètres que vous utilisez. D'autres systèmes comme S5CMD ont le même problème. J'en ai parlé à la S3 de l'équipe à ce sujet et ils sont à la recherche en elle.
.NET Exemple comme demandé:
avec le client en étant quelque chose comme
Il pourrait y avoir une meilleure façon, mais c'est juste une rapide code que j'ai écrit pour obtenir certains fichiers transférés.
Si vous avez un ordinateur hôte unix au sein d'AWS, puis utilisez s3cmd de s3tools.org. Définir des autorisations, de sorte que votre clé d'accès en lecture sur le développement de votre seau. Ensuite, exécutez:
s3cmd cp
n'accepte pas la--skip-existing
option, vous pouvez toutefois exécuters3cmd sync
plutôt avec skip existantPour moi la commande suivante fonctionne simplement:
Ici est une classe ruby pour effectuer cette: https://gist.github.com/4080793
Exemple d'utilisation:
Fait que récemment je viens d'utiliser le copier+coller action dans AWS s3 interface. Il suffit de naviguer sur les fichiers que vous souhaitez copier, cliquez sur "Actions" -> "Copier", puis naviguer jusqu'à la destination seau et "Actions" -> "Coller"
Il transfère les fichiers assez rapide et il semble comme un moins alambiqué solution qui ne nécessite pas de programmation, ou sur le dessus des solutions comme ça.
Nous avons eu exactement ce problème avec notre ETL emplois à Chasse-neige, donc nous avons extrait notre parallèle de copie de fichier de code (Ruby, construit sur le haut de Le brouillard), dans sa propre Ruby gem, appelé à Pertuis:
https://github.com/snowplow/sluice
Écluse gère également S3 fichier de supprimer, de déplacer et de les télécharger; tous les paralléliser et avec renouvellement automatique de l'essayer si l'opération échoue (ce qui n'est étonnamment souvent). J'espère que c'est utile!
Je sais que c'est un vieux thread mais pour d'autres qui y atteindre, ma suggestion est de créer une tâche planifiée pour copier du contenu à partir de la production seau pour le développement one.
Vous pouvez utiliser Si vous utilisez .NET cet article peut vous aider à
http://www.codewithasp.net/2015/03/aws-s3-copy-object-from-one-bucket-or.html