Saya mencari beberapa saran atau praktik terbaik untuk mencadangkan S3 bucket.
Tujuan mencadangkan data dari S3 adalah untuk mencegah kehilangan data karena hal berikut:
- Masalah S3
- masalah di mana saya tidak sengaja menghapus data ini dari S3
Setelah beberapa penyelidikan, saya melihat opsi berikut:
- Gunakan versi http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html
- Salin dari satu bucket S3 ke bucket lain menggunakan AWS SDK
- Cadangkan ke Amazon Glacier http://aws.amazon.com/en/glacier/
- Cadangan ke server produksi, yang dicadangkan sendiri
Opsi apa yang harus saya pilih dan seberapa aman menyimpan data hanya di S3? Ingin mendengar pendapat Anda.
Beberapa tautan berguna:
amazon-web-services
amazon-s3
backup
amazon-glacier
Sergey Alekseev
sumber
sumber
Jawaban:
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 fileSegmentation 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 .
Manfaat:
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 melaluiapt-get
.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, sepertius-east-1
.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.Sinkronisasi Awal
Mari lanjutkan dan sinkronkan bucket untuk pertama kalinya dengan perintah berikut:
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
:Salin dan tempel kode berikut ke
sync.sh
:Pastikan untuk mengganti {BUCKET_NAME} dengan nama bucket S3 Anda, dua kali di seluruh skrip.
Selanjutnya, pastikan ke
chmod
script agar bisa dieksekusi olehcrontab
.Mari coba jalankan skrip untuk memastikannya benar-benar berfungsi:
Outputnya harus seperti ini:
Selanjutnya, mari edit pengguna saat ini
crontab
dengan menjalankan perintah berikut:Jika ini pertama kalinya Anda mengeksekusi
crontab -e
, Anda harus memilih editor yang disukai. Saya akan merekomendasikan memilihnano
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:Perintah berikut mengkonfigurasi
crontab
untuk menjalankansync.sh
skrip setiap jam (ditentukan melalui menit: 0 dan jam: * parameter) dan membuatnya menyalurkan output skrip kesync.log
file dis3
direktori kami :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 keluarnano
dengan menekan Ctrl + X .crontab
sekarang akan menjalankan tugas sinkronisasi setiap jam.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 .
sumber
awscli
mendukung sinkronisasi ini secara otomatis dalamaws s3 sync
perintah. Sepertinya Anda harus menerapkannya secara manual.Dengan mempertimbangkan tautan terkait, yang menjelaskan bahwa S3 memiliki daya tahan 99.999999999%, saya akan membuang kekhawatiran Anda # 1. Sungguh.
Sekarang, jika # 2 adalah kasus penggunaan yang valid dan perhatian nyata bagi Anda, saya pasti akan tetap menggunakan opsi # 1 atau # 3. Yang mana dari mereka? Itu sangat tergantung pada beberapa pertanyaan:
Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable.
Apakah ini baik untukmu?Kecuali penggunaan penyimpanan Anda sangat besar, saya akan tetap menggunakan versi bucket. Dengan cara ini, Anda tidak memerlukan kode / alur kerja tambahan untuk mencadangkan data ke Glacier, ke bucket lain, atau bahkan ke server lain (yang benar-benar merupakan pilihan IMHO yang buruk, mohon lupakan saja).
sumber
Anda dapat mencadangkan data S3 Anda menggunakan metode berikut
Jadwalkan proses backup menggunakan datapipeline AWS, dapat dilakukan dengan 2 cara yang disebutkan di bawah ini:
Sebuah. Menggunakan copyActivity dari datapipeline yang dapat digunakan untuk menyalin dari satu keranjang s3 ke keranjang s3 lain.
b. Menggunakan ShellActivity datapipeline dan perintah "S3distcp" untuk melakukan salinan rekursif folder s3 rekursif dari bucket ke bucket lain (secara paralel).
Gunakan pembuatan versi di dalam bucket S3 untuk mempertahankan versi data yang berbeda
Gunakan glacier untuk mencadangkan data Anda (gunakan saat Anda tidak perlu memulihkan cadangan dengan cepat ke keranjang asli (perlu beberapa saat untuk mendapatkan kembali data dari gletser karena data disimpan dalam format terkompresi) atau saat Anda ingin menyimpan beberapa biaya dengan menghindari penggunaan cadangan s3 bucket fro lainnya), opsi ini dapat dengan mudah disetel menggunakan aturan siklus proses pada bucket s3 fro yang ingin Anda buat cadangannya.
Opsi 1 dapat memberi Anda lebih banyak keamanan katakanlah jika Anda tidak sengaja menghapus bucket s3 asli Anda dan manfaat lainnya adalah Anda dapat menyimpan cadangan Anda di folder data di bucket s3 lain, dengan cara ini Anda mengetahui data apa yang Anda miliki pada tanggal tertentu dan dapat mengembalikan cadangan tanggal tertentu. Itu semua tergantung pada kasus penggunaan Anda.
sumber
Bagaimana jika menggunakan fitur Replikasi Lintas Wilayah yang tersedia di bucket S3 itu sendiri? Berikut beberapa artikel bermanfaat tentang fitur tersebut
sumber
Anda akan berpikir akan ada cara yang lebih mudah saat ini untuk hanya menahan semacam incremental backup di wilayah berbeda.
Semua saran di atas bukanlah solusi yang sederhana atau elegan. Saya tidak benar-benar menganggap gletser sebagai opsi karena saya pikir itu lebih merupakan solusi arsip daripada solusi cadangan. Ketika saya memikirkan cadangan, saya pikir pemulihan bencana dari pengembang junior secara rekursif menghapus ember atau mungkin eksploitasi atau bug di aplikasi Anda yang menghapus barang dari s3.
Bagi saya, solusi terbaik adalah skrip yang hanya mencadangkan satu keranjang ke wilayah lain, satu hari dan satu minggu sehingga jika sesuatu yang buruk terjadi, Anda dapat beralih wilayah saja. Saya tidak memiliki pengaturan seperti ini, saya telah melihat ke dalam hanya belum sempat melakukannya karena akan membutuhkan sedikit usaha untuk melakukan ini, itulah sebabnya saya berharap ada beberapa solusi stok untuk digunakan.
sumber
Sementara pertanyaan ini diposting beberapa waktu lalu, menurut saya penting untuk menyebutkan perlindungan penghapusan MFA dengan solusi lain. OP sedang mencoba menyelesaikan penghapusan data yang tidak disengaja . Otentikasi multi-faktor (MFA) bermanifestasi dalam dua skenario berbeda di sini -
Menghapus versi objek secara permanen - Aktifkan penghapusan MFA pada pembuatan versi bucket.
Tidak sengaja menghapus bucket itu sendiri - Siapkan kebijakan bucket yang menolak penghapusan tanpa autentikasi MFA.
Berpasangan dengan replikasi lintas wilayah dan pembuatan versi untuk mengurangi risiko kehilangan data dan meningkatkan skenario pemulihan.
Berikut adalah posting blog tentang topik ini dengan lebih detail.
sumber
Jika, Kami memiliki terlalu banyak data. Jika Anda sudah memiliki keranjang, pertama kali sinkronisasi akan memakan waktu terlalu lama, Dalam kasus saya, saya memiliki 400GB. Butuh waktu 3 jam untuk pertama kalinya. Jadi saya pikir kita bisa membuat replika adalah solusi yang baik untuk cadangan S3 Bucket.
sumber