กำลังดาวน์โหลด S3 bucket ทั้งหมดหรือไม่


705

ฉันสังเกตว่าดูเหมือนจะไม่มีตัวเลือกให้ดาวน์โหลดทั้งชุด S3 จากคอนโซลการจัดการ AWS

มีวิธีง่ายๆในการคว้าทุกอย่างในถังของฉันหรือไม่? ฉันกำลังคิดที่จะทำให้โฟลเดอร์สาธารณะเป็นสาธารณะใช้wgetเพื่อคว้ามันทั้งหมดแล้วทำให้มันเป็นส่วนตัวอีกครั้ง แต่ฉันไม่รู้ว่ามีวิธีที่ง่ายกว่านี้หรือไม่


4
อย่างที่หลายคนพูดว่าaws s3 syncดีที่สุด แต่ไม่มีใครชี้ให้เห็นถึงตัวเลือกที่ทรงพลัง: dryrun. ตัวเลือกนี้จะช่วยให้คุณเห็นสิ่งที่จะได้รับการดาวน์โหลด / อัปโหลดจาก / ไปยัง s3 syncเมื่อคุณกำลังใช้ สิ่งนี้มีประโยชน์จริง ๆ เมื่อคุณไม่ต้องการเขียนทับเนื้อหาในเครื่องของคุณหรือในถังขนาด s3 นี่คือวิธีที่ใช้: aws s3 sync <source> <destination> --dryrunฉันใช้มันตลอดเวลาก่อนที่จะส่งเนื้อหาใหม่ไปยังที่เก็บข้อมูลเพื่อไม่อัปโหลดการเปลี่ยนแปลงที่ไม่ต้องการ
Perimosh

คำตอบ:


1337

AWS CLI

ดูที่ " การอ้างอิงคำสั่ง AWS CLI " สำหรับข้อมูลเพิ่มเติม

AWS เพิ่งเปิดตัวเครื่องมือบรรทัดคำสั่งของพวกเขาซึ่งทำงานได้เหมือน boto และสามารถติดตั้งได้โดยใช้

sudo easy_install awscli

หรือ

sudo pip install awscli

เมื่อติดตั้งแล้วคุณสามารถเรียกใช้:

aws s3 sync s3://<source_bucket> <local_destination>

ตัวอย่างเช่น:

aws s3 sync s3://mybucket .

จะดาวน์โหลดวัตถุทั้งหมดในmybucketไดเรกทอรีปัจจุบัน

และจะส่งออก:

download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt

นี่จะดาวน์โหลดไฟล์ทั้งหมดของคุณโดยใช้การซิงค์ทางเดียว มันจะไม่ลบไฟล์ใด ๆ ที่มีอยู่ในไดเรกทอรีปัจจุบันของคุณเว้นแต่คุณจะระบุและมันจะไม่เปลี่ยนแปลงหรือลบไฟล์ใด ๆ ใน S3 --delete

นอกจากนี้คุณยังสามารถทำการฝากข้อมูล S3 กับ S3 bucket หรือ local กับ S3 bucket bucket ซิงค์

ตรวจสอบเอกสารและตัวอย่างอื่น

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

aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive

การดำเนินการนี้จะแนะนำให้ CLI ดาวน์โหลดไฟล์และปุ่มโฟลเดอร์ทั้งหมดซ้ำภายในPATH/TO/FOLDERไดเรกทอรีภายในที่BUCKETNAMEเก็บข้อมูล


223
การทำงานครั้งแรกaws configureและเพิ่มของคุณaccess keyและsecret access keyซึ่งสามารถพบได้ที่นี่
Erwin Rooijakkers

12
ไปที่นี่สำหรับหน้าต่างติดตั้งaws.amazon.com/cli มันรับรหัสการเข้าถึงจากตัวแปรสภาพแวดล้อม "AWS_ACCESS_KEY_ID" และรหัสลับของคุณจาก "AWS_SECRET_ACCESS_KEY"
แมตต์บอนด์

7
ฉันได้พยายามs3cmdและCyberduckแต่สำหรับฉันawscliคือไกลโดยวิธีที่เร็วที่สุดที่จะดาวน์โหลด ~ 70.000 ไฟล์จากถังของฉัน
อาร์เจน

