ย้ายไฟล์โดยตรงจากบัญชี S3 หนึ่งไปยังอีกบัญชีหนึ่งหรือไม่?


90

คำถามธรรมดา ๆ แต่ฉันไม่สามารถหาคำตอบได้ การใช้การขนส่งฉันสามารถ "ย้าย" ไฟล์จากที่เก็บข้อมูล S3 หนึ่งในบัญชี AWS หนึ่งไปยังที่เก็บข้อมูล S3 อื่นในบัญชี AWS อื่นได้ แต่สิ่งที่ทำได้จริงคือดาวน์โหลดไฟล์จากไฟล์แรกจากนั้นอัปโหลดไปยังที่สอง

มีวิธีย้ายไฟล์โดยตรงจากบัญชี S3 หนึ่งไปยังอีกบัญชีหนึ่งโดยไม่ต้องดาวน์โหลดระหว่างกันหรือไม่?

คำตอบ:


22

หากคุณกำลังมองหาโซลูชันสำเร็จรูปมีวิธีแก้ปัญหาบางอย่างที่สามารถทำได้ Bucket Explorerทำงานบน Mac และ Windows และสามารถคัดลอกข้ามบัญชีได้เช่นเดียวกับCloudberry S3 Explorer และS3 Browserแต่เป็น Windows เท่านั้นจึงอาจไม่เหมาะกับคุณ

ฉันสงสัยว่าคอนโซล AWSสามารถทำได้ด้วยการตั้งค่าสิทธิ์ที่เหมาะสม แต่ฉันยังไม่ได้ทดสอบ

คุณยังสามารถทำได้โดยใช้AWS APIตราบเท่าที่คุณให้บัญชี AWS ที่คุณใช้สิทธิ์การเขียนไปยังที่เก็บข้อมูลปลายทาง


+1 สำหรับ Bucket Explorer ง่ายกว่าคอนโซลการจัดการ AWS หรือ s3cmd มากสำหรับการคัดลอกที่เก็บข้อมูลระหว่างบัญชี คำแนะนำชุดที่สองใช้ได้ผลกับฉันด้วยการทดลองใช้ฟรี: bucketexplorer.com/documentation/…
LennonR

Cloudberry เป็นวิธีที่จะไป ฟรีแถมยังลากและวางได้ง่ายหลังจากการตั้งค่าที่ง่ายยิ่งขึ้น และไม่ฉันไม่ทำงานที่นั่น :)
skidadon

3
Bucket Explorer ดาวน์โหลดและอัปโหลดข้อมูลซ้ำหรือไม่หรือย้ายข้อมูลระหว่างเซิร์ฟเวอร์ Amazon โดยตรง
Wouter

โปรดทราบว่า Cloudberry รุ่นทดลองใช้ (เวอร์ชัน 5.0.0.32 เป็นอย่างน้อย) มีขีด จำกัด การถ่ายโอน 5GB!
DarthPablo

123

ใช่มีวิธี และมันค่อนข้างเรียบง่ายแม้ว่าจะหายากก็ตาม 8)

ตัวอย่างเช่นสมมติว่าชื่อผู้ใช้บัญชีแรกของคุณคือ acc1@gmail.com และที่สองคือ acc2@gmail.com

เปิดAWS Management Consoleเป็น acc1 ไปที่คุณสมบัติที่เก็บข้อมูล Amazon S3 และในแท็บ "สิทธิ์" ให้คลิก "เพิ่มสิทธิ์เพิ่มเติม" จากนั้นเพิ่มรายการและสิทธิ์ดูสำหรับ "ผู้ใช้ที่พิสูจน์ตัวตน"

ถัดไปใน AWS IAM (สามารถเข้าถึงได้จากแท็บคอนโซล) ของ acc2 สร้างผู้ใช้ที่มีสิทธิ์เข้าถึงที่เก็บข้อมูล S3 แบบเต็ม (เพื่อให้ปลอดภัยยิ่งขึ้นคุณสามารถตั้งค่าการอนุญาตที่แน่นอนได้ แต่ฉันต้องการสร้างผู้ใช้ชั่วคราวสำหรับการถ่ายโอน แล้วลบออก)

จากนั้นคุณสามารถใช้s3cmd (โดยใช้ข้อมูลประจำตัวของผู้ใช้ที่สร้างขึ้นใหม่ใน acc2) เพื่อทำสิ่งต่างๆเช่น:

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

การโอนทั้งหมดจะดำเนินการในฝั่งของ Amazon


9
เคล็ดลับดีๆ! นอกจากนี้สำหรับการซิงค์บุ้งกี๋ทั้งอาหารคุณสามารถใช้rsync s3cmd sync s3://acc1_bucket s3://acc2_bucket
lllllll

6
หากคุณมีปัญหากับ 403 AccessDenied เมื่อคัดลอกไฟล์จากเป้าหมายไปยังโฮสต์โปรดดูโพสต์นี้ อาจมีวิธีอื่นที่จะทำ แต่ผลลัพธ์ที่ได้สำหรับฉัน alfielapeter.com/posts/…
crlane

แล้วถังที่ค่อนข้างใหญ่ล่ะ? บอกว่าในพื้นที่ 50gb ทำให้คุณมีปัญหาหรือไม่?
ianstarz

4
s3cmdสามารถติดตั้งกับ homebrew ได้เช่นกัน fyi
ianstarz

3
หากที่เก็บข้อมูลปลายทางของคุณมีไว้เพื่อให้บริการไฟล์แบบสาธารณะ .. คุณอาจต้องการเพิ่มเป็น--acl-publicอย่างอื่นไฟล์ทั้งหมดจะเป็นแบบส่วนตัว (อย่างน้อยก็สำหรับฉันเมื่อฉันดำเนินการตามคำสั่ง) ด้วยไฟล์ส่วนตัวจำนวนมากฉันต้องเพิ่มนโยบายในที่เก็บข้อมูลเพื่อให้เป็นแบบสาธารณะอีกครั้ง
choonkeat

58

ใช้aws cli (ฉันใช้อินสแตนซ์ ubuntu 14 ec2) และเรียกใช้คำสั่งต่อไปนี้:

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

คุณจะต้องระบุรายละเอียดบัญชีสำหรับบัญชีหนึ่งและมีสิทธิ์เข้าถึงการเขียนสาธารณะหรือการเข้าถึงแบบอ่านสาธารณะสำหรับอีกบัญชีหนึ่ง

การดำเนินการนี้จะซิงค์สองที่เก็บข้อมูล คุณสามารถใช้คำสั่งเดิมอีกครั้งในภายหลังเพื่อซิงค์อย่างรวดเร็ว ส่วนที่ดีที่สุดคือดูเหมือนว่าไม่ต้องการแบนด์วิดท์ใด ๆ (เช่นไฟล์ไม่ได้ส่งผ่านคอมพิวเตอร์ในเครื่อง)


3
ในถังขนาดใหญ่มากฉันโชคดีกว่านี้ s3cmd ดูเหมือนจะหยุดสร้างรายการไฟล์ในที่เก็บข้อมูลแรก มันอาจจะเสร็จสมบูรณ์ แต่ฉันหมดความอดทน
คิดมาก

2
ฉันมีประสบการณ์เดียวกัน ด้วยเหตุผลใดก็ตามดูเหมือนว่าจะทำงานเกี่ยวกับลำดับความสำคัญได้เร็วกว่าaws s3 syncs3cmd cp
Pix0r

2
สิ่งนี้ได้ผลสำหรับฉัน หากคุณพบปัญหาเกี่ยวกับสิทธิ์ให้ลองใช้--grantsตัวเลือก ข้อมูลเพิ่มเติมในเอกสาร: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen

