Зберігання резервних копій в амазонівсьокому льодовику (Amazon Glacier)

Піддався і я модним тенденціям, переношу свою господарку в амазонівські хмари (AWS). Статичні сайти — на S3, домени — на Route 53, поштарку — на EC2. Все це вже працює пару тижнів, політ нормальний. Але тепер необхідно налаштувати резервне копіювання, і почну я з даних EC2-шної машинки.

Для зберігання резервних копій ми будемо використовувати найбільш підходящий для цього сервіс — Льодовик (Glacier). Нічого дивного, його саме для цього і проектували і коштує він зовсім не дорого (на момент написання статті 0,01$ за 1 Гб на місяць).

Коли я тільки збирався налаштовувати цю господарку, я знав що у Glacier є тільки суворий API, який дозволяє оперувати даними як KEY-BLOB. Але виявилось, що амазонці не стоять на місці і інтегрували його з S3, а значить писати своє чудисько для запихання даних не потрібно, підійдуть вже опановані інструменти для роботи з S3.

Ну, S3 так S3, потрібно створити відро (bucket) спеціально для резервних копій. При виборі регіону врахуйте наступне: якщо будете бекапитись з EC2, то логічно вибрати той же регіон, якщо резервні копії будуть завантажуватись з поза меж AWS, то вибирайте найближчий. Думаю, для більшості моїх читачів це буде "Ireland".

Тепер потрібно налаштувати переміщення файлів з S3 у Glacier. Для цього йдемо до налаштувань відра і дивимось у розділ "Lifecycle":

AWS Lifecycle

Додаємо правило, яке назвали "Freazing backups", встановлюємо галочку "Apply to Entire Bucket", адже це відро ми створили тільки для резервних копій. Додаємо "Transition" – переміщення у Glacier через 1 день (нема сенсу довго зберігати резервну копію на дорожчому S3). Додаємо "Expiration" - видалення об'єктів після 32-х днів (Glacier дешевий, але не безкоштовний).

AWS Lifecycle Rule

Після того як відро створено і "замерзання" налаштоване, потрібно створити користувача і надати йому відповідні права доступу. Для цього в консолі керування AWS переходимо до розділу IAM. Процедура створення користувача дуже проста, тільки не забудьте зберегти ключі, вони нам знадобляться при конфігуруванні s3cmd. А ще, я рекомендую зробити для програм і скриптів групу, наприклад "Programms", і помістити нашого користуваа туди.

Коли користувача створено, виділимо його та перейдемо на вкладку "Permissions" (внизу). Щоб надати цьому користувачу права доступу до відра, натисіть "Attach User Policy". Оскільки нам потрібно дотати дозвіл на одну операцію з одним об'єктом, вибираємо "Policy Generator". Вибираємо сервіс до якого потрібно надати доступ (Amazon S3) і дію "PutObject".

AWS Permission

В полі "Amazon Resource Name" вводимо ARN нашого відерка:

arn:aws:s3:::moby.backup/*

Все, тиснемо "Add Statement" і "Continue". Бачимо нашу політику у форматі JSON, натискаємо "Apply Policy". Доступ налаштовано.

На цьому підготовка відра і льодовика закінчена.

Тепер треба організувати запихання наших резервих копій в S3. Для цього скористаємося утилітою s3cmd. Установка і налаштування:

pip install s3cmd
... skip ...
s3cmd --configure

Конфігуратор спитає у вас ключі (Access Key і Secret Key), "Encryption password" вводити не потрібно (цією конфігурацією користуватиметься скрипт), бажано включити HTTPS. Воно само одразу перевірить конфігурацію, якщо все гаразд перейдемо до підготовки резервних копій.

Мені необхідно зробити резервні копії критичної інформації поштового сервера, а це:

  • конфігурація;
  • база даних;
  • пошта.

Пишемо для цього простий bash-скрипт s3backup.sh:

#!/bin/bash

DST=/tmp/s3-backup # Тимчасовий каталог для резервних копій

DBUSER=root # Користувач БД
DBPASS=db_p@ssw0rd # Пароль від БД !!! Погано, тому пильнуйте права на скрипт !!!

DATE=$(date +%Y-%m-%d)

mkdir ${DST}

# Configs
/bin/tar -czf ${DST}/etc-${DATE}.tar.gz -C / etc

# Mail
/bin/tar -czf ${DST}/mail-${DATE}.tar.gz -C / var/mail_virtual

# MySQL
for db in $(echo 'show databases;' | mysql -s -u ${DBUSER} -p${DBPASS}) ; do
    mysqldump --opt --single-transaction -u ${DBUSER} -p${DBPASS} $db | gzip -c > ${DST}/mysql-${db}-${DATE}.sql.gz
done

# S3 sync
s3cmd put ${DST}/* s3://<назва відра>/

rm -rf ${DST}

Обережно!!! Скрипт може містити логін/пароль до БД і скоріш за все супер-користувача :(, тому ОБОВ'ЯЗКОВО встановіть на скрипт права 7000

Дописуємо у crontab виконання скрипта раз на добу у зручний час. От і все, маємо резервні копії даних за 32-а дні.

Бережіть себе і свої дані!