11
โปรดทราบว่าในขณะที่คำถามที่ถามเกี่ยวกับการดาวน์โหลดเท่านั้นฉันเชื่อว่าคำสั่งนี้จะทำการซิงค์แบบสองทางระหว่างไดเรกทอรีของคุณและ S3 หากคุณไม่ได้พยายามอัปโหลดอะไรตรวจสอบให้แน่ใจว่าไดเรกทอรีปัจจุบันว่างเปล่า
Jesse Crossen

15
@JesseCrossen aws s3 syncคำสั่งนั้นจะไม่อัปโหลดอะไร แต่มันจะลบไฟล์ในเครื่องหากไม่มีอยู่ใน S3 ดูเอกสาร
Flimm

168

คุณสามารถใช้s3cmdเพื่อดาวน์โหลด bucket ของคุณ:

s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder

มีเครื่องมืออื่นที่คุณสามารถใช้เรียกrcloneได้ นี่คือตัวอย่างโค้ดในเอกสาร Rclone:

rclone sync /home/local/directory remote:bucket

5
ค่อนข้างช้า โดยเฉพาะอย่างยิ่งถ้าคุณพยายามที่จะใช้มันทีละน้อย มีวิธีแก้ปัญหาที่มีหลายเธรดหรือไม่ดังนั้นจึงสามารถทำให้แบนด์วิดท์อิ่มตัวได้หรือไม่
Peter Lada

โซลูชันด้านล่างนี้ดีกว่าใช้มาตรฐานมากขึ้นและเปิดให้แพลตฟอร์มมากขึ้น
abc123

