Постановка задачи: есть некоторое количество EC2-серверов в AWS, разбросанных по разным регионам. Требуется автоматизировать их резервное копирование так, чтобы восстановление было легким и быстрым.Собственно, сам скрипт: [[https://github.com/jazzl0ver/aws-missing-tools/blob/master/e... ec2-automate-backup2ami.sh]]
Описание: [[https://github.com/jazzl0ver/aws-missing-tools/blob/master/e... README.md]]
Скрипт-обертка для запуска по крону: [[https://github.com/jazzl0ver/aws-missing-tools/blob/master/e... ec2-backup-wrapper.sh]]
Для работы скрипта предварительно необходимо:
Установить пакет [[http://aws.amazon.com/developertools/351 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/mast... ec2-automate-backup]] (бэкап EBS-дисков, без итерации по регионам) от [[https://github.com/colinbjohnson colinbjohnson]], за что ему большое спасибо.
PS2. Возможно под OS X скрипт будет работать неправильно (см. четвертую строчку в функции get_purge_after_date()), но у меня возможности проверить нет.
URL: https://github.com/jazzl0ver/aws-missing-tools/tree/master/e...
Обсуждается: http://www.opennet.dev/tips/info/2872.shtml