โพสต์ครั้งแรกในบล็อกของฉัน: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
ซิงค์ S3 Bucket ของคุณกับเซิร์ฟเวอร์ EC2 เป็นระยะ
สิ่งนี้สามารถทำได้อย่างง่ายดายโดยใช้ยูทิลิตีบรรทัดคำสั่งหลายรายการที่ทำให้สามารถซิงค์บัคเก็ต S3 ระยะไกลกับระบบไฟล์ภายในเครื่องได้
s3cmd
ตอนแรกs3cmd
ดูเด่นสุด ๆ อย่างไรก็ตามหลังจากลองใช้กับถัง S3 ขนาดมหึมาของฉัน - มันล้มเหลวในการปรับขนาดเกิดข้อผิดพลาดกับไฟล์Segmentation fault
. แม้ว่ามันจะทำงานได้ดีกับถังขนาดเล็ก เนื่องจากมันไม่ได้ผลกับถังขนาดใหญ่ฉันจึงหาทางเลือกอื่น
s4cmd
ทางเลือกใหม่แบบมัลติเธรดสำหรับs3cmd
. อย่างไรก็ตามดูมีแนวโน้มมากยิ่งขึ้นฉันสังเกตเห็นว่ามันยังคงดาวน์โหลดไฟล์ซ้ำที่มีอยู่แล้วในระบบไฟล์ในเครื่อง นั่นไม่ใช่พฤติกรรมที่ฉันคาดหวังจากคำสั่งซิงค์ ควรตรวจสอบว่ามีไฟล์ระยะไกลในเครื่องอยู่แล้วหรือไม่ (การตรวจสอบแฮช / ขนาดไฟล์จะเรียบร้อย) และข้ามไปในการซิงค์ครั้งถัดไปที่รันบนไดเร็กทอรีเป้าหมายเดียวกัน ฉันเปิดปัญหา ( bloomreach / s4cmd / # 46 ) เพื่อรายงานพฤติกรรมแปลก ๆ นี้ ในระหว่างนี้ฉันก็ออกเดินทางเพื่อหาทางเลือกอื่น
awscliและจากนั้นผมพบว่า
awscli
นี่คืออินเทอร์เฟซบรรทัดคำสั่งอย่างเป็นทางการของ Amazon สำหรับการโต้ตอบกับบริการคลาวด์ต่างๆรวมถึง S3
มันมีคำสั่งซิงค์ประโยชน์ที่รวดเร็วและง่ายดายดาวน์โหลดไฟล์ถังระยะไกลไปยังระบบแฟ้มในท้องถิ่นของคุณ
$ aws s3 ซิงค์ s3: // your-bucket-name / home / ubuntu / s3 / your-bucket-name /
สิทธิประโยชน์:
- ปรับขนาดได้ - รองรับบัคเก็ต S3 ขนาดใหญ่
- มัลติเธรด - ซิงค์ไฟล์ได้เร็วขึ้นโดยใช้หลายเธรด
- สมาร์ท - ซิงค์เฉพาะไฟล์ใหม่หรือไฟล์ที่อัปเดต
- รวดเร็ว - ด้วยลักษณะมัลติเธรดและอัลกอริธึมการซิงค์อัจฉริยะ
การลบโดยบังเอิญ
สะดวกsync
คำสั่งจะไม่ลบไฟล์ในโฟลเดอร์ปลายทาง (ระบบไฟล์ในเครื่อง) หากไฟล์เหล่านั้นหายไปจากแหล่งที่มา (S3 ที่เก็บข้อมูล) และในทางกลับกัน เหมาะสำหรับการสำรองข้อมูล S3 - ในกรณีที่ไฟล์ถูกลบออกจากที่เก็บข้อมูลการซิงค์ใหม่จะไม่ลบไฟล์เหล่านั้นในเครื่อง และในกรณีที่คุณลบไฟล์ในเครื่องไฟล์นั้นจะไม่ถูกลบออกจากที่เก็บข้อมูลต้นทางเช่นกัน
การตั้งค่า awscli บน Ubuntu 14.04 LTS
awscli
ขอเริ่มต้นด้วยการติดตั้ง มีหลายวิธีในการดำเนินการนี้อย่างไรก็ตามฉันพบว่าการติดตั้งทำได้ง่ายที่สุดผ่านทางapt-get
ไฟล์.
$ sudo apt-get ติดตั้ง awscli
การกำหนดค่า
ต่อไปเราต้องกำหนดค่าawscli
ด้วยรหัสคีย์การเข้าถึงและรหัสลับซึ่งคุณต้องได้รับจากIAMโดยการสร้างผู้ใช้และแนบนโยบายAmazonS3ReadOnlyAccess วิธีนี้จะป้องกันไม่ให้คุณหรือใครก็ตามที่สามารถเข้าถึงข้อมูลรับรองเหล่านี้ลบไฟล์ S3 ของคุณได้ ตรวจสอบให้แน่ใจว่าได้ป้อนภูมิภาค S3 ของคุณเช่นus-east-1
.
$ aws กำหนดค่า
การเตรียมการ
มาเตรียมไดเร็กทอรีสำรอง S3 ในเครื่องโดยเฉพาะใน/home/ubuntu/s3/{BUCKET_NAME}
. อย่าลืมแทนที่{BUCKET_NAME}
ด้วยชื่อที่เก็บข้อมูลจริงของคุณ
$ mkdir -p / home / ubuntu / s3 / {BUCKET_NAME}
การซิงค์เริ่มต้น
ไปข้างหน้าและซิงค์ที่เก็บข้อมูลเป็นครั้งแรกด้วยคำสั่งต่อไปนี้:
$ aws s3 ซิงค์ s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
สมมติว่ามีที่เก็บข้อมูลข้อมูลรับรองและภูมิภาคของ AWS ถูกต้องและโฟลเดอร์ปลายทางถูกต้องawscli
จะเริ่มดาวน์โหลดที่เก็บข้อมูลทั้งหมดไปยังระบบไฟล์ภายใน
ขึ้นอยู่กับขนาดของที่เก็บข้อมูลและการเชื่อมต่ออินเทอร์เน็ตของคุณอาจใช้เวลาไม่กี่วินาทีถึงชั่วโมง เมื่อเสร็จแล้วเราจะดำเนินการต่อและตั้งค่างาน cron อัตโนมัติเพื่อให้สำเนาที่เก็บข้อมูลในเครื่องเป็นปัจจุบันอยู่เสมอ
การตั้งค่างาน Cron
สร้างsync.sh
ไฟล์ใน/home/ubuntu/s3
:
$ nano /home/ubuntu/s3/sync.sh
คัดลอกและวางรหัสต่อไปนี้ลงในsync.sh
:
#! / bin / ช
# สะท้อนวันที่และเวลาปัจจุบัน
ก้อง '-----------------------------'
วันที่
ก้อง '-----------------------------'
ก้อง ''
# การเริ่มต้นสคริปต์ Echo
echo 'กำลังซิงค์ที่เก็บ S3 ระยะไกล ... '
# เรียกใช้คำสั่งการซิงค์จริง (แทนที่ {BUCKET_NAME} ด้วยชื่อที่เก็บข้อมูล S3 ของคุณ)
/ usr / bin / aws s3 ซิงค์ s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
# สคริปต์ Echo เสร็จสมบูรณ์
สะท้อน 'การซิงค์เสร็จสมบูรณ์'
อย่าลืมแทนที่{BUCKET_NAME}ด้วยชื่อที่เก็บข้อมูล S3 ของคุณสองครั้งตลอดทั้งสคริปต์
เคล็ดลับสำหรับมือโปร:คุณควรใช้/usr/bin/aws
เพื่อเชื่อมโยงกับaws
ไบนารีเนื่องจากcrontab
รันคำสั่งในสภาพแวดล้อมเชลล์ที่ จำกัด และจะไม่สามารถค้นหาไฟล์ปฏิบัติการได้ด้วยตัวเอง
ถัดไปให้ตรวจสอบการใช้สคริปต์เพื่อที่จะสามารถดำเนินการโดยchmod
crontab
$ sudo chmod + x /home/ubuntu/s3/sync.sh
ลองเรียกใช้สคริปต์เพื่อให้แน่ใจว่าใช้งานได้จริง:
$ /home/ubuntu/s3/sync.sh
ผลลัพธ์ควรคล้ายกับสิ่งนี้:
ต่อไปเรามาแก้ไขผู้ใช้ปัจจุบันcrontab
โดยดำเนินการคำสั่งต่อไปนี้:
$ crontab -e
หากนี่เป็นครั้งแรกที่คุณดำเนินการcrontab -e
คุณจะต้องเลือกตัวแก้ไขที่ต้องการ ขอแนะนำให้เลือกnano
เนื่องจากเป็นวิธีที่ง่ายที่สุดสำหรับผู้เริ่มต้นในการทำงาน
ความถี่ในการซิงค์
เราต้องบอกcrontab
ความถี่ในการรันสคริปต์ของเราและตำแหน่งที่สคริปต์อยู่บนระบบไฟล์โลคัลโดยการเขียนคำสั่ง รูปแบบสำหรับคำสั่งนี้มีดังนี้:
คำสั่ง mh dom mon dow
คำสั่งต่อไปนี้กำหนดค่าcrontab
ให้รันsync.sh
สคริปต์ทุก ๆ ชั่วโมง (ระบุผ่านพารามิเตอร์นาที: 0 และชั่วโมง: *) และกำหนดให้ไพพ์เอาต์พุตของสคริปต์ไปยังsync.log
ไฟล์ในs3
ไดเร็กทอรีของเรา:
0 * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
คุณควรเพิ่มบรรทัดนี้ที่ด้านล่างของcrontab
ไฟล์ที่คุณกำลังแก้ไข จากนั้นไปข้างหน้าและบันทึกแฟ้มไว้บนฮาร์ดดิสก์โดยการกดCtrl + Wและจากนั้นใส่ จากนั้นคุณสามารถออกnano
ได้โดยการกดCtrl + X crontab
ตอนนี้จะเรียกใช้งานการซิงค์ทุกชั่วโมง
เคล็ดลับสำหรับมืออาชีพ:คุณสามารถตรวจสอบได้ว่างาน cron รายชั่วโมงกำลังดำเนินการสำเร็จโดยการ/home/ubuntu/s3/sync.log
ตรวจสอบตรวจสอบเนื้อหาสำหรับวันที่และเวลาดำเนินการและตรวจสอบบันทึกเพื่อดูว่ามีการซิงค์ไฟล์ใหม่ใดบ้าง
ทุกชุด! ตอนนี้ที่เก็บข้อมูล S3 ของคุณจะซิงค์กับเซิร์ฟเวอร์ EC2 ของคุณทุก ๆ ชั่วโมงโดยอัตโนมัติและคุณควรจะไป โปรดทราบว่าเมื่อเวลาผ่านไปเนื่องจากบัคเก็ต S3 ของคุณมีขนาดใหญ่ขึ้นคุณอาจต้องเพิ่มขนาดโวลุ่ม EBS ของเซิร์ฟเวอร์ EC2 เพื่อรองรับไฟล์ใหม่ คุณสามารถเพิ่มขนาดเสียง EBS ได้ตลอดเวลาโดยทำตามคำแนะนำนี้