Pindahkan file langsung dari satu akun S3 ke yang lain?


90

Pertanyaan yang cukup mendasar tetapi saya belum dapat menemukan jawabannya. Dengan menggunakan Transit, saya dapat "memindahkan" file dari satu bucket S3 di satu akun AWS ke bucket S3 lain di akun AWS lain, tetapi yang sebenarnya dilakukannya adalah mengunduh file dari yang pertama lalu mengunggahnya ke yang kedua.

Apakah ada cara untuk memindahkan file secara langsung dari satu akun S3 ke yang lain tanpa mengunduhnya di antaranya?

Jawaban:


22

Jika Anda hanya mencari solusi siap pakai, ada beberapa solusi di luar sana yang dapat melakukan ini. Bucket Explorer bekerja di Mac dan Windows dan dapat menyalin di seluruh akun seperti halnya Cloudberry S3 Explorer dan S3 Browser tetapi mereka hanya untuk Windows sehingga mungkin tidak berfungsi untuk Anda.

Saya menduga konsol AWS juga dapat melakukannya dengan pengaturan izin yang sesuai tetapi saya belum menguji ini.

Anda juga dapat melakukannya menggunakan AWS API selama Anda telah memberikan akun AWS yang Anda gunakan izin tulis ke bucket tujuan.


1 untuk Bucket Explorer. Jauh lebih mudah daripada konsol manajemen AWS atau s3cmd untuk menyalin bucket antar akun. Rangkaian petunjuk kedua berhasil untuk saya dengan uji coba gratis mereka: bucketexplorer.com/documentation/…
LennonR

Cloudberry adalah cara terbaiknya. Gratis, plus ini adalah seret dan lepas yang mudah setelah penyiapan yang lebih mudah. Dan tidak, saya tidak bekerja di sana :)
skidadon

3
Apakah Bucket Explorer mengunduh dan mengunggah ulang data, atau apakah itu memindahkan data secara langsung antara server Amazon?
Wouter

Perhatikan bahwa versi uji coba Cloudberry (setidaknya versi 5.0.0.32) memiliki batas transfer 5GB!
DarthPablo

123

Ya, ada caranya. Dan itu sangat sederhana, meskipun sulit untuk menemukannya. 8)

Misalnya, nama pengguna akun pertama Anda adalah acc1@gmail.com dan yang kedua adalah acc2@gmail.com.

Buka AWS Management Console sebagai acc1. Buka properti bucket Amazon S3, dan di tab "Izin" klik "Tambahkan lebih banyak izin". Kemudian tambahkan Izin Daftar dan Lihat untuk "Pengguna yang Diotentikasi".

Selanjutnya, di AWS IAM (dapat diakses dari antara tab konsol) acc2 buat pengguna dengan akses penuh ke bucket S3 (agar lebih aman, Anda dapat mengatur izin yang tepat, tetapi saya lebih suka membuat pengguna sementara untuk transfer lalu hapus).

Kemudian Anda dapat menggunakan s3cmd (menggunakan kredensial pengguna yang baru dibuat di acc2) untuk melakukan sesuatu seperti:

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

Semua transfer akan dilakukan di pihak Amazon.


9
Tip yang bagus! Juga untuk menyinkronkan seluruh keranjang à la rsync, Anda dapat menggunakan s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllll

6
Jika Anda memiliki masalah dengan 403 AccessDenied saat menyalin file dari target ke host, lihat posting ini. Mungkin ada cara lain untuk melakukannya, tetapi hasilnya di sini berhasil untuk saya. alfielapeter.com/posts/…
crlane

bagaimana dengan ember yang agak besar? katakanlah di area 50gb, apakah itu memberi Anda masalah?
ianstarz

4
s3cmddapat diinstal dengan homebrew juga, fyi
ianstarz

3
jika keranjang tujuan Anda dimaksudkan untuk melayani file secara publik .. Anda mungkin ingin menambahkan --acl-publicsebaliknya, semua file bersifat pribadi (setidaknya untuk saya ketika saya melakukan perintah). dengan begitu banyak file pribadi, saya harus menambahkan kebijakan di keranjang untuk membuatnya menjadi publik lagi
choonkeat

58

Gunakan aws cli (saya menggunakan ubuntu 14 ec2 instance) dan jalankan perintah berikut:

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

Anda perlu menentukan detail akun untuk satu akun, dan memiliki akses tulis publik atau akses baca publik ke akun lainnya.

Ini akan menyinkronkan kedua keranjang. Anda dapat menggunakan perintah yang sama lagi nanti untuk menyinkronkan dengan cepat. Bagian terbaiknya adalah sepertinya tidak memerlukan bandwidth (mis. File tidak melewati komputer lokal).


3
Dengan ember yang sangat besar saya lebih beruntung dengan ini. s3cmd tampaknya berhenti membuat daftar file di keranjang pertama. Ini mungkin telah selesai, tetapi saya menjadi tidak sabar.
terlalu memikirkan

2
Saya memiliki pengalaman yang sama; untuk alasan apapun, aws s3 synctampaknya berjalan sekitar urutan besarnya lebih cepat dari s3cmd cp.
pix0r

2
Ini berhasil untuk saya. Jika Anda mengalami masalah izin, coba gunakan --grantsopsi. Info lebih lanjut di dokumentasi: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen

3
Izin tidak disalin saat Anda menyinkronkan, jadi Anda harus menentukan --grants. Saya mempelajari ini setelah menyalin banyak data dan kemudian harus mengulangi sinkronisasi ke keranjang baru. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersmengatur izin baca untuk pengguna publik.
Dan Sandland

Ini berjalan sekitar 10x lebih cepat daripada s3cmdsaya, dan juga dapat menyinkronkan file perubahan daripada menyalin ulang semuanya jika Anda perlu menjalankan kembali perintah di masa mendatang - jauh lebih baik!
nfm

5

boto bekerja dengan baik. Lihat utas ini . Dengan menggunakan boto, Anda menyalin objek langsung dari satu wadah ke wadah lain, alih-alih mengunduhnya ke komputer lokal dan mengunggahnya ke wadah lain.


diskusi yang ditautkan tampaknya tidak menjawab pertanyaan tersebut, karena OP secara khusus menanyakan tentang menyalin dari satu akun AWS ke akun lainnya.
TolkienWASP

3

Di Mac OS XI menggunakan aplikasi Transmit dari Panic. Saya membuka satu jendela untuk setiap akun S3 (menggunakan Kunci dan rahasia API). Saya kemudian dapat menyeret dari satu ember di satu jendela ke ember lain di jendela lain. Tidak perlu mengunduh file secara lokal terlebih dahulu .

Andrew benar, Transmit mengunduh file secara lokal kemudian mengunggah file.


2
Saya memiliki Transmit, dan saya 99% yakin bahwa transfer yang Anda gambarkan memang mengunduh file ke folder temp dan kemudian mengunggah ke server lain. Apakah Anda yakin file tersebut tidak mengalir melalui komputer Anda?
Andrew

1
Adakah yang bisa mengkonfirmasi ini?
David Mauricio

2
Saya mengkonfirmasi. Mengirimkan unduhan dan unggahan. Ini membuat segalanya sangat lambat tetapi memiliki keuntungan besar dalam menyimpan konten yang disalin di bawah pemilik yang tepat.
Fabio Russo

3

Pindahkan file S3 dari satu akun ke akun lain

Mari kita pertimbangkan ada dua akun sumber akun dan akun tujuan. Dan dua ember source-bucketdan destination bucket. Kami ingin memindahkan semua file dari source-bucketke destination-bucket. Kita bisa melakukannya dengan langkah-langkah berikut:

  1. aws configure
    • Konfigurasikan akun tujuan Anda menggunakan kredensial atau peran IAM.
  2. Buat kebijakan pengguna untuk pengguna akun tujuan.
  3. Beri pengguna tujuan akses ke keranjang sumber dengan mengubah kebijakan keranjang sumber dan menambahkan kebijakan pengguna akun tujuan ke dalamnya. Dengan cara ini, pengguna tujuan akan memiliki akses ke keranjang sumber.
  4. aws s3 ls s3://source-bucket/
    • ini akan memeriksa apakah akun tujuan memiliki akses ke keranjang sumber. Hanya untuk konfirmasi lakukan ini.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • ini akan menyalin semua file ke keranjang sumber ke keranjang tujuan. Semua file disalin menggunakan --recursive flag.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • ini akan memindahkan semua file dari keranjang sumber ke keranjang tujuan.

Alternatif Anda dapat menggunakan perintah sinkronisasi - aws s3 sync s3://source-bucket s3://detination-bucket

Untuk Penjelasan Lebih Baik ikuti tautannya


2

CrossFTP dapat menyalin file S3 langsung dari satu wadah ke wadah lain tanpa mengunduhnya. Ini adalah klien GUI S3 yang bekerja di Windows, Mac, dan Linux.


4
Perlu dicatat bahwa ini hanya dapat dilakukan dengan versi berbayar. Ini bukan solusi gratis.
Michael Brook

2

Anda dapat menggunakan Cyberduck (open source)


Di toko Windows mereka mengenakan biaya untuk mendownload ini, tetapi dari situs web mereka Anda bisa mendapatkannya secara gratis. Setelah membuat ID Kunci Akses AWS dan Kunci Akses Rahasia, saya telah berhasil terhubung ke penyimpanan S3 saya. Belum menguji penyalinan apa pun, tetapi sepertinya itu mungkin berhasil.
Wouter

1

Untuk file yang baru dibuat (BUKAN objek yang ada), Anda dapat memanfaatkan fungsionalitas baru dari AWS. Ini adalah Replikasi Lintas Wilayah (di bawah "Pembuatan Versi" untuk bucket S3). Anda dapat membuat kebijakan yang memungkinkan Anda mereplikasi objek baru ke keranjang di akun lain.

Untuk objek yang sudah ada, Anda masih perlu menyalin objek Anda menggunakan metode lain - kecuali AWS memperkenalkan fungsionalitas asli untuk ini di masa mendatang.


0

Satu dapat melakukannya dengan menjalankan berikut:

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

  1. Lampirkan kebijakan keranjang ke keranjang sumber di Akun Sumber.

  2. Lampirkan kebijakan AWS Identity and Access Management (IAM) ke pengguna atau peran di Akun Tujuan.

  3. Gunakan pengguna atau peran IAM di Akun Tujuan untuk melakukan pemindahan lintas akun.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.