Déplacer des fichiers directement d'un compte S3 à un autre?

90

Question assez basique mais je n'ai pas pu trouver de réponse. À l'aide de Transit, je peux «déplacer» des fichiers d'un compartiment S3 sur un compte AWS vers un autre compartiment S3 sur un autre compte AWS, mais ce qu'il fait en réalité, c'est télécharger les fichiers du premier puis les télécharger vers le second.

Existe-t-il un moyen de déplacer des fichiers directement d'un compte S3 à un autre sans les télécharger entre les deux?

Andrew
la source

Réponses:

22

Si vous recherchez simplement une solution toute faite, il existe quelques solutions qui peuvent le faire. Bucket Explorer fonctionne sur Mac et Windows et peut copier entre les comptes comme le peuvent Cloudberry S3 Explorer et S3 Browser mais ils ne sont que Windows et peuvent donc ne pas fonctionner pour vous.

Je soupçonne que la console AWS pourrait également le faire avec la configuration des autorisations appropriée, mais je n'ai pas testé cela.

Vous pouvez également le faire à l'aide de l' API AWS tant que vous avez donné au compte AWS que vous utilisez des autorisations d'écriture sur le compartiment de destination.

Geoff Appleford
la source
+1 pour Bucket Explorer. Beaucoup plus facile que la console de gestion AWS ou s3cmd pour copier un compartiment entre les comptes. Le deuxième ensemble d'instructions a fonctionné pour moi avec leur essai gratuit: bucketexplorer.com/documentation
...
Cloudberry est la voie à suivre. Gratuit, en plus c'est un glisser-déposer facile après une configuration encore plus facile. Et non, je ne travaille pas là-bas :)
skidadon
3
Bucket Explorer télécharge-t-il et retélécharge-t-il les données, ou déplace-t-il les données directement entre les serveurs Amazon?
Wouter
Notez que la version d'essai de Cloudberry (version 5.0.0.32 au moins) a une limite de transfert de 5 Go!
DarthPablo
123

Oui, il y a un moyen. Et c'est assez simple, même s'il est difficile de le trouver. 8)

Par exemple, supposons que le premier nom d'utilisateur de votre compte soit [email protected] et le second [email protected].

Ouvrez AWS Management Console tant que acc1. Accédez aux propriétés du compartiment Amazon S3 et, dans l'onglet "Autorisations", cliquez sur "Ajouter plus d'autorisations". Ajoutez ensuite les autorisations de liste et d'affichage pour les «utilisateurs authentifiés».

Ensuite, dans AWS IAM (accessible à partir des onglets de la console) de acc2, créez un utilisateur avec un accès complet au compartiment S3 (pour être plus sûr, vous pouvez configurer des autorisations exactes, mais je préfère créer un utilisateur temporaire pour le transfert puis supprimez-le).

Ensuite, vous pouvez utiliser s3cmd (en utilisant les informations d'identification de l'utilisateur nouvellement créé dans acc2) pour faire quelque chose comme:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

Tous les transferts seront effectués du côté d'Amazon.

side2k
la source
8
Bon conseil! Aussi pour synchroniser des buckets entiers à la rsync, vous pouvez utiliser s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll
6
Si vous rencontrez des problèmes avec un AccessDenied 403 lors de la copie de fichiers de la cible vers l'hôte, consultez cet article. Il y a peut-être une autre façon de le faire, mais les résultats ici ont fonctionné pour moi. alfielapeter.com/posts/…
crlane
qu'en est-il des seaux assez gros? dire dans la zone 50 Go, cela vous pose-t-il des problèmes?
ianstarz
4
s3cmdpeut être installé avec homebrew également, fyi
ianstarz
3
si votre bucket de destination est destiné à servir des fichiers publiquement .. vous pouvez ajouter --acl-publicsinon, tous les fichiers sont privés (du moins c'était pour moi lorsque j'ai exécuté la commande). avec autant de fichiers privés, j'ai dû ajouter une stratégie dans le seau pour les rendre tous publics à nouveau
choonkeat
58

Utilisez le cli aws (j'ai utilisé l'instance ubuntu 14 ec2) et exécutez simplement la commande suivante:

aws s3 sync s3://bucket1 s3://bucket2

Vous devrez spécifier les détails du compte pour l'un et disposer d'un accès public en écriture ou d'un accès public en lecture à l'autre.

Cela synchronisera les deux compartiments. Vous pouvez réutiliser la même commande ultérieurement pour une synchronisation rapide. La meilleure partie est qu'il ne semble pas nécessiter de bande passante (par exemple, les fichiers ne passent pas par l'ordinateur local).