สิ่งนี้ใช้ไม่ได้กับผู้ร้องขอจ่ายที่เก็บข้อมูล (ดูarxiv.org/help/bulk_data_s3 ) :-(
Martin Thoma

ฉันจะใช้โซลูชันของคุณได้อย่างไรหากฉันต้องทำการจับคู่รูปแบบสำหรับการดาวน์โหลด คำถามของฉัน: stackoverflow.com/questions/25086722/…
Shrikant Kakani

84

ผมเคยใช้วิธีการที่แตกต่างกันไม่กี่เพื่อคัดลอกข้อมูล Amazon S3 กับเครื่องในท้องถิ่นรวมทั้งs3cmdและไกลโดยที่ง่ายที่สุดคือCyberduck

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

ภาพหน้าจอ


ใช้งานได้ดี! พร้อมใช้งานสำหรับ Windows และ Mac (GPL)
craastad

Cyberduck ยังทำให้ง่ายต่อการดาวน์โหลดไฟล์สาธารณะโดยไม่ระบุชื่อ - s3cmd ดูเหมือนจะต้องการข้อมูลประจำตัว
chrishiestand

ใช้งานได้ดีกับการส่งด้วยเช่นกัน
Undistraction

CLI ให้ข้อผิดพลาดแก่ฉันเมื่อฉันพยายามบันทึกถังของฉันสิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ!
Lazar Kukolj

โอ้ที่มาไม่คาดคิด ฉันใช้ cyberduck ก่อนหน้านี้สำหรับ FTP แต่ไม่เคยคาดหวังว่าจะมีการเชื่อมต่อ S3 ขอบคุณสำหรับคำใบ้ที่ยอดเยี่ยม!
jskierbi

51

คุณมีตัวเลือกมากมายให้ทำ แต่สิ่งที่ดีที่สุดคือการใช้ AWS CLI

นี่คือการผ่าน:

  1. ดาวน์โหลดและติดตั้ง AWS CLI ในเครื่องของคุณ:

  2. กำหนดค่า AWS CLI:

    ป้อนคำอธิบายรูปภาพที่นี่

    ตรวจสอบให้แน่ใจว่าคุณป้อนการเข้าถึงที่ถูกต้องและรหัสลับที่คุณได้รับเมื่อคุณสร้างบัญชี

  3. ซิงค์ S3 bucket โดยใช้:

    aws s3 sync s3://yourbucket /local/path
    

    ในคำสั่งด้านบนแทนที่ฟิลด์ต่อไปนี้:

    • yourbucket >> bucket S3 ของคุณที่คุณต้องการดาวน์โหลด
    • /local/path >> path ในระบบโลคัลที่คุณต้องการดาวน์โหลดไฟล์ทั้งหมด

ฉันใช้สิ่งนี้แทน cyberduck เพราะ cyberduck จำเป็นต้อง "เตรียม" ไฟล์ก่อนที่จะเริ่มดาวน์โหลด สำหรับไฟล์จำนวนมากที่ดูเหมือนว่าต้องใช้เวลานานและฉันไม่สามารถหาข้อมูลเกี่ยวกับสิ่งที่ "เตรียม" ทำจริง CLI เริ่มดาวน์โหลดทันที
Tashows

ตรวจสอบให้แน่ใจว่าคุณมีs3://คำนำหน้าชื่อฝากข้อมูล !!! ด้วยaws s3 lsคุณไม่ต้องการs3://คำนำหน้านั้นแต่คุณต้องการcpคำสั่ง
cjmling

43

วิธีดาวน์โหลดโดยใช้ AWS S3 CLI:

aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive

ในการดาวน์โหลดโดยใช้รหัสให้ใช้ AWS SDK

ในการดาวน์โหลดโดยใช้ GUI ให้ใช้ Cyberduck


1
จะข้ามไฟล์หรือโฟลเดอร์ไปอย่างไร?
Nabin

1
@Nabin คุณสามารถใช้ - รวม & - ยกเว้นด้วย wildcard เพื่อยกเว้นไฟล์หรือโฟลเดอร์บางอย่างเช่นนี้: aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
DarkCenobyte

21

สำหรับ Windows เบราว์เซอร์ S3เป็นวิธีที่ง่ายที่สุดที่ฉันค้นพบ เป็นซอฟต์แวร์ที่ยอดเยี่ยมและฟรีสำหรับการใช้ที่ไม่ใช่เชิงพาณิชย์


3
ฉันเพิ่งลองตัวเลือก "ดาวน์โหลดไฟล์ทั้งหมดเพื่อ ... " (ซึ่งฉันถือว่าเทียบเท่ากับ "ดาวน์โหลดทั้งถัง s3" และบอกว่าฉันจำเป็นต้องใช้รุ่น Pro
แจ็ค Ukleja

2
อัปเดต: แต่ฉันสามารถดาวน์โหลดทั้งโฟลเดอร์ภายในที่เก็บข้อมูลซึ่งเพียงพอสำหรับความต้องการของฉัน ...
Jack Ukleja

ใช่รุ่นฟรีมีข้อ จำกัด คุณสามารถเลือกทั้งหมดและดาวน์โหลดได้ แต่ จำกัด เพียง 2 การถ่ายโอนพร้อมกัน
Hayden Thring

กำลังมองหา windows simple version หลังจากได้รับข้อผิดพลาดในการรองรับ python3 บน Ubuntu 17.1 และ s3cmd ซึ่งทำงานได้ดี
edencorbin

21

หากคุณใช้ Visual Studio ให้ดาวน์โหลด " AWS Toolkit สำหรับ Visual Studio "

หลังจากติดตั้งแล้วให้ไปที่ Visual Studio - AWS Explorer - S3 - ที่เก็บข้อมูลของคุณ - ดับเบิลคลิก

ในหน้าต่างคุณจะสามารถเลือกไฟล์ทั้งหมด คลิกขวาและดาวน์โหลดไฟล์


13

คำตอบโดย @Layke นั้นดี แต่ถ้าคุณมีข้อมูลมากมายและไม่ต้องการรอตลอดไปคุณควรอ่าน "การกำหนดค่า AWS CLI S3 "

คำสั่งต่อไปนี้จะบอก AWS CLI ให้ใช้ 1,000 เธรดเพื่อดำเนินงาน (แต่ละไฟล์ขนาดเล็กหรือส่วนหนึ่งของสำเนาหลายส่วน) และมองไปข้างหน้า 100,000 งาน:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

หลังจากรันสิ่งเหล่านี้คุณสามารถใช้syncคำสั่งแบบง่าย:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

หรือ

aws s3 sync s3://source-bucket/source-path c:\my\local\data\path

บนระบบที่มี CPU 4 คอร์และ RAM 16GB สำหรับกรณีเช่นของฉัน (ไฟล์ 3-50GB) ความเร็วในการซิงค์ / คัดลอกเพิ่มขึ้นจากประมาณ 9.5MiB / s เป็น 700 + MiB / s ความเร็วเพิ่มขึ้น 70x จากการกำหนดค่าเริ่มต้น


1
นี่คือคำตอบที่แท้จริง เพิ่งทดสอบจาก ec2 มันถ่ายโอนประมาณ 2.3GB / นาที ไม่มีตัวเลือกพร้อมกันประมาณ 1GB / นาที ผู้ช่วยชีวิต
Karsten


12

ตัวเลือกอื่นที่สามารถช่วยผู้ใช้ OS X บางคนก็คือการส่ง

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


9

ฉันได้ทำการพัฒนาเล็กน้อยสำหรับ S3 และฉันไม่พบวิธีง่ายๆในการดาวน์โหลดที่เก็บข้อมูลทั้งหมด

หากคุณต้องการโค้ดใน Java jets3t lib นั้นใช้งานง่ายในการสร้างรายการของที่เก็บข้อมูลและวนซ้ำในรายการนั้นเพื่อดาวน์โหลด

ขั้นแรกให้รับชุดกุญแจสาธารณะสาธารณะจากกฏการจัดการ AWS เพื่อให้คุณสามารถสร้างวัตถุ S3 บริการได้:

AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);

จากนั้นรับอาร์เรย์ของวัตถุถังของคุณ:

S3Object[] objects = s3Service.listObjects(YourBucketNameString);

สุดท้ายวนซ้ำแถวลำดับนั้นเพื่อดาวน์โหลดวัตถุทีละรายการด้วย:

S3Object obj = s3Service.getObject(bucket, fileName);
            file = obj.getDataInputStream();

ฉันใส่รหัสการเชื่อมต่อใน threadsafe ซิงเกิล ไวยากรณ์ try / catch ที่จำเป็นถูกละเว้นด้วยเหตุผลที่ชัดเจน

หากคุณต้องการรหัสใน Python คุณสามารถใช้ Boto แทน

หลังจากดูรอบ ๆ BucketExplorer "การดาวน์โหลดที่เก็บข้อมูลทั้งหมด " อาจทำสิ่งที่คุณต้องการ


หากคุณไม่ต้องการโซลูชัน Java ให้ใช้คำตอบ aws cli ด้านบน
jeremyjjbrown

สร้างโฟลเดอร์ใหม่และอื่น ๆ
Jisson

7

AWS sdk API จะเป็นตัวเลือกที่ดีที่สุดสำหรับการอัปโหลดทั้งโฟลเดอร์และ repo ไปยัง s3 และดาวน์โหลด bucket ทั้งหมดของ s3 ไปยังในเครื่อง

สำหรับการอัพโหลดทั้งโฟลเดอร์ไปยัง s3

aws s3 sync . s3://BucketName

สำหรับดาวน์โหลด s3 bucket ทั้งหมดในเครื่อง

aws s3 sync s3://BucketName . 

คุณยังสามารถกำหนดเส้นทางเป็นเหมือน BucketName / Path สำหรับโฟลเดอร์เฉพาะใน s3 เพื่อดาวน์โหลด


6

คุณสามารถทำได้ด้วยhttps://github.com/minio/mc :

mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir

mc ยังรองรับเซสชันดาวน์โหลดต่อการอัพโหลดและอีกมากมาย mcรองรับระบบปฏิบัติการ Linux, OS X และ Windows เขียนใน Golang และวางจำหน่ายภายใต้ Apache เวอร์ชัน 2.0


5

หากคุณใช้ Firefox กับ S3Fox นั่นช่วยให้คุณสามารถเลือกไฟล์ทั้งหมด (shift-select แรกและสุดท้าย) และคลิกขวาและดาวน์โหลดทั้งหมด ... ฉันทำเสร็จแล้วพร้อมไฟล์มากกว่า 500 ไฟล์โดยไม่มีปัญหา


สิ่งนี้ไม่ทำงานสำหรับโฟลเดอร์ย่อยภายในที่ฝากข้อมูลถึงแม้ว่าจะมีการสร้าง "โฟลเดอร์หลอก" ในคอนโซล AWS (ในฐานะของการเขียนความคิดเห็นนี้)
Wesley

ไม่ได้รับการยืนยันฉันมีคีย์ระดับบนสุด = โฟลเดอร์ย่อย = 12k, S3Fox ไม่ได้เริ่มทำงาน ยังยืนยันในการอนุญาตให้แสดงรายการถังทั้งหมด!
Peter Lada

4

เมื่อใน Windows เครื่องมือ GUI ที่ฉันต้องการสำหรับเรื่องนี้คือ CloudBerry Explorer สำหรับ S3. http://www.cloudberrylab.com/free-amazon-s3-explorer-cloudfront-IAM.aspx มีตัวสำรวจไฟล์ที่ค่อนข้างขัดเงาเช่นเดียวกับอินเตอร์เฟส ftp


3

หากคุณมีไฟล์เท่านั้นมี (ไม่มีไดเรกทอรีย่อย) วิธีที่รวดเร็วคือการเลือกไฟล์ทั้งหมด ( clickในครั้งแรกShift+clickในวันสุดท้าย) และตีEnterหรือและเลือกright click Openสำหรับไฟล์ข้อมูลส่วนใหญ่จะทำการดาวน์โหลดโดยตรงไปยังคอมพิวเตอร์ของคุณ


3

ในการเพิ่มตัวเลือก GUI อื่นเราใช้ฟังก์ชัน S3 ของ WinSCPฟังก์ชั่นของมันง่ายมากในการเชื่อมต่อต้องการเพียงแค่รหัสการเข้าถึงและรหัสลับใน UI เท่านั้น จากนั้นคุณสามารถเรียกดูและดาวน์โหลดไฟล์ใดก็ได้ที่คุณต้องการจากที่เก็บข้อมูลที่เข้าถึงได้รวมถึงการดาวน์โหลดซ้ำของโฟลเดอร์ซ้อน

เนื่องจากอาจเป็นสิ่งที่ท้าทายในการล้างซอฟต์แวร์ใหม่ผ่านการรักษาความปลอดภัยและ WinSCP ค่อนข้างแพร่หลายจึงเป็นประโยชน์จริง ๆ เพียงแค่ใช้มันแทนที่จะพยายามติดตั้งยูทิลิตี้พิเศษเพิ่มเติม


1
  1. ผู้ใช้งาน Windows จำเป็นต้องดาวน์โหลด S3EXPLORER จากลิงค์นี้ซึ่งมีคำแนะนำในการติดตั้ง: - http://s3browser.com/download.aspx

  2. จากนั้นให้ข้อมูลประจำตัว AWS ของคุณเช่น secretkey, accesskey และภูมิภาคไปยัง s3explorer ลิงค์นี้มีคำแนะนำการกำหนดค่าสำหรับ s3explorer: คัดลอกวางลิงค์ในเบราว์เซอร์: s3browser.com/s3browser-first-run.aspx

  3. ตอนนี้ถัง s3 ทั้งหมดของคุณจะปรากฏบนแผงด้านซ้ายของ s3explorer

  4. เพียงเลือกที่ฝากข้อมูลและคลิกที่เมนูถังที่มุมบนซ้ายจากนั้นเลือกดาวน์โหลดไฟล์ทั้งหมดไปยังตัวเลือกจากเมนู ด้านล่างนี้เป็นภาพหน้าจอของสิ่งเดียวกัน:

หน้าจอการเลือกถัง

  1. จากนั้นเรียกดูโฟลเดอร์เพื่อดาวน์โหลดที่เก็บข้อมูลในบางสถานที่

  2. คลิกที่ตกลงและการดาวน์โหลดของคุณจะเริ่มขึ้น


1

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


1

นี่คือสิ่งที่จะดาวน์โหลดถังทั้งหมดแสดงรายการของพวกเขาเนื้อหา

    //connection string
    private static void dBConnection() {
    app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
    conn = new AmazonS3Client(app.getAwsCredentials());
    app.setListOfBuckets(conn.listBuckets());
    System.out.println(CONST.getConnectionSuccessfullMessage());
    }

    private static void downloadBucket() {

    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            app.setBucketKey(objectSummary.getKey());
            app.setBucketName(objectSummary.getBucketName());
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                //DOWNLOAD
                try 
                {
                    s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
                    s3Client.getObject(
                            new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
                            new File(app.getDownloadedBucket())
                            );
                } catch (IOException e) {
                    e.printStackTrace();
                }

                do
                {
                     if(app.getBackUpExist() == true){
                        System.out.println("Converting back up file");
                        app.setCurrentPacsId(objectSummary.getKey());
                        passIn = app.getDataBaseFile();
                        CONVERT= new DataConversion(passIn);
                        System.out.println(CONST.getFileDownloadedMessage());
                    }
                }
                while(app.getObjectExist()==true);

                if(app.getObjectExist()== false)
                {
                    app.setNoObjectFound(true);
                }
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
}

/ ---------------------------- วิธีการขยาย ------------------- ------------------ /

//Unzip bucket after download 
public static void unzipBucket() throws IOException {
    unzip = new UnZipBuckets();
    unzip.unZipIt(app.getDownloadedBucket());
    System.out.println(CONST.getFileUnzippedMessage());
}

//list all S3 buckets
public static void listAllBuckets(){
    for (Bucket bucket : app.getListOfBuckets()) {
        String bucketName = bucket.getName();
        System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
    }
}

//Get the contents from the auto back up bucket
public static void listAllBucketContents(){     
    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                app.setBackUpCount(app.getBackUpCount() + 1);   
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
    System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}

}



