Dosyalar doğrudan bir S3 hesabından diğerine mi taşınsın?


90

Oldukça basit bir soru ama bir cevap bulamadım. Transit'i kullanarak dosyaları bir AWS hesabındaki bir S3 klasöründen başka bir AWS hesabındaki başka bir S3 klasörüne "taşıyabilirim", ancak aslında yaptığı şey dosyaları ilkinden indirip ardından ikinciye yüklemektir.

Dosyaları aralarında indirmeden doğrudan bir S3 hesabından diğerine taşımanın bir yolu var mı?

Yanıtlar:


22

Sadece hazır bir çözüm arıyorsanız, bunu yapabilecek birkaç çözüm var. Bucket Explorer , Mac ve Windows üzerinde çalışır ve Cloudberry S3 Explorer ve S3 Tarayıcısı gibi hesaplar arasında kopyalayabilir, ancak bunlar yalnızca Windows olduğundan sizin için çalışmayabilir.

AWS konsolunun da bunu uygun izin kurulumuyla yapabileceğinden şüpheleniyorum ancak bunu test etmedim.

AWS hesabına hedef pakete yazma izinleri vermiş olduğunuz sürece bunu AWS API'yi kullanarak da yapabilirsiniz .


Kova Gezgini için +1. Hesaplar arasında paket kopyalamak için AWS yönetim konsolundan veya s3cmd'den çok daha kolay. İkinci talimat seti, ücretsiz denemelerinde benim için çalıştı: kovaexplorer.com/documentation/…
LennonR

Cloudberry, gitmenin yoludur. Ücretsiz, ayrıca daha kolay bir kurulumun ardından kolay bir sürükle ve bırak özelliği. Ve hayır, orada çalışmıyorum :)
skidadon

3
Bucket Explorer verileri indirip yeniden yüklüyor mu yoksa verileri doğrudan Amazon sunucuları arasında mı taşıyor?
Wouter

Cloudberry'nin deneme sürümünün (en az 5.0.0.32 sürümü) 5GB aktarım sınırına sahip olduğunu unutmayın!
DarthPablo

123

Evet, bir yolu var. Bulması zor olsa da oldukça basit. 8)

Örneğin, ilk hesap kullanıcı adınızın acc1@gmail.com ve ikincisi acc2@gmail.com olduğunu varsayalım.

Açık AWS Yönetim Konsolu ACC1 olarak. Amazon S3 klasör özelliklerine gidin ve "İzinler" sekmesinde "Daha fazla izin ekle" yi tıklayın. Ardından "Kimliği Doğrulanan Kullanıcılar" için Liste ve Görünüm İzinlerini ekleyin.

Daha sonra, acc2'nin AWS IAM'sinde (konsol sekmelerinden erişilebilir) S3 klasörüne tam erişime sahip bir kullanıcı oluşturun (daha güvenli olmak için tam izinleri ayarlayabilirsiniz, ancak aktarım için geçici bir kullanıcı oluşturmayı tercih ediyorum ve sonra silin).

Sonra s3cmd'yi ( acc2'de yeni oluşturulan kullanıcının kimlik bilgilerini kullanarak) aşağıdaki gibi bir şey yapmak için kullanabilirsiniz:

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

Tüm transferler Amazon tarafında yapılacaktır.


9
Harika bir ipucu! Ayrıca tüm paketleri à la senkronize etmek için rsyncde kullanabilirsiniz s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll

6
Dosyaları hedeften ana bilgisayara kopyalarken 403 AccessDenied ile sorun yaşıyorsanız, bu gönderiye bakın. Bunu yapmanın başka bir yolu olabilir, ancak buradaki sonuçlar benim için çalıştı. alfielapeter.com/posts/…
crlane

biraz büyük kovalar için ne dersiniz? 50 gb alanında size sorun çıkarır mı?
ianstarz

4
s3cmdhomebrew ile de kurulabilir,
fyi

3
hedef paketinizin dosyaları herkese açık olarak sunması amaçlanıyorsa .. --acl-publicaksi takdirde eklemek isteyebilirsiniz , tüm dosyalar özeldir (en azından komutu gerçekleştirdiğimde benim içindi). çok fazla özel
dosyayla

58

Kullan aws cli (ben 14 EC2 örneği ubuntu kullanılır) ve sadece aşağıdaki komutu çalıştırın:

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

Birinin hesap ayrıntılarını belirtmeniz ve diğerine genel yazma veya genel okuma erişiminizin olması gerekir.

Bu, iki grubu senkronize edecektir. Hızlı bir şekilde senkronize etmek için aynı komutu daha sonra tekrar kullanabilirsiniz. En iyi yanı, herhangi bir bant genişliği gerektirmiyor gibi görünmesidir (örneğin, dosyalar yerel bilgisayardan geçmiyor).


3
Çok büyük bir kovada bununla daha şanslıydım. s3cmd, ilk gruptaki dosyaların listesini oluştururken durmuş gibi görünüyordu. Tamamlanmış olabilir ama sabırsızlandım.
overthink

2
Aynı deneyime sahibim; herhangi bir nedenle, aws s3 syncbir kat daha hızlı koşuyor gibi görünüyor s3cmd cp.
pix0r

2
Bu benim için çalıştı. İzin sorunlarıyla karşılaşırsanız, --grantsseçeneği kullanmayı deneyin . Belgelerde daha fazla bilgi: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen 09

