Спочатку розміщено в моєму блозі: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
Синхронізуйте свій сегмент S3 із сервером EC2 періодично
Цього можна легко досягти за допомогою декількох утиліт командного рядка, які дозволяють синхронізувати віддалений сегмент S3 з локальною файловою системою.
s3cmd
Спочатку s3cmd
виглядав надзвичайно перспективно. Однак, спробувавши його на моєму величезному відрі S3 - його не вдалося масштабувати, помилившись з Segmentation fault
. Однак це добре працювало на невеликих відрах. Оскільки це не спрацювало на величезні відра, я вирішив знайти альтернативу.
s4cmd
Новіша багатопотокова альтернатива s3cmd
. Виглядав ще більш перспективним, однак, я помітив, що він продовжує повторно завантажувати файли, які вже були в локальній файловій системі. Це не та поведінка, яку я очікував від команди синхронізації. Він повинен перевірити, чи вже існує віддалений файл локально (перевірка розміру / розміру файлу буде акуратним), і пропустити його під час наступного запуску синхронізації в тому ж цільовому каталозі. Я відкрив випуск ( bloomreach / s4cmd / # 46 ), щоб повідомити про цю дивну поведінку. Тим часом я взявся знайти іншу альтернативу.
awscli
А потім я знайшов awscli
. Це офіційний інтерфейс командного рядка Amazon для взаємодії з різними хмарними службами, включаючи S3.
Він надає корисну команду синхронізації, яка швидко та легко завантажує віддалені файли сегмента у вашу локальну файлову систему .
$ aws s3 sync 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 install 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 sync 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 / sh
# Повторіть поточну дату та час
ехо '-----------------------------'
дата
ехо '-----------------------------'
ехо ''
# Ініціалізація ехо-сценарію
echo 'Синхронізація віддаленого сегмента S3 ...'
# Фактично запустіть команду синхронізації (замініть {BUCKET_NAME} вашим іменем сегмента S3)
/ usr / bin / aws s3 sync 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
сценарій щогодини (вказаний через параметри minute: 0 і hour: *) і передавати вихідні дані сценарію до sync.log
файлу в нашому s3
каталозі:
0 * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
Ви повинні додати цей рядок унизу crontab
файлу, який редагуєте. Потім продовжуйте і зберігайте файл на диску, натискаючи Ctrl + W, а потім Enter . Після цього ви можете вийти nano
, натиснувши Ctrl + X . crontab
тепер запускатиме завдання синхронізації щогодини.
Порада професіонала: Ви можете перевірити, чи щогодинне завдання cron успішно виконується /home/ubuntu/s3/sync.log
, перевіривши, перевіривши його вміст на дату та час виконання та перевіривши журнали, щоб побачити, які нові файли були синхронізовані.
Все готово! Тепер ваш сегмент S3 буде автоматично синхронізований з вашим сервером EC2 щогодини, і ви повинні бути готові до роботи. Зверніть увагу, що з часом, коли ваш сегмент S3 збільшується, можливо, вам доведеться збільшувати розмір EBS вашого сервера EC2 для розміщення нових файлів. Ви завжди можете збільшити розмір гучності EBS, дотримуючись цього посібника .