1

ดังที่ Neel Bhaat ได้อธิบายไว้ในบล็อกนี้มีเครื่องมือต่าง ๆ มากมายที่สามารถนำมาใช้เพื่อจุดประสงค์นี้ได้ บางอันมีให้ AWS ซึ่งส่วนใหญ่เป็นเครื่องมือของบุคคลที่สาม เครื่องมือทั้งหมดเหล่านี้ต้องการให้คุณบันทึกรหัสบัญชี AWS และความลับในเครื่องมือเอง ใช้ความระมัดระวังเป็นอย่างยิ่งเมื่อใช้เครื่องมือของบุคคลที่สามเนื่องจากข้อมูลประจำตัวที่คุณบันทึกอาจทำให้คุณเสียค่าใช้จ่ายทั้งหมดและทำให้คุณตาย

ดังนั้นฉันแนะนำให้ใช้AWS CLI เสมอเพื่อจุดประสงค์นี้ คุณสามารถติดตั้งได้จากลิงค์นี้ ถัดไปเรียกใช้คำสั่งต่อไปนี้และบันทึกคีย์ของคุณค่าลับใน AWS CLI

aws configure

และใช้คำสั่งต่อไปนี้เพื่อซิงค์ AWS S3 Bucket ของคุณกับเครื่องท้องถิ่นของคุณ (เครื่องท้องถิ่นควรติดตั้ง AWS CLI)

