Всем привет.
Хочу поделиться скриптом для $subj. Возможно, кому-то он окажется полезен.
Постановка задачи: есть некоторое количество EC2-серверов в AWS, разбросанных по разным регионам. Требуется автоматизировать их резервное копирование так, чтобы восстановление было легким и быстрым.
Собственно, сам скрипт: ec2-automate-backup2ami.sh
Описание: README.backup2ami.md
Скрипт-обертка для запуска по крону: ec2-backup-wrapper.sh
Для работы скрипта предварительно необходимо:
Кронтаб выглядит примерно так:
Результат работы скрипта записывается в лог-файл вида ec2-automate-backup2ami.stage.log. В случае ошибки выполнения он будет отправлен на указанные почтовые адреса.
Стоит обратить внимание, что файл с параметрами называется .stage, а скрипт вызывается с названием без точки.
После успешного выполнения, в AWS AMI появится образ с именем ec2ab_server.domain.cc_YYYY-MM-DD и со следующими тэгами:
PS Скрипт создан на основе ec2-automate-backup (бэкап EBS-дисков, без итерации по регионам) от colinbjohnson, за что ему большое спасибо!
PPS Возможно, под Mac OS/X скрипт будет работать неправильно (см. четвертую строчку в функции get_purge_after_date()), но у меня возможности проверить нет.
PPPS Перед созданием снэпшотов скрипт не сбрасывает буферы файловых систем, поэтому бэкап может оказаться неконсистентным. Для создания консистентных снэпшотов лучше использовать ec2-consistent-snapshot
Хочу поделиться скриптом для $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