3
--grantsสิทธิ์ที่จะไม่ได้คัดลอกเมื่อคุณซิงค์ดังนั้นคุณจะต้องระบุ ฉันได้เรียนรู้สิ่งนี้หลังจากคัดลอกข้อมูลจำนวนมากจากนั้นต้องทำการซิงค์ซ้ำไปยังที่เก็บข้อมูลใหม่ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersตั้งค่าสิทธิ์ในการอ่านสำหรับผู้ใช้สาธารณะ
Dan Sandland

สิ่งนี้ทำงานได้เร็วกว่าs3cmdสำหรับฉันประมาณ 10 เท่าและยังสามารถซิงค์ไฟล์การเปลี่ยนแปลงแทนที่จะคัดลอกทุกอย่างใหม่หากคุณต้องการเรียกใช้คำสั่งใหม่ในอนาคต - ดีกว่ามาก!
nfm

5

botoทำงานได้ดี ดูกระทู้นี้ครับ การใช้ boto คุณจะคัดลอกวัตถุโดยตรงจากที่เก็บข้อมูลหนึ่งไปยังอีกที่หนึ่งแทนที่จะดาวน์โหลดลงในเครื่องภายในและอัปโหลดไปยังที่เก็บข้อมูลอื่น


การสนทนาที่เชื่อมโยงดูเหมือนจะไม่สามารถตอบคำถามได้เนื่องจาก OP กำลังถามโดยเฉพาะเกี่ยวกับการคัดลอกจากบัญชี AWS หนึ่งไปยังอีกบัญชีหนึ่ง
TolkienWASP

3

บน Mac OS XI ใช้แอปส่งจาก Panic ฉันเปิดหน้าต่างเดียวสำหรับบัญชี S3 แต่ละบัญชี (โดยใช้คีย์ API และความลับ) จากนั้นฉันสามารถลากจากที่เก็บข้อมูลหนึ่งในหน้าต่างหนึ่งไปยังที่เก็บข้อมูลอื่นในหน้าต่างอื่นได้ ไม่จำเป็นต้องดาวน์โหลดไฟล์ในเครื่องก่อนไม่จำเป็นต้องดาวน์โหลดไฟล์ในประเทศเป็นครั้งแรก

แอนดรูถูกต้องส่งจะดาวน์โหลดไฟล์ในเครื่องจากนั้นอัปโหลดไฟล์


2
ฉันมีการส่งและฉันมั่นใจ 99% ว่าการถ่ายโอนที่คุณกำลังอธิบายนั้นดาวน์โหลดไฟล์ไปยังโฟลเดอร์ชั่วคราวจากนั้นอัปโหลดไปยังเซิร์ฟเวอร์อื่น คุณคิดว่าไฟล์ไม่ไหลผ่านคอมพิวเตอร์ของคุณหรือไม่?
Andrew

2
ผมยืนยัน. ส่งดาวน์โหลดและอัพโหลด สิ่งนี้ทำให้สิ่งต่างๆช้าลงอย่างมาก แต่มีข้อดีอย่างมากในการจัดเก็บเนื้อหาที่คัดลอกไว้ภายใต้เจ้าของที่เหมาะสม
Fabio Russo

3

ย้ายไฟล์ S3 จากบัญชีหนึ่งไปยังบัญชีอื่น