aws s3 sync <source> <destination>

ตัวอย่าง:

1) สำหรับ AWS S3 ไปยัง Local Storage

aws s3 sync <S3Uri> <LocalPath>

2) จาก Local Storage ถึง AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) จากถัง AWS s3 ไปยังถังอื่น

aws s3 sync <S3Uri> <S3Uri> 

ตัวอย่างเช่น 3 ฉันจะชี้ไปที่โฟลเดอร์ฝากข้อมูลไปยังโฟลเดอร์ฝากข้อมูลอื่นได้หรือไม่ จริงๆแล้วฉันต้องการซิงค์โฟลเดอร์ฝากข้อมูลไปยังโฟลเดอร์ฝากข้อมูลอื่น
lukai

@lukai ใช่ นี่คือสิ่งที่ฉันได้ให้ไว้ในตัวอย่างที่ 3 คุณเพียงแค่ต้องมีถังฝาก s3 ของแหล่งที่มาและปลายทาง
Keet Sugathadasa

1

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

aws s3 sync s3://bucket-name .

หากคุณต้องการซิงค์ทั้งไดเร็กทอรีโลคัลและ s3 (ในกรณีที่คุณเพิ่มไฟล์บางไฟล์ในโฟลเดอร์โลคัล) ให้รันคำสั่งนี้:

