Скрипт для резервного копирования 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

ссылка на оригинал статьи http://habrahabr.ru/post/256515/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *