Pierwotnie opublikowane na moim blogu: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
Okresowo synchronizuj swoje wiadro S3 z serwerem EC2
Można to łatwo osiągnąć, wykorzystując wiele narzędzi wiersza poleceń, które umożliwiają synchronizację zdalnego zasobnika S3 z lokalnym systemem plików.
s3cmd
Początkowo s3cmd
wyglądał niezwykle obiecująco. Jednak po wypróbowaniu go na moim ogromnym wiadrze S3 - nie udało się skalować, błędnie z rozszerzeniem Segmentation fault
. Jednak działało dobrze na małych wiaderkach. Ponieważ nie działało to w przypadku dużych łyżek, postanowiłem znaleźć alternatywę.
s4cmd
Nowsza, wielowątkowa alternatywa dla s3cmd
. Wyglądało to jeszcze bardziej obiecująco, jednak zauważyłem, że ponownie pobierał pliki, które były już obecne w lokalnym systemie plików. Nie takiego zachowania oczekiwałem po poleceniu synchronizacji. Powinien sprawdzić, czy zdalny plik już istnieje lokalnie (sprawdzanie skrótu / rozmiaru pliku byłoby niezłe) i pominąć go podczas następnej synchronizacji w tym samym katalogu docelowym. Otworzyłem problem ( bloomreach / s4cmd / # 46 ), aby zgłosić to dziwne zachowanie. W międzyczasie postanowiłem znaleźć inną alternatywę.
awscli
I wtedy znalazłem awscli
. To jest oficjalny interfejs wiersza poleceń Amazon do interakcji z różnymi usługami w chmurze, w tym S3.
Zapewnia przydatne polecenie synchronizacji, które szybko i łatwo pobiera zdalne pliki zasobnika do lokalnego systemu plików .
$ aws s3 sync s3: // nazwa-twojego-wiadra / home / ubuntu / s3 / nazwa-twojego-wiadra /
Korzyści:
- Skalowalne - obsługuje duże łyżki S3
- Wielowątkowy - synchronizuje pliki szybciej dzięki wykorzystaniu wielu wątków
- Inteligentne - synchronizuje tylko nowe lub zaktualizowane pliki
- Szybki - dzięki wielowątkowości i inteligentnemu algorytmowi synchronizacji
Przypadkowe usunięcie
Dogodnie sync
polecenie nie usunie plików w folderze docelowym (lokalny system plików), jeśli brakuje ich w źródle (zasobnik S3) i odwrotnie. Jest to idealne rozwiązanie do tworzenia kopii zapasowych S3 - w przypadku usunięcia plików z zasobnika, ponowna synchronizacja nie spowoduje ich usunięcia lokalnie. A jeśli usuniesz plik lokalny, nie zostanie on również usunięty z zasobnika źródłowego.
Konfigurowanie awscli na Ubuntu 14.04 LTS
Zacznijmy od instalacji awscli
. Istnieje kilka sposobów, aby to zrobić, jednak uważam, że to najłatwiej zainstalować go za pomocą apt-get
.
$ sudo apt-get install awscli
Konfiguracja
Następnie musimy skonfigurować za awscli
pomocą naszego identyfikatora klucza dostępu i tajnego klucza, które należy uzyskać od IAM , tworząc użytkownika i dołączając zasady AmazonS3ReadOnlyAccess . Uniemożliwi to również Tobie lub każdemu, kto uzyska dostęp do tych poświadczeń, usunięcie plików S3. Pamiętaj, aby wprowadzić swój region S3, taki jak us-east-1
.
$ aws configure
Przygotowanie
Przygotujmy lokalny katalog kopii zapasowych S3, najlepiej w formacie /home/ubuntu/s3/{BUCKET_NAME}
. Pamiętaj, aby zastąpić {BUCKET_NAME}
rzeczywistą nazwą zasobnika.
$ mkdir -p / home / ubuntu / s3 / {BUCKET_NAME}
Synchronizacja początkowa
Zsynchronizujmy zasobnik po raz pierwszy za pomocą następującego polecenia:
$ aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
Zakładając, że zasobnik istnieje, poświadczenia i region AWS są poprawne, a folder docelowy jest prawidłowy, awscli
rozpocznie się pobieranie całego zasobnika na lokalny system plików.
W zależności od rozmiaru wiadra i połączenia internetowego może to zająć od kilku sekund do godzin. Kiedy to zrobisz, skonfigurujemy automatyczne zadanie cron, aby zachować aktualność lokalnej kopii zasobnika.
Konfigurowanie zadania Cron
Śmiało i utwórz sync.sh
plik w /home/ubuntu/s3
:
$ nano /home/ubuntu/s3/sync.sh
Skopiuj i wklej następujący kod do sync.sh
:
#! / bin / sh
# Powtórz aktualną datę i godzinę
Echo '-----------------------------'
data
Echo '-----------------------------'
Echo ''
# Inicjalizacja skryptu Echo
echo „Synchronizowanie zdalnego zasobnika S3 ...”
# Właściwie uruchom polecenie synchronizacji (zamień {BUCKET_NAME} na nazwę zasobnika S3)
/ usr / bin / aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
# Zakończenie skryptu echa
echo „Synchronizacja zakończona”
Pamiętaj, aby dwukrotnie zastąpić {BUCKET_NAME} nazwą swojego zasobnika S3 w całym skrypcie.
Porada dla profesjonalistów: Powinieneś użyć /usr/bin/aws
linku do pliku aws
binarnego, ponieważ crontab
wykonuje polecenia w ograniczonym środowisku powłoki i nie będzie w stanie samodzielnie znaleźć pliku wykonywalnego.
Następnie upewnij się, chmod
że skrypt może zostać wykonany przez crontab
.
$ sudo chmod + x /home/ubuntu/s3/sync.sh
Spróbujmy uruchomić skrypt, aby upewnić się, że faktycznie działa:
$ /home/ubuntu/s3/sync.sh
Wynik powinien być podobny do tego:
Następnie edytujmy bieżącego użytkownika, crontab
wykonując następujące polecenie:
$ crontab -e
Jeśli uruchamiasz go po raz pierwszy crontab -e
, musisz wybrać preferowany edytor. Polecam wybrać, nano
ponieważ jest to najłatwiejsze do pracy dla początkujących.
Częstotliwość synchronizacji
Musimy powiedzieć, crontab
jak często uruchamiać nasz skrypt i gdzie znajduje się skrypt w lokalnym systemie plików, pisząc polecenie. Format tego polecenia jest następujący:
mh dom mon dow polecenie
Następujące polecenie konfiguruje crontab
uruchamianie sync.sh
skryptu co godzinę (określone przez parametry minut: 0 i godzina: *) i przesyła dane wyjściowe skryptu do sync.log
pliku w naszym s3
katalogu:
0 * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
Powinieneś dodać tę linię na dole crontab
edytowanego pliku. Następnie kontynuuj i zapisz plik na dysku, naciskając Ctrl + W, a następnie Enter . Następnie można wyjść nano
wciskając Ctrl + X . crontab
będzie teraz uruchamiać zadanie synchronizacji co godzinę.
Wskazówka dla profesjonalistów: możesz sprawdzić, czy godzinowe zadanie cron jest pomyślnie wykonywane /home/ubuntu/s3/sync.log
, sprawdzając, sprawdzając jego zawartość pod kątem daty i godziny wykonania oraz sprawdzając dzienniki, aby zobaczyć, które nowe pliki zostały zsynchronizowane.
Wszystko gotowe! Twój zasobnik S3 będzie teraz automatycznie synchronizowany z serwerem EC2 co godzinę i powinieneś być gotowy. Należy pamiętać, że z biegiem czasu, gdy Twój zasobnik S3 będzie się powiększał, może być konieczne zwiększenie rozmiaru wolumenu EBS serwera EC2, aby pomieścić nowe pliki. Zawsze możesz zwiększyć rozmiar wolumenu EBS, postępując zgodnie z tym przewodnikiem .