aws s3 sync . s3://bucket-name

1

AWS CLI เป็นตัวเลือกที่ดีที่สุดในการดาวน์โหลด S3 bucket ทั้งหมดในเครื่อง

  1. ติดตั้ง AWS CLI

  2. กำหนดค่า AWS CLI สำหรับการใช้ข้อมูลรับรองความปลอดภัยเริ่มต้นและภูมิภาค AWS เริ่มต้น

  3. ในการดาวน์โหลดคำสั่ง bucket S3 ทั้งหมดให้ใช้

    aws s3 ซิงค์ s3: // yourbucketname localpath

การอ้างอิงเพื่อใช้ AWS cli สำหรับบริการ AWS ต่างๆ: https://docs.aws.amazon.com/cli/latest/reference/


1

คุณสามารถใช้คำสั่ง AWS cli นี้เพื่อดาวน์โหลดเนื้อหาที่เก็บข้อมูล S3 ทั้งหมดไปยังโฟลเดอร์ในเครื่อง

aws s3 sync s3://your-bucket-name "Local Folder Path"

หากคุณเห็นข้อผิดพลาดเช่นนี้

fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

- no-Verify-ssl (บูลีน)

โดยค่าเริ่มต้น AWS CLI ใช้ SSL เมื่อสื่อสารกับบริการ AWS สำหรับการเชื่อมต่อ SSL แต่ละครั้ง AWS CLI จะตรวจสอบใบรับรอง SSL ตัวเลือกนี้จะแทนที่พฤติกรรมเริ่มต้นของการตรวจสอบใบรับรอง SSL การอ้างอิง

