İlk olarak blogumda yayınlandı: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
S3 Paketinizi Düzenli Olarak EC2 Sunucusuna Senkronize Edin
Bu, uzaktaki bir S3 klasörünü yerel dosya sistemiyle eşitlemeyi mümkün kılan birden çok komut satırı yardımcı programını kullanarak kolayca başarılabilir.
s3cmd
İlk başta s3cmd
son derece umut verici görünüyordu. Ancak, muazzam S3 klasörümde denedikten sonra ölçeklenemedi, bir Segmentation fault
. Yine de küçük kovalarda iyi çalıştı. Büyük kovalar için işe yaramadığı için bir alternatif bulmaya başladım.
s4cmd
Daha yeni, çok iş parçacıklı alternatifi s3cmd
. Daha da umut verici görünüyordu, ancak yerel dosya sisteminde zaten mevcut olan dosyaları yeniden indirmeye devam ettiğini fark ettim. Bu, sync komutundan beklediğim türden bir davranış değildi. Uzak dosyanın yerel olarak zaten mevcut olup olmadığını kontrol etmeli (karma / dosya denetimi düzgün olacaktır) ve aynı hedef dizinde bir sonraki senkronizasyon çalışmasında onu atlamalıdır. Bu garip davranışı bildirmek için bir sorun ( bloomreach / s4cmd / # 46 ) açtım . Bu arada başka bir alternatif bulmaya başladım.
awscli
Ve sonra buldum awscli
. Bu, Amazon'un S3 dahil farklı bulut hizmetleriyle etkileşim için resmi komut satırı arayüzüdür.
Uzak kova dosyalarını yerel dosya sisteminize hızlı ve kolay bir şekilde indiren kullanışlı bir senkronizasyon komutu sağlar .
$ aws s3 sync s3: // paket-adınız / ev / ubuntu / s3 / paket-adınız /
Faydaları:
- Ölçeklenebilir - büyük S3 kovalarını destekler
- Çok iş parçacıklı - birden çok iş parçacığı kullanarak dosyaları daha hızlı senkronize eder
- Akıllı - yalnızca yeni veya güncellenmiş dosyaları senkronize eder
- Hızlı - çok iş parçacıklı yapısı ve akıllı senkronizasyon algoritması sayesinde
Yanlışlıkla Silme
Uygun bir şekilde, sync
komut, kaynaktan (S3 demeti) eksikse hedef klasördeki (yerel dosya sistemi) dosyaları silmez ve bunun tersi de geçerlidir. Bu, S3'ü yedeklemek için mükemmeldir - dosyaların klasörden silinmesi durumunda, yeniden senkronize etmek onları yerel olarak silmez. Yerel bir dosyayı silerseniz, kaynak paketten de silinmez.
Ubuntu 14.04 LTS'de awscli kurulumu
Yükleyerek başlayalım awscli
. Bunu yapmanın birkaç yolu var , ancak bunu yüklemenin en kolay yolunu buldum apt-get
.
$ sudo apt-get install awscli
Yapılandırma
Sonra, yapılandırmak gerekir awscli
Eğer almak zorundadırlar bizim Erişim Anahtar Kimliği & Gizli Key ile IAM bir kullanıcı oluşturarak ve ekleyerek, AmazonS3ReadOnlyAccess politikasını. Bu aynı zamanda sizin veya bu kimlik bilgilerine erişim sağlayan herhangi birinin S3 dosyalarınızı silmesini de engeller. S3 bölgenizi, gibi girdiğinizden emin olun us-east-1
.
$ aws yapılandır
Hazırlık
Yerel S3 yedekleme dizinini, tercihen /home/ubuntu/s3/{BUCKET_NAME}
. {BUCKET_NAME}
Gerçek paket adınızla değiştirdiğinizden emin olun .
$ mkdir -p / home / ubuntu / s3 / {BUCKET_NAME}
İlk Senkronizasyon
Devam edelim ve aşağıdaki komutla paketi ilk kez senkronize edelim:
$ aws s3 senkronizasyon s3: // {BUCKET_NAME} / ev / ubuntu / s3 / {BUCKET_NAME} /
Paketin var olduğunu varsayarak, AWS kimlik bilgilerinin ve bölgenin doğru olduğu ve hedef klasörün geçerli olduğu varsayılırsa, awscli
tüm paketi yerel dosya sistemine indirmeye başlayacaktır.
Paketin boyutuna ve İnternet bağlantınıza bağlı olarak, birkaç saniyeden birkaç saate kadar sürebilir. Bu bittiğinde, paketin yerel kopyasını güncel tutmak için otomatik bir cron işi ayarlayacağız.
Bir Cron İşi Ayarlama
Devam edin ve şurada bir sync.sh
dosya oluşturun /home/ubuntu/s3
:
$ nano /home/ubuntu/s3/sync.sh
Aşağıdaki kodu kopyalayıp şuraya yapıştırın sync.sh
:
#! / bin / sh
# Geçerli tarih ve saati yankılayın
Eko '-----------------------------'
tarih
Eko '-----------------------------'
Eko ''
# Yankı betiği başlatma
echo 'Uzak S3 demeti senkronize ediliyor ...'
# Aslında senkronizasyon komutunu çalıştırın ({BUCKET_NAME} yerine S3 paket adınızı yazın)
/ usr / bin / aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
# Echo komut dosyası tamamlama
echo 'Senkronizasyon tamamlandı'
Komut dosyası boyunca iki kez olmak üzere {BUCKET_NAME} kısmını S3 paket adınızla değiştirdiğinizden emin olun .
Pro ipucu: Sen kullanmalıdır /usr/bin/aws
için bağlantısına aws
olarak, ikili crontab
sınırlı kabuk ortamında yürütür komutları ve kendi başına yürütülebilir bulmak mümkün olmayacaktır.
Ardından, chmod
komut dosyası tarafından yürütülebilmesi için emin olun crontab
.
$ sudo chmod + x /home/ubuntu/s3/sync.sh
Gerçekten çalıştığından emin olmak için betiği çalıştırmayı deneyelim:
$ /home/ubuntu/s3/sync.sh
Çıktı şuna benzer olmalıdır:
Ardından, crontab
aşağıdaki komutu çalıştırarak mevcut kullanıcının bilgilerini düzenleyelim :
$ crontab -e
Bu ilk kez çalıştırıyorsanız crontab -e
, tercih edilen bir düzenleyici seçmeniz gerekir. nano
Yeni başlayanlar için birlikte çalışması en kolay olanı seçmenizi tavsiye ederim .
Senkronizasyon Frekansı
crontab
Bir komut yazarak betiğimizi ne sıklıkla çalıştıracağımızı ve betiğin yerel dosya sisteminde nerede bulunduğunu söylememiz gerekir . Bu komutun formatı aşağıdaki gibidir:
mh dom mon dow komutu
Aşağıdaki komut crontab
, sync.sh
komut dosyasını her saat çalıştıracak (dakika: 0 ve saat: * parametreleri ile belirtilir) ve komut dosyasının çıktısını dizinimizdeki bir sync.log
dosyaya yönlendirmesini sağlayacak şekilde yapılandırır s3
:
0 * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
Bu satırı crontab
, düzenlemekte olduğunuz dosyanın altına eklemelisiniz . Ardından devam edin ve Ctrl + W ve ardından Enter tuşlarına basarak dosyayı diske kaydedin . Daha sonra Ctrl + X tuşlarınanano
basarak çıkabilirsiniz . şimdi senkronizasyon görevini her saat çalıştıracak.crontab
Uzman ipucu: Saatlik cron işinin başarıyla yürütüldüğünü inceleyerek /home/ubuntu/s3/sync.log
, yürütme tarihi ve saati için içeriğini kontrol ederek ve hangi yeni dosyaların senkronize edildiğini görmek için günlükleri inceleyerek doğrulayabilirsiniz .
Her şey hazır! S3 demetiniz artık her saat otomatik olarak EC2 sunucunuzla senkronize edilecek ve gitmeniz iyi olur. Zamanla S3 klasörünüz büyüdükçe, yeni dosyaları barındırmak için EC2 sunucunuzun EBS birim boyutunu artırmanız gerekebileceğini unutmayın. Bu kılavuzu izleyerek her zaman EBS birim boyutunuzu artırabilirsiniz .