go-yc-serverless-snapshot

command module
v0.0.0-...-132ced0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 26, 2023 License: MIT Imports: 12 Imported by: 0

README

Это переписанный на 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.

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

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL