Постановка задачи: есть некоторое количество EC2-серверов в AWS, разбросанных
по разным регионам. Требуется автоматизировать их резервное копирование так,
чтобы восстановление было легким и быстрым.
Собственно, сам скрипт: ec2-automate-backup2ami.sh
Описание: README.md
Скрипт-обертка для запуска по крону: ec2-backup-wrapper.sh
Для работы скрипта предварительно необходимо:
Установить пакет ec2-api-tools (у меня он версии 1.7.1.2)
Подредактировать скрипт-обертку ec2-backup-wrapper.sh, указав путь к
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
Кронтаб выглядит примерно так:
[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. Скрипт создан на основе
[[href="https://github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup ec2-automate-backup]]
(бэкап EBS-дисков, без итерации по регионам) от colinbjohnson, за что ему
большое спасибо.
PS2. Возможно под OS X скрипт будет работать неправильно (см. четвертую строчку
в функции get_purge_after_date()), но у меня возможности проверить нет.
|