nikolaymatrosov / go-yc-serverless-snapshot

A complete solution to make periodic Disc snapshots in Yandex Cloud rewritten in Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Это переписанный на Go пример из https://github.com/nikolaymatrosov/yc-serverless-snapshot

Принцип работы

В облаке существует лимит на количество одновременно запущенных в облаке операций. По умолчанию он равен 15.

Это значит, что если мы хотим делать снепшоты более чем 15 дисков, простое решени с одной функцией которая запустит оперции создания снепшота нам не подойдет.

Чтобы не заморачиваться с ретраями и ожиданием окончания создания снепшота можно воспользоваться очередью сообщений.

И так, первая функция, которая будет триггериться по cron'у будет складывать в очередь сообщений задания для второй функции.

Вторая функция будет срабатывать по триггеру, который мы свяжем с очередью сообщений, будет как раз выполнять полезную работу — создавть снепшоты.

В случае если Compute API ответит нам ошибкой, например потому, что превышенно квота на одновремнно запущенные операции, функция выбросит исключение. Сообщение не будет удалено из очереди и через некоторое время снова станет доступно для вычитывания. Таким образом мы получим автоматические ретраи.

create snapshots diagram

С отчисткой старых снепшотов все проще. При создании снепшота ему проставляется лейбл expiration_ts содержащий unix-timestamp когда этот снепшот можно удалить. По cron будет срабатывать триггер и запускать функцию удаления просроченных снепшотов. Тут с ограничениями на количество операций я не сталкнулся.

cleanup snapshots diagram

Deploy

MacOs (Linux)

Предполагается что у вас уже настроены yc и s3cmd. Они понадобятся для скрипта деплоя.

Чтобы задеплоить функции в ваше облако выполните:

  1. Создать файл .env из шаблона из .env.template и заполнить
  2. ./script/create.sh создаст все необходимые объекты в облаке: 3 функции, очередь сообщений и 3 триггера.
  3. ./script/deploy.sh

Windows

Deploy script можно запустить в mingw (git bash). Для его корректной работы вам может понадобиться

  1. Скачать и установить GnuZip
  2. Прописать GnuZip в path.

Возможно потребуются права администаратора.

About

A complete solution to make periodic Disc snapshots in Yandex Cloud rewritten in Go

License:MIT License


Languages

Language:Go 83.5%Language:Shell 16.5%