Spostare i file direttamente da un account S3 a un altro?


90

Domanda piuttosto semplice ma non sono riuscito a trovare una risposta. Utilizzando Transit posso "spostare" i file da un bucket S3 su un account AWS a un altro bucket S3 su un altro account AWS, ma ciò che in realtà fa è scaricare i file dal primo e caricarli sul secondo.

C'è un modo per spostare i file direttamente da un account S3 a un altro senza scaricarli nel mezzo?

Risposte:


22

Se stai solo cercando una soluzione già pronta, ci sono alcune soluzioni là fuori che possono farlo. Bucket Explorer funziona su Mac e Windows e può copiare tra account così come Cloudberry S3 Explorer e S3 Browser, ma sono solo Windows, quindi potrebbero non funzionare per te.

Sospetto che la console AWS possa farlo anche con l'impostazione delle autorizzazioni appropriate, ma non l'ho testato.

Puoi anche farlo utilizzando l' API AWS purché tu abbia fornito l'account AWS che stai utilizzando le autorizzazioni di scrittura per il bucket di destinazione.


+1 per Bucket Explorer. Molto più semplice della console di gestione AWS o di s3cmd per copiare un bucket tra account. La seconda serie di indicazioni ha funzionato per me con la loro prova gratuita: bucketexplorer.com/documentation/…
LennonR

Cloudberry è la strada da percorrere. Gratuito, in più è un semplice trascinamento dopo una configurazione ancora più semplice. E no, non lavoro lì :)
skidadon

3
Bucket Explorer scarica e ricarica i dati o sposta i dati direttamente tra i server Amazon?
Wouter

Nota che la versione di prova di Cloudberry (versione 5.0.0.32 almeno) ha un limite di trasferimento di 5 GB!
DarthPablo

123

Sì, c'è un modo. Ed è piuttosto semplice, anche se è difficile trovarlo. 8)

Ad esempio, supponiamo che il nome utente del tuo primo account sia acc1@gmail.com e il secondo sia acc2@gmail.com.

Apri la Console di gestione AWS come acc1. Accedi alle proprietà del bucket Amazon S3 e nella scheda "Autorizzazioni" fai clic su "Aggiungi altre autorizzazioni". Quindi aggiungi Elenco e Visualizza autorizzazioni per "Utenti autenticati".

Successivamente, in AWS IAM (è accessibile dalle schede della console) di acc2 crea un utente con accesso completo al bucket S3 (per essere più sicuro, puoi impostare autorizzazioni esatte, ma preferisco creare un utente temporaneo per il trasferimento e poi cancellalo).

Quindi puoi usare s3cmd (usando le credenziali dell'utente appena creato in acc2) per fare qualcosa come:

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

Tutti i trasferimenti verranno effettuati dalla parte di Amazon.


8
Ottimo suggerimento! Anche per sincronizzare interi bucket à la rsync, puoi usare s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll

6
Se hai problemi con un AccessDenied 403 durante la copia dei file dalla destinazione all'host, vedi questo post. Potrebbe esserci un altro modo per farlo, ma i risultati qui hanno funzionato per me. alfielapeter.com/posts/…
crlane

e per secchi piuttosto grandi? diciamo nell'area 50gb, ti dà problemi?
ianstarz

4
s3cmdpuò essere installato anche con homebrew, fyi
ianstarz

3
se il tuo bucket di destinazione è pensato per servire i file pubblicamente .. potresti voler aggiungere --acl-publicaltrimenti, tutti i file sono privati ​​(almeno lo era per me quando ho eseguito il comando). con così tanti file privati, ho dovuto aggiungere una politica nel secchio per renderli di nuovo tutti pubblici
choonkeat

58

Usa aws cli (ho usato l'istanza ec2 di ubuntu 14) ed esegui semplicemente il seguente comando:

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

Dovrai specificare i dettagli dell'account per uno e avere accesso in scrittura pubblica o accesso in lettura pubblico per l'altro.

Questo sincronizzerà i due bucket. Puoi usare di nuovo lo stesso comando in un secondo momento per sincronizzare rapidamente. La parte migliore è che non sembra richiedere alcuna larghezza di banda (ad esempio, i file non passano attraverso il computer locale).


3
Su un secchio molto grande ho avuto più fortuna con questo. s3cmd sembrava bloccarsi nella generazione dell'elenco di file nel primo bucket. Potrebbe essere stato completato, ma sono diventato impaziente.
overthink

2
Ho avuto la stessa esperienza; per qualsiasi motivo, aws s3 syncsembra correre di circa un ordine di grandezza più veloce di s3cmd cp.
pix0r

2
Questo ha funzionato per me. Se riscontri problemi di autorizzazione, prova a utilizzare l' --grantsopzione. Maggiori informazioni nella documentazione: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen

3
Le autorizzazioni non vengono copiate durante la sincronizzazione, quindi dovrai specificarle --grants. L'ho imparato dopo aver copiato un sacco di dati e poi ho dovuto ripetere la sincronizzazione su un nuovo bucket. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersimposta i permessi di lettura per gli utenti pubblici.
Dan Sandland

Questo è stato eseguito circa 10 volte più velocemente rispetto s3cmda me, ed è anche in grado di sincronizzare i file di modifica invece di ricopiare tutto se è necessario rieseguire il comando in futuro - molto meglio!
nfm

5

boto funziona bene. Vedi questo thread . Utilizzando boto, copi gli oggetti direttamente da un bucket a un altro, invece di scaricarli sulla macchina locale e caricarli su un altro bucket.


3

Su Mac OS XI ho utilizzato l'app Transmit di Panic. Ho aperto una finestra per ogni account S3 (utilizzando le chiavi API e i segreti). Potrei quindi trascinare da un secchio in una finestra a un altro secchio nell'altra finestra. Non è necessario scaricare prima i file in locale .

Andrew ha ragione, Transmit scarica i file localmente quindi carica i file.


2
Ho Transmit e sono sicuro al 99% che il trasferimento che stai descrivendo scarica i file in una cartella temporanea e quindi li carica sull'altro server. Sei sicuro che i file non siano passati attraverso il tuo computer?
Andrew

1
Qualcuno può confermarlo?
David Mauricio

2
Confermo. Trasmetti download e caricamenti. Questo rende le cose terribilmente lente ma ha l'enorme vantaggio di archiviare i contenuti copiati sotto il giusto proprietario.
Fabio Russo

3

Sposta i file S3 da un account a un altro account

Consideriamo che ci sono due account: account di origine e account di destinazione. E due secchi source-buckete destination bucket. Vogliamo spostare tutti i file da source-bucketa destination-bucket. Possiamo farlo con i seguenti passaggi:

  1. aws configure
    • Configura il tuo account di destinazione utilizzando la credenziale o il ruolo IAM.
  2. Crea criteri utente per l'utente dell'account di destinazione.
  3. Fornisci all'utente di destinazione l'accesso al bucket di origine modificando la policy del bucket di origine e aggiungendovi la policy dell'utente dell'account di destinazione. In questo modo, l'utente di destinazione avrà accesso al bucket di origine.
  4. aws s3 ls s3://source-bucket/
    • questo controllerà se l'account di destinazione ha accesso al bucket di origine. Solo per conferma fallo.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • questo copierà tutti i file del bucket di origine nel bucket di destinazione. Tutti i file vengono copiati utilizzando il flag --recursive.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • questo sposterà tutti i file dal bucket di origine al bucket di destinazione.

In alternativa puoi usare il comando di sincronizzazione - aws s3 sync s3://source-bucket s3://detination-bucket

Per una migliore spiegazione segui il link


2

CrossFTP può copiare i file S3 direttamente da un bucket all'altro senza scaricarli. È un client GUI S3 che funziona su Windows, Mac e Linux.


4
Va notato che questo è possibile solo con la versione a pagamento. Non è una soluzione gratuita.
Michael Brook

2

Puoi usare Cyberduck (open source)


Nello store di Windows fanno pagare qualcosa per scaricarlo, ma dal loro sito web puoi ottenerlo gratuitamente. Dopo aver creato un ID chiave di accesso AWS e una chiave di accesso segreta, sono riuscito a connettermi al mio archivio S3. Non ho ancora provato a copiare nulla, ma sembra che potrebbe funzionare.
Wouter

1

Per i file appena creati (NON gli oggetti esistenti), puoi sfruttare le nuove funzionalità di AWS. È la replica tra regioni (in "Controllo delle versioni" per il bucket S3). Puoi creare una policy che ti consentirà di replicare nuovi oggetti in un bucket in un account diverso.

Per gli oggetti esistenti, dovrai comunque copiare i tuoi oggetti utilizzando un altro metodo, a meno che AWS non introduca funzionalità native per questo in futuro.


0

Si può farlo eseguendo quanto segue:

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

  1. Allega una policy del bucket al bucket di origine nell'account di origine.

  2. Collega una policy AWS Identity and Access Management (IAM) a un utente o ruolo nell'account di destinazione.

  3. Utilizza l'utente o il ruolo IAM nell'account di destinazione per eseguire lo spostamento tra account.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.