Awalnya diposting di blog saya: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
Sinkronkan Bucket S3 Anda ke Server EC2 Secara Berkala
Ini dapat dengan mudah dicapai dengan memanfaatkan beberapa utilitas baris perintah yang memungkinkan sinkronisasi bucket S3 jarak jauh ke sistem file lokal.
s3cmd
Pada awalnya, s3cmd
terlihat sangat menjanjikan. Namun, setelah mencobanya pada bucket S3 saya yang sangat besar - gagal untuk menskalakan, membuat kesalahan dengan file Segmentation fault
. Itu berhasil dengan baik pada ember kecil. Karena tidak berhasil untuk ember besar, saya mulai mencari alternatif.
s4cmd Alternatif
multi-utas yang lebih baru untuk s3cmd
. Terlihat lebih menjanjikan, bagaimanapun, saya perhatikan bahwa itu terus mengunduh ulang file yang sudah ada di sistem file lokal. Itu bukan jenis perilaku yang saya harapkan dari perintah sinkronisasi. Ini harus memeriksa apakah file jarak jauh sudah ada secara lokal (pemeriksaan hash / filesize akan rapi) dan melewatkannya di sinkronisasi berikutnya yang dijalankan pada direktori target yang sama. Saya membuka masalah ( bloomreach / s4cmd / # 46 ) untuk melaporkan perilaku aneh ini. Sementara itu, saya mulai mencari alternatif lain.
awscli
Dan kemudian saya temukan awscli
. Ini adalah antarmuka baris perintah resmi Amazon untuk berinteraksi dengan berbagai layanan cloud mereka, termasuk S3.
Ini memberikan perintah sinkronisasi berguna yang dengan cepat dan mudah mengunduh file keranjang jarak jauh ke sistem file lokal Anda .
$ aws s3 sync s3: // nama-keranjang-anda / home / ubuntu / s3 / nama-keranjang-anda /
Manfaat:
- Skalabel - mendukung bucket S3 yang sangat besar
- Multi-utas - menyinkronkan file lebih cepat dengan memanfaatkan banyak utas
- Cerdas - hanya menyinkronkan file baru atau yang diperbarui
- Cepat - berkat sifat multi-utasnya dan algoritme sinkronisasi cerdas
Penghapusan Tidak Disengaja
Dengan mudah, sync
perintah tidak akan menghapus file di folder tujuan (sistem file lokal) jika hilang dari sumber (S3 bucket), dan sebaliknya. Ini sempurna untuk mencadangkan S3 - jika file terhapus dari bucket, sinkronisasi ulang tidak akan menghapusnya secara lokal. Dan jika Anda menghapus file lokal, itu juga tidak akan dihapus dari keranjang sumber.
Menyiapkan awscli di Ubuntu 14.04 LTS
Mari mulai dengan menginstal awscli
. Ada beberapa cara untuk melakukan ini, namun saya merasa paling mudah untuk menginstalnya melalui apt-get
.
$ sudo apt-get install awscli
Konfigurasi
Selanjutnya, kita perlu mengonfigurasi awscli
dengan ID Kunci Akses & Kunci Rahasia, yang harus Anda peroleh dari IAM , dengan membuat pengguna dan melampirkan kebijakan AmazonS3ReadOnlyAccess . Ini juga akan mencegah Anda atau siapa pun yang memperoleh akses ke kredensial ini untuk menghapus file S3 Anda. Pastikan untuk masuk ke wilayah S3 Anda, seperti us-east-1
.
$ aws konfigurasi
Persiapan
Mari persiapkan direktori backup S3 lokal, sebaiknya di /home/ubuntu/s3/{BUCKET_NAME}
. Pastikan untuk mengganti {BUCKET_NAME}
dengan nama keranjang Anda yang sebenarnya.
$ mkdir -p / home / ubuntu / s3 / {BUCKET_NAME}
Sinkronisasi Awal
Mari lanjutkan dan sinkronkan bucket untuk pertama kalinya dengan perintah berikut:
$ aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
Dengan asumsi bucket ada, kredensial dan wilayah AWS sudah benar, dan folder tujuan valid, awscli
akan mulai mengunduh seluruh bucket ke sistem file lokal.
Bergantung pada ukuran bucket dan koneksi internet Anda, proses ini dapat berlangsung dari beberapa detik hingga berjam-jam. Setelah selesai, kami akan melanjutkan dan menyiapkan tugas cron otomatis untuk terus memperbarui salinan lokal bucket.
Menyiapkan Cron Job
Lanjutkan dan buat sync.sh
file di /home/ubuntu/s3
:
$ nano /home/ubuntu/s3/sync.sh
Salin dan tempel kode berikut ke sync.sh
:
#! / bin / sh
# Gema tanggal dan waktu saat ini
echo '-----------------------------'
tanggal
echo '-----------------------------'
echo ''
# Inisialisasi skrip gema
echo 'Menyinkronkan bucket S3 jarak jauh ...'
# Sebenarnya jalankan perintah sinkronisasi (ganti {BUCKET_NAME} dengan nama bucket S3 Anda)
/ usr / bin / aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
# Penyelesaian skrip gema
echo 'Sinkronisasi selesai'
Pastikan untuk mengganti {BUCKET_NAME} dengan nama bucket S3 Anda, dua kali di seluruh skrip.
Kiat pro: Anda harus menggunakan /usr/bin/aws
untuk menautkan ke aws
biner, karena crontab
menjalankan perintah dalam lingkungan shell terbatas dan tidak akan dapat menemukan yang dapat dieksekusi sendiri.
Selanjutnya, pastikan ke chmod
script agar bisa dieksekusi oleh crontab
.
$ sudo chmod + x /home/ubuntu/s3/sync.sh
Mari coba jalankan skrip untuk memastikannya benar-benar berfungsi:
$ /home/ubuntu/s3/sync.sh
Outputnya harus seperti ini:
Selanjutnya, mari edit pengguna saat ini crontab
dengan menjalankan perintah berikut:
$ crontab -e
Jika ini pertama kalinya Anda mengeksekusi crontab -e
, Anda harus memilih editor yang disukai. Saya akan merekomendasikan memilih nano
karena ini yang paling mudah bagi pemula untuk dikerjakan.
Frekuensi Sinkronisasi
Kita perlu memberi tahu crontab
seberapa sering skrip kita dijalankan dan di mana skrip berada pada sistem file lokal dengan menulis perintah. Format untuk perintah ini adalah sebagai berikut:
mh dom mon dow
Perintah berikut mengkonfigurasi crontab
untuk menjalankan sync.sh
skrip setiap jam (ditentukan melalui menit: 0 dan jam: * parameter) dan membuatnya menyalurkan output skrip ke sync.log
file di s3
direktori kami :
0 * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
Anda harus menambahkan baris ini ke bagian bawah crontab
file yang sedang Anda edit. Kemudian, lanjutkan dan simpan file ke disk dengan menekan Ctrl + W lalu Enter . Anda kemudian dapat keluar nano
dengan menekan Ctrl + X . crontab
sekarang akan menjalankan tugas sinkronisasi setiap jam.
Kiat pro: Anda dapat memverifikasi bahwa tugas cron per jam berhasil dijalankan dengan memeriksa /home/ubuntu/s3/sync.log
, memeriksa isinya untuk tanggal & waktu pelaksanaan, dan memeriksa log untuk melihat file baru mana yang telah disinkronkan.
Siap! Bucket S3 Anda sekarang akan disinkronkan ke server EC2 Anda setiap jam secara otomatis, dan Anda siap melakukannya. Perhatikan bahwa seiring waktu, saat bucket S3 Anda semakin besar, Anda mungkin harus meningkatkan ukuran volume EBS server EC2 Anda untuk mengakomodasi file baru. Anda selalu dapat meningkatkan ukuran volume EBS dengan mengikuti panduan ini .