[Из песочницы] Скрипт для резервного копирования EC2-instance в AMI

Всем привет.Хочу поделиться скриптом для $subj. Возможно, кому-то он окажется полезен.

Постановка задачи: есть некоторое количество EC2-серверов в AWS, разбросанных по разным регионам. Требуется автоматизировать их резервное копирование так, чтобы восстановление было легким и быстрым.Собственно, сам скрипт: ec2-automate-backup2ami.shОписание: README.backup2ami.mdСкрипт-обертка для запуска по крону: ec2-backup-wrapper.sh

Для работы скрипта предварительно необходимо:

Установить пакет ec2-api-tools (у меня он версии 1.6.7.3) Подредактировать скрипт-обертку, указав путь к ec2-automate-backup2ami.sh и к лог-файлу Создать в AWS IAM отдельного пользователя для бэкапов и назначить ему похожую политику: { «Version»:»2012–10–17», «Statement»: [ { «Sid»: «Stmt1389911824000», «Effect»: «Allow», «Action»: [ «ec2: CreateImage», «ec2: CreateSnapshot», «ec2: CreateTags», «ec2: DeleteSnapshot», «ec2: DeregisterImage», «ec2: DescribeRegions», «ec2: DescribeSnapshotAttribute», «ec2: ModifySnapshotAttribute», «ec2: DescribeImages», «ec2: DescribeInstances», «ec2: DescribeSnapshots», «ec2: DescribeTags», «ec2: DescribeVolumeAttribute», «ec2: DescribeVolumeStatus», «ec2: DescribeVolumes» ], «Resource»: [ »*» ] } ] } Создать файл с параметрами доступа для созданного пользователя: [ec2-user@zenoss ~]$ cat .stage export AWS_ACCESS_KEY=access_key export AWS_SECRET_KEY=secret_key export AWS_ACCESS_KEY_ID=access_key export AWS_SECRET_ACCESS_KEY=secret_key Указать EC2_HOME Пометить каждый инстанс, требующий бэкапа, тэгом Backup со значением true Кронтаб выглядит примерно так: [ec2-user@backup ~]$ crontab -l PATH=$PATH:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin EC2_HOME=/usr/local SHELL=/bin/bash

00 2 * * * ./ec2-backup-wrapper.sh stage «alerts1@mydomain.cc alerts2@mydomain.cc» Результат работы скрипта записывается в лог-файл вида ec2-automate-backup2ami.stage.log. В случае ошибки выполнения он будет отправлен на указанные почтовые адреса.

Стоит обратить внимание, что файл с параметрами называется .stage, а скрипт вызывается с названием без точки.

После успешного выполнения, в AWS AMI появится образ с именем ec2ab_server.domain.cc_YYYY-MM-DD и со следующими тэгами:

Name — название инстанса EC2 InitiatingHost — FQDN бэкап-сервера PurgeAfterFE — дата удаления образа в формате unix time PurgeAfter — дата удаления образа в формате YYYY-MM-DD (исключительно для удобства админа, скрипт использует PurgeAfterFE) PurgeAllow — разрешает автоматическое удаление образа (по умолчанию — true) Instance — ID инстанса EC2 Created — дата создания образа в формате YYYY-MM-DD PS Скрипт создан на основе ec2-automate-backup (бэкап EBS-дисков, без итерации по регионам) от colinbjohnson, за что ему большое спасибо!

PPS Возможно, под Mac OS/X скрипт будет работать неправильно (см. четвертую строчку в функции get_purge_after_date ()), но у меня возможности проверить нет.

PPPS Перед созданием снэпшотов скрипт не сбрасывает буферы файловых систем, поэтому бэкап может оказаться неконсистентным. Для создания консистентных снэпшотов лучше использовать ec2-consistent-snapshot

© Habrahabr.ru