Облачная платформаEvolution

Включение и выключение виртуальных машин по расписанию через REST API с использованием Python-скрипта

Эта статья полезна?

С помощью этого руководства вы научитесь автоматизировать управление состоянием виртуальных машин в Cloud.ru Evolution с помощью REST API и Python-скрипта, который включает и выключает виртуальные машины по расписанию.

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

Вы будете использовать следующие сервисы:

Шаги:

Перед началом работы

  1. Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Получите ключи доступа сервисного аккаунта. Сохраните Key ID (логин) и Key Secret (пароль), они будут нужны для выполнения дальнейших шагов.

  3. В этом практическом доступ к ВМ по SSH будет ограничен IP-адресом вашего компьютера. Узнайте его, например, при помощи сервиса https://2ip.ru/.

1. Разверните ресурсы в облаке

На этом шаге вы подготовите инфраструктуру: создадите подсеть, группу безопасности и виртуальные машины.

Внимание

Все создаваемые ресурсы должны располагаться в одной

.

  1. Создайте тег с названием schedule.

  2. Создайте группу безопасности с названием schedule-sg и добавьте в нее правила:

    Трафик

    Протокол

    Порт

    Тип источника/адресата

    Источник/Адресат

    Входящий

    TCP

    22

    IP-адрес

    IP-адрес вашего компьютера

    Исходящий

    Любой

    Оставьте пустым

    IP-адрес

    0.0.0.0/0

  3. Создайте подеть с названием schedule-subnet в той же зоне доступности, что и группу безопасности.

  4. Создайте виртуальную машину со следующими параметрами:

    • Названиеschedule-master-vm.

    • Зона доступности — та же, что у подсети и группы безопасности.

    • Образ — публичный образ Ubuntu 22.04.

    • Гарантированная доля vCPU10%.

    • vCPU, шт2.

    • RAM, ГБ4.

    • Диски — SSD-диск 30 ГБ.

    • Сетевой интерфейс — выберите тип Публичный IP.

    • Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.

    • Группы безопасностиschedule-sg и группа по умолчанию.

    • Метод аутентификации — выберите публичный ключ и укажите SSH-ключ, созданный ранее.

    Эта виртуальная машина будет запускать Python-скрипт и управлять другими виртуальными машинами.

  5. Создайте три виртуальные машины со следующими параметрами:

    • Названиеschedule-vm-1, dschedule-vm-2 и schedule-vm-3.

    • Тегиschedule.

    • Зона доступности — та же, что у других созданных ресурсов.

    • Образ — публичный образ Ubuntu 22.04.

    • Гарантированная доля vCPU10%.

    • Сетевой интерфейсПодсеть.

    • Подсетьschedule-subnet.

    • Метод аутентификации — выберите пароль и задайте его в поле ниже.

  6. Убедитесь, что ресурсы созданы и отображаются в личном кабинете:

    1. На странице Сети → Группы безопасности отображается группа безопасности schedule-sg со статусом «Создана».

    2. На странице Инфраструктура → Виртуальные машины отображаются виртуальные машины schedule-master-vm, schedule-vm-1, dschedule-vm-2 и schedule-vm-3 со статусом «Запущена».

  7. Запишите публичный IP-адрес виртуальной машины schedule-master-vm. В этом руководстве используется IP-адрес: 176.109.105.170.

2. Выполните тестовый запрос REST API

На этом шаге вы выполните тестовый запрос REST API и получите список виртуальных машин в проекте.

  1. Получите API-токен. Используйте Key ID (логин) и Key Secret (пароль), полученные на подготовительном шаге.

  2. Выполните команду и скопируйте значение access-token. Оно понадобится для выполнения API-запроса.

    cat token.json
  3. Чтобы получить список виртуальных машин в вашем проекте, выполните запрос:

    curl -X GET "https://compute.api.cloud.ru/api/v1/vms?project_id=<project_id>" \
    -H "Authorization: Bearer <access-token>" \
    -H "Content-Type: application/json

    Где:

    • <project_id> — идентификатор проекта, полученный на подготовительном шаге.

    • <access-token> — значение access-token из файла token.json.

  4. В ответе вернется список виртуальных машин проекта. Найдите ВМ с тегом schedule и скопируйте идентификатор зоны доступности: параметр "availability_zone""id".

3. Настройте основную виртуальную машину

На этом шаге вы установите необходимые пакеты и подготовите среду.

  1. Подключитесь к виртуальной машине schedule-master-vm по SSH с использованием публичного IP-адреса.

  2. Обновите систему и установите утилиты:

    sudo apt update && sudo apt upgrade -y
  3. Установите Python:

    sudo apt install python3 python3-venv python3-pip -y
    python3 -m venv ~/.venv
    source ~/.venv/bin/activate
  4. Проверьте установку:

    python3 --version & pip --version
  5. Установите библитеки для отправки запросов и планирования задач:

    pip install requests schedule

4. Подготовьте Python-скрипт для управления ВМ

На этом шаге вы добавите на основную виртульную машину Python-скрипт, который будет обращаться по REST API к сервису «Виртуальные машины» Evolution и включать или выключать в вашем проекте машины с определенным тегом.

Создайте файл vm_sh_time.py и вставьте в него приведенный ниже код, заменив значения переменных.

5. Протестируйте управление ВМ через скрипт

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

  1. В терминале основной виртуальной машины выполните команду немедленного выключения ВМ:

    python3 vm_sh_time.py --test off
  2. В личном кабинете на странице Инфраструктура → Виртуальные машины проверьте, что все виртуальные машины с тегом schedule перешли в статус «Выключается» → «Остановлена».

  3. В терминале основной виртуальной машины выполните команду немедленного включения ВМ:

    python3 vm_sh_time.py --test on
  4. В личном кабинете на странице Инфраструктура → Виртуальные машины проверьте, что все виртуальные машины с тегом schedule перешли в статус «Запускается» → «Запущена».

  5. В терминале основной виртуальной машины запустите выполнение скрипта по расписанию:

    python3 vm_sh_time.py

Результат

Вы научились обращаться к сервису «Виртуальные машины» по REST API и настаивать включение и выключение набора виртуальных машин по расписанию с помощью Python-скрипта.

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