3
Eşitleme yaptığınızda izinler kopyalanmaz, bu nedenle belirtmeniz gerekir --grants. Bunu bir ton veriyi kopyaladıktan sonra öğrendim ve senkronizasyonu yeni bir paketle yeniden yapmak zorunda kaldım. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersgenel kullanıcılar için okuma izni ayarlar.
Dan Sandland

Bu, s3cmdbenden yaklaşık 10 kat daha hızlı çalıştı ve ayrıca gelecekte komutu yeniden çalıştırmanız gerekirse her şeyi yeniden kopyalamak yerine değişiklik dosyalarını senkronize edebilir - çok daha iyi!
nfm

5

boto iyi çalışıyor. Bu konuya bakın . Boto kullanarak, nesneleri yerel makineye indirmek ve başka bir kovaya yüklemek yerine doğrudan bir kovadan diğerine kopyalarsınız.


OP özellikle bir AWS hesabından diğerine kopyalama hakkında soru sorduğundan bağlantılı tartışma soruyu ele almıyor gibi görünüyor.
TolkienWASP

3

Mac OS XI'de Panic'in Transmit uygulamasını kullandı. Her S3 hesabı için bir pencere açtım (API Anahtarlarını ve sırlarını kullanarak). Daha sonra bir pencerede bir kovadan diğer pencerede başka bir kovaya sürükleyebilirim. Önce dosyaları yerel olarak indirmeye gerek yok .

Andrew haklı, Transmit dosyaları yerel olarak indiriyor ve ardından dosyaları karşıya yüklüyor.


2
İletim var ve açıkladığınız aktarımın dosyaları geçici bir klasöre indirip diğer sunucuya yüklediğinden% 99 eminim. Dosyaların bilgisayarınızdan akmadığından emin misiniz?
Andrew

1
Bunu doğrulayan var mı?
David Mauricio

2
Onaylıyorum. İndirmeleri ve yüklemeleri iletin. Bu, işleri çok yavaşlatır, ancak kopyalanan içeriği doğru sahip altında depolamanın büyük avantajına sahiptir.
Fabio Russo

3

S3 dosyalarını bir hesaptan başka bir hesaba taşıyın

İki hesap kaynak hesabı ve hedef hesap olduğunu düşünelim. Ve iki kova source-bucketve destination bucket. Biz gelen tüm dosyaları taşımak istediğiniz source-bucketiçin destination-bucket. Bunu aşağıdaki adımlarla yapabiliriz:

  1. aws configure
    • Kimlik bilgilerini veya IAM rolünü kullanarak hedef hesabınızı yapılandırın.
  2. Hedef hesap kullanıcısı için kullanıcı politikası oluşturun.
  3. Kaynak paket politikasını değiştirerek ve hedef hesap kullanıcı politikasını buna ekleyerek hedef kullanıcıya kaynak paketine erişim verin. Bu şekilde, hedef kullanıcının kaynak paketine erişimi olacaktır.
  4. aws s3 ls s3://source-bucket/
    • bu, hedef hesabın kaynak paketine erişiminin olup olmadığını kontrol edecektir. Sadece onay için bunu yapın.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • bu, kaynak paketini tüm dosyaları hedef pakete kopyalar. Tüm dosyalar --recursive bayrağı kullanılarak kopyalanır.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • bu, tüm dosyaları kaynak paketinden hedef pakete taşır.

Alternatif olarak, sync komutunu kullanabilirsiniz - aws s3 sync s3://source-bucket s3://detination-bucket

Daha İyi Açıklama için bağlantıyı takip edin


2

CrossFTP , S3 dosyalarını indirmeden doğrudan bir paketten diğerine kopyalayabilir. Windows, Mac ve Linux üzerinde çalışan bir GUI S3 istemcisidir.


4
Bunun yalnızca ücretli sürümle mümkün olduğu unutulmamalıdır. Ücretsiz bir çözüm değil.
Michael Brook

2

Cyberduck'u kullanabilirsiniz (açık kaynak)


Windows mağazasında bunu indirmek için bir ücret alıyorlar, ancak web sitelerinden ücretsiz olarak edinebilirsiniz. Bir AWS Erişim Anahtarı Kimliği ve Gizli Erişim Anahtarı oluşturduktan sonra, S3 depolama alanıma bağlanmayı başardım. Henüz herhangi bir şey kopyalamayı test etmedim ama işe yarayabilir gibi görünüyor.
Wouter

1

Yeni oluşturulan dosyalar için (mevcut nesneler DEĞİL), AWS'nin yeni işlevlerinden yararlanabilirsiniz. Bölgeler Arası Replikasyondur (S3 paketi için "Sürüm Oluşturma" altında). Yeni nesneleri farklı bir hesaptaki bir pakete kopyalamanıza izin verecek bir politika oluşturabilirsiniz.

Mevcut nesneler için, AWS gelecekte bunun için yerel işlevsellik sunmadığı sürece, nesnelerinizi başka bir yöntem kullanarak kopyalamanız gerekecektir.


0

Aşağıdakileri çalıştırarak bunu yapabilirsiniz:

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

  1. Kaynak Hesap'taki kaynak pakete bir paket politikası ekleyin.

  2. Hedef Hesaptaki bir kullanıcıya veya role bir AWS Identity and Access Management (IAM) politikası ekleyin.

  3. Hesaplar arası taşıma işlemini gerçekleştirmek için Hedef Hesap'ta IAM kullanıcısını veya rolünü kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.