ใช้แท็กนี้พร้อมกับคำสั่ง--no-Verify-ssl

aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl

การใช้งานs3 syncได้รับการคุ้มครองข้างต้นหลายครั้งแล้ว + แนะนำให้ใช้--no-verify-sslโดยไม่อธิบายผลกระทบด้านความปลอดภัยของมันเป็นอาชญากรรม
Martin Prikryl

ขอบคุณสำหรับข้อมูลเกี่ยวกับความปลอดภัย ฉันประสบปัญหานี้และแก้ไขได้โดยใช้เอกสารอ้างอิงนี้docs.aws.amazon.com/cli/latest/reference
Dimuthu

1

หากที่เก็บข้อมูลมีขนาดใหญ่มากจะมีคำสั่งเรียกใช้s4cmdซึ่งทำให้การเชื่อมต่อแบบขนานและปรับปรุงเวลาดาวน์โหลด:

หากต้องการติดตั้งบน Debian เช่น

apt install s4cmd

หากคุณมีจุดเล็ก ๆ :

pip install s4cmd

มันจะอ่าน~/.s3cfgไฟล์ถ้ามี (ถ้าไม่ได้ติดตั้งs3cmdและเรียกใช้s3cmd --configure) หรือคุณสามารถระบุ--access-key=ACCESS_KEY --secret-key=SECRET_KEYในคำสั่ง

CLI s3cmdคล้ายกับ ในกรณีของคุณsyncแนะนำให้ใช้เพราะคุณสามารถยกเลิกการดาวน์โหลดและเริ่มต้นใหม่อีกครั้งโดยไม่ต้องดาวน์โหลดไฟล์อีกครั้ง

s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir

ระวังหากคุณดาวน์โหลดข้อมูลจำนวนมาก (> 1TB) สิ่งนี้อาจส่งผลต่อบิลของคุณคำนวณอันดับแรกซึ่งจะเป็นค่าใช้จ่าย


0

ดังที่ @layke กล่าวว่าวิธีที่ดีที่สุดในการดาวน์โหลดไฟล์จาก S3 cli คือความปลอดภัย แต่ในบางกรณีผู้คนจำเป็นต้องใช้ wget เพื่อดาวน์โหลดไฟล์และนี่คือทางออก

aws s3 presign s3://<your_bucket_name/>

การกำหนดล่วงหน้านี้จะทำให้คุณได้รับ URL สาธารณะชั่วคราวซึ่งคุณสามารถใช้เพื่อดาวน์โหลดเนื้อหาจาก S3 โดยใช้ presign_url ในกรณีของคุณโดยใช้ wget หรือไคลเอนต์ดาวน์โหลดอื่น ๆ


0

ลองคำสั่งนี้:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

ตัวอย่างเช่นหากชื่อที่ฝากข้อมูลของคุณคือmyBucketและไดเรกทอรีในเครื่องคือc:\local:

aws s3 sync s3://myBucket c:\local

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ awscli ตรวจสอบการ ติดตั้ง aws cli นี้

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