Всем привет.

Хочу поделиться скриптом для $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

Комментарии (0)