Автоматический backup дисков в Yandex Cloud (с удалением старых версий)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Главная кнопка
Главная кнопка

Что-то надоело мне вручную делать бэкапы одного проекта, и я отогнав лень, и собрав волю в кулак, решил таки автоматизировать это дело.

За основу я использовал вот эту оригинальную статью из блога Yandex (просмотрите её сначала, чтобы понимать о чем идет речь ниже).

Но так, как мне было лень заморачиваться с зипованием архива, как описано в статье, то я просто скопипастил скрипт в редактор скриптов:

Не забудьте еще создать файл package.json примерно такого содержания:

{
  "name": "snappy-yc",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "author": "bogdoslavik",
  "license": "ISC",
  "dependencies": {
    "yandex-cloud": "^1.3.3"
  }
}

Тут важна версия "yandex-cloud": "^1.3.3" для Node.js 12.

Протестировав скрипт, я убедился что он работает, и создал триггер для запуска этой функции по расписанию.

Но! Моя ленивая натура понимала, что мне всё еще вручную придется удалять старые снапшоты: новые создаваться не будут после привышения квоты на общий размер снапшотов или их количества.

Поэтому я, повторно взял волю в кулак, и решил довести святое бэкап-дело до конца.

Не вдаваясь в подробности про небольшую возню с created_at снапшота, который хранится в волшебном формате google.protobuf.Timestamp родился вот такой простой скрипт:

const ycsdk = require("yandex-cloud/api/compute/v1");
const FOLDER_ID = process.env.FOLDER_ID;
const MAX_DAYS = process.env.MAX_DAYS;
async function handler(event, context) {
    const snapshotService = new ycsdk.SnapshotService();
    const diskService = new ycsdk.DiskService();
    const diskList = await diskService.list({
        folderId: FOLDER_ID,
    });
    
    console.log('Removing old snapshots');
    const {snapshots} = await snapshotService.list({folderId: FOLDER_ID});
    for ( let i in snapshots ) {
        const snapshot = snapshots[i];
        const createdMin = Date.now() / 1000 - (60 * 60 * 24 * MAX_DAYS);
        if ( snapshot && snapshot.createdAt && 
            snapshot.createdAt.seconds.low < createdMin ) {
            snapshotService.delete({snapshotId: snapshot.id});
        }
    }

    console.log('Iterating disks');
    for (const disk of diskList.disks) {
        console.log('disk.id',disk.id, 'name:', disk.name);
        if ('snapshot' in disk.labels) {
            snapshotService.create({
                folderId: FOLDER_ID,
                diskId: disk.id,
                description: disk.name
            });
            console.log('Creating snapshot');
        }
    }
    return {body: 'OK' }
}
exports.handler = handler;

Перфекционисты могут почикать console.log :)

Остается только добавить переменную окружения для скрипта MAX_DAYS - сколько дней хранить снапшоты.

Добавляем переменную MAX_DAYS в редакторе скрипта функции.
Добавляем переменную MAX_DAYS в редакторе скрипта функции.

Уверен, кому-то это сэкономит пару часов драгоценного времени.
Всем благ и надежных бакапов!

Источник: https://habr.com/ru/post/645719/

Интересные статьи

Интересные статьи

Привет, Хабр! Каждый год Trend Micro проводиn глобальную конференцию по облачным технологиям и кибербезопасности CloudSec, чтобы вдохновить всех участников на непрерывное изучение тенденций отрасли, п...
Cloud Logging —отличный сервис для просмотра логов. Но у него есть ограничение —время хранения. Сейчас сервис находится в стадии превью, поэтому логи хранятся три дня. После выхода в General Availabil...
На этот раз статья будет короткой и во многом самоочевидной. Потому что большинство потенциальных пользователей просто не знают о такой возможности, а сама настройка прос...
Open Telekom CloudВ этой статье расскажу о нашем опыте работы над развитием инструментов управления инфраструктурой облачного сервиса Open Telekom Cloud, как мы столкнули...
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...