Programmeur
la source
3
Sur un très grand seau, j'ai eu plus de chance avec ça. s3cmd a semblé bloquer la génération de la liste des fichiers dans le premier compartiment. C'est peut-être terminé, mais je me suis impatienté.
repenser
2
J'ai vécu la même expérience; pour une raison quelconque, aws s3 syncsemble courir environ un ordre de grandeur plus rapide que s3cmd cp.
pix0r
2
Cela a fonctionné pour moi. Si vous rencontrez des problèmes d'autorisations, essayez d'utiliser l' --grantsoption. Plus d'informations dans la documentation: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen
3
Les autorisations ne sont pas copiées lors de la synchronisation, vous devrez donc spécifier --grants. J'ai appris cela après avoir copié une tonne de données, puis j'ai dû refaire la synchronisation avec un nouveau compartiment. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersdéfinit l'autorisation de lecture pour les utilisateurs publics.
Dan Sandland
Cela a fonctionné environ 10 fois plus vite que s3cmdpour moi, et est également capable de synchroniser les fichiers de modification plutôt que de tout recopier si vous avez besoin de réexécuter la commande à l'avenir - beaucoup mieux!
nfm le
5

boto fonctionne bien. Voir ce fil . En utilisant boto, vous copiez des objets directement d'un compartiment à un autre, plutôt que de les télécharger sur la machine locale et de les télécharger dans un autre compartiment.

Rose Perrone
la source
3

Sur Mac OS XI, utilisez l'application Transmit de Panic. J'ai ouvert une fenêtre pour chaque compte S3 (en utilisant les clés API et les secrets). Je pourrais ensuite faire glisser d'un seau dans une fenêtre vers un autre seau dans l'autre fenêtre. Pas besoin de télécharger les fichiers localement au préalable .

Andrew a raison, Transmit télécharge les fichiers localement puis télécharge les fichiers.

Un saut géant AB
la source
2
J'ai Transmit, et je suis sûr à 99% que le transfert que vous décrivez télécharge les fichiers dans un dossier temporaire, puis les télécharge sur l'autre serveur. Êtes-vous certain que les fichiers n'ont pas transité par votre ordinateur?
Andrew
1
Quelqu'un peut-il le confirmer?
David Mauricio
2
Je confirme. Transmettez les téléchargements et les téléchargements. Cela rend les choses terriblement lentes mais présente l'énorme avantage de stocker le contenu copié sous le bon propriétaire.
Fabio Russo
3

Déplacer les fichiers S3 d'un compte vers un autre compte

Considérons qu'il existe deux comptes source et compte de destination. Et deux seaux source-bucketet destination bucket. Nous voulons déplacer tous les fichiers de source-bucketvers destination-bucket. Nous pouvons le faire en suivant les étapes suivantes:

  1. aws configure
    • Configurez votre compte de destination à l'aide des informations d'identification ou du rôle IAM.
  2. Créez une stratégie utilisateur pour l'utilisateur du compte de destination.
  3. Accordez à l'utilisateur de destination l'accès au compartiment source en modifiant la stratégie du compartiment source et en y ajoutant la stratégie utilisateur du compte de destination. De cette manière, l'utilisateur de destination aura accès à source-bucket.
  4. aws s3 ls s3://source-bucket/
    • cela vérifiera si le compte de destination a accès au compartiment source. Juste pour confirmation, faites ceci.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • ceci copiera tous les fichiers du compartiment source dans le compartiment de destination. Tous les fichiers sont copiés à l'aide de l'option --recursive.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • cela déplacera tous les fichiers du compartiment source vers le compartiment de destination.

Alternativement, vous pouvez utiliser la commande sync - aws s3 sync s3://source-bucket s3://detination-bucket

Pour une meilleure explication, suivez le lien

Anand Tripathi
la source
2

CrossFTP peut copier des fichiers S3 directement d'un compartiment à un autre sans les télécharger. Il s'agit d'un client GUI S3 qui fonctionne sur Windows, Mac et Linux.

Gatorhall
la source
4
Il est à noter que cela n'est possible qu'avec la version payante. Ce n'est pas une solution gratuite.
Michael Brook
2

Vous pouvez utiliser Cyberduck (open source)

Marco Delavegua
la source
Dans le magasin Windows, ils facturent quelque chose pour le télécharger, mais sur leur site Web, vous pouvez l'obtenir gratuitement. Après avoir créé un ID de clé d'accès AWS et une clé d'accès secrète, j'ai réussi à me connecter à mon stockage S3. Je n'ai pas encore testé de copie, mais il semble que cela pourrait fonctionner.
Wouter
1

Pour les fichiers nouvellement créés (PAS les objets existants), vous pouvez tirer parti des nouvelles fonctionnalités d'AWS. Il s'agit de la réplication interrégionale (sous "Versioning" pour le compartiment S3). Vous pouvez créer une stratégie qui vous permettra de répliquer de nouveaux objets dans un compartiment d'un autre compte.

Pour les objets existants, vous devrez toujours copier vos objets à l'aide d'une autre méthode, à moins qu'AWS n'introduise à l'avenir une fonctionnalité native à cet effet.

curious_george
la source
0

On peut le faire en courant suivant:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. Attachez une stratégie de compartiment au compartiment source dans le compte source.

  2. Attachez une stratégie AWS Identity and Access Management (IAM) à un utilisateur ou un rôle dans le compte de destination.

  3. Utilisez l'utilisateur ou le rôle IAM dans le compte de destination pour effectuer le déplacement entre comptes.

svikramjeet
la source