ลองพิจารณาว่ามีบัญชีต้นทางสองบัญชีและบัญชีปลายทาง และสองถังsource-bucketและdestination bucket. เราต้องการที่จะย้ายไฟล์ทั้งหมดจากการsource-bucket destination-bucketเราสามารถทำได้ตามขั้นตอนต่อไปนี้:

  1. aws configure
    • กำหนดค่าบัญชีปลายทางของคุณโดยใช้ข้อมูลรับรองหรือบทบาท IAM
  2. สร้างนโยบายผู้ใช้สำหรับผู้ใช้บัญชีปลายทาง
  3. ให้สิทธิ์ผู้ใช้ปลายทางในการเข้าถึงที่เก็บข้อมูลต้นทางโดยแก้ไขนโยบายที่เก็บข้อมูลต้นทางและเพิ่มนโยบายผู้ใช้ของบัญชีปลายทางเข้าไป ด้วยวิธีนี้ผู้ใช้ปลายทางจะมีสิทธิ์เข้าถึงที่เก็บข้อมูลต้นทาง
  4. aws s3 ls s3://source-bucket/
    • การดำเนินการนี้จะตรวจสอบว่าบัญชีปลายทางมีการเข้าถึงที่เก็บข้อมูลต้นทางหรือไม่ เพียงเพื่อยืนยันให้ทำสิ่งนี้
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • สิ่งนี้จะคัดลอกแหล่งที่มาของไฟล์ทั้งหมดไปยังที่เก็บข้อมูลปลายทาง ไฟล์ทั้งหมดถูกคัดลอกโดยใช้แฟล็ก --recursive
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • สิ่งนี้จะย้ายไฟล์ทั้งหมดจากที่เก็บข้อมูลต้นทางไปยังที่เก็บข้อมูลปลายทาง

ทางเลือกอื่นที่คุณสามารถใช้คำสั่ง sync - aws s3 sync s3://source-bucket s3://detination-bucket

สำหรับคำอธิบายที่ดีกว่าให้ไปที่ลิงค์


2

CrossFTPสามารถคัดลอกไฟล์ S3 จากที่เก็บข้อมูลหนึ่งไปยังอีกที่หนึ่งได้โดยตรงโดยไม่ต้องดาวน์โหลด เป็นไคลเอนต์ GUI S3 ที่ทำงานบน Windows, Mac และ Linux


4
ควรสังเกตว่าสิ่งนี้ทำได้เฉพาะกับเวอร์ชันที่ต้องชำระเงินเท่านั้น ไม่ใช่วิธีการแก้ปัญหาฟรี
Michael Brook

2

คุณสามารถใช้ Cyberduck (โอเพ่นซอร์ส)


ใน Windows Store พวกเขาคิดค่าบริการบางอย่างเพื่อดาวน์โหลด แต่จากเว็บไซต์ของพวกเขาคุณสามารถดาวน์โหลดได้ฟรี หลังจากสร้าง AWS Access Key ID และ Secret Access Key ฉันได้จัดการเพื่อเชื่อมต่อกับที่จัดเก็บ S3 ของฉันแล้ว ยังไม่ได้ทดสอบการคัดลอก แต่ดูเหมือนว่าอาจใช้ได้
Wouter

1

สำหรับไฟล์ที่สร้างขึ้นใหม่ (ไม่ใช่วัตถุที่มีอยู่) คุณสามารถใช้ประโยชน์จากฟังก์ชันใหม่จาก AWS เป็นการจำลองแบบข้ามภูมิภาค (ภายใต้ "การกำหนดเวอร์ชัน" สำหรับที่เก็บข้อมูล S3) คุณสามารถสร้างนโยบายที่จะอนุญาตให้คุณจำลองออบเจ็กต์ใหม่ไปยังที่เก็บข้อมูลในบัญชีอื่นได้

สำหรับวัตถุที่มีอยู่คุณจะยังคงต้องคัดลอกวัตถุของคุณโดยใช้วิธีการอื่นเว้นแต่ AWS จะแนะนำฟังก์ชันดั้งเดิมสำหรับสิ่งนี้ในอนาคต


0

สามารถทำได้ด้วยการทำงานต่อไปนี้:

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

  1. แนบนโยบายที่เก็บข้อมูลกับที่เก็บข้อมูลต้นทางในบัญชีต้นทาง

  2. แนบนโยบาย AWS Identity and Access Management (IAM) กับผู้ใช้หรือบทบาทในบัญชีปลายทาง

  3. ใช้ผู้ใช้ IAM หรือบทบาทในบัญชีปลายทางเพื่อทำการย้ายข้ามบัญชี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.