С помощью этого руководства вы научитесь автоматизировать управление состоянием виртуальных машин в Cloud.ru Evolution с помощью REST API и Python-скрипта, который включает и выключает виртуальные машины по расписанию.
Когда виртуальная машина выключена, она не тарифицируется. Это может быть полезно для выполнения временных задач по расписанию.
Вы будете использовать следующие сервисы:
«Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.
«Публичные IP» — сервис для организации доступа к основной ВМ через интернет.
«Группы безопасности» — сервис для контроля трафика виртуальных машин.
Шаги:
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Получите ключи доступа сервисного аккаунта. Сохраните Key ID (логин) и Key Secret (пароль), они будут нужны для выполнения дальнейших шагов.
В этом практическом доступ к ВМ по SSH будет ограничен IP-адресом вашего компьютера. Узнайте его, например, при помощи сервиса https://2ip.ru/.
1. Разверните ресурсы в облаке
На этом шаге вы подготовите инфраструктуру: создадите подсеть, группу безопасности и виртуальные машины.
Все создаваемые ресурсы должны располагаться в одной
.Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.
Создайте тег с названием schedule.
Создайте группу безопасности с названием schedule-sg и добавьте в нее правила:
Трафик
Протокол
Порт
Тип источника/адресата
Источник/Адресат
Входящий
TCP
22
IP-адрес
IP-адрес вашего компьютера
Исходящий
Любой
Оставьте пустым
IP-адрес
0.0.0.0/0
Создайте подеть с названием schedule-subnet в той же зоне доступности, что и группу безопасности.
Создайте виртуальную машину со следующими параметрами:
Название — schedule-master-vm.
Зона доступности — та же, что у подсети и группы безопасности.
Образ — публичный образ Ubuntu 22.04.
Гарантированная доля vCPU — 10%.
vCPU, шт — 2.
RAM, ГБ — 4.
Диски — SSD-диск 30 ГБ.
Сетевой интерфейс — выберите тип Публичный IP.
Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.
Группы безопасности — schedule-sg и группа по умолчанию.
Метод аутентификации — выберите публичный ключ и укажите SSH-ключ, созданный ранее.
Эта виртуальная машина будет запускать Python-скрипт и управлять другими виртуальными машинами.
Создайте три виртуальные машины со следующими параметрами:
Название — schedule-vm-1, dschedule-vm-2 и schedule-vm-3.
Теги — schedule.
Зона доступности — та же, что у других созданных ресурсов.
Образ — публичный образ Ubuntu 22.04.
Гарантированная доля vCPU — 10%.
Сетевой интерфейс — Подсеть.
Подсеть — schedule-subnet.
Метод аутентификации — выберите пароль и задайте его в поле ниже.
Убедитесь, что ресурсы созданы и отображаются в личном кабинете:
На странице Сети → Группы безопасности отображается группа безопасности schedule-sg со статусом «Создана».
На странице Инфраструктура → Виртуальные машины отображаются виртуальные машины schedule-master-vm, schedule-vm-1, dschedule-vm-2 и schedule-vm-3 со статусом «Запущена».
Запишите публичный IP-адрес виртуальной машины schedule-master-vm. В этом руководстве используется IP-адрес: 176.109.105.170.
2. Выполните тестовый запрос REST API
На этом шаге вы выполните тестовый запрос REST API и получите список виртуальных машин в проекте.
Получите API-токен. Используйте Key ID (логин) и Key Secret (пароль), полученные на подготовительном шаге.
Выполните команду и скопируйте значение access-token. Оно понадобится для выполнения API-запроса.
cat token.jsonЧтобы получить список виртуальных машин в вашем проекте, выполните запрос:
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.
В ответе вернется список виртуальных машин проекта. Найдите ВМ с тегом schedule и скопируйте идентификатор зоны доступности: параметр "availability_zone" — "id".
3. Настройте основную виртуальную машину
На этом шаге вы установите необходимые пакеты и подготовите среду.
Подключитесь к виртуальной машине schedule-master-vm по SSH с использованием публичного IP-адреса.
Обновите систему и установите утилиты:
sudo apt update && sudo apt upgrade -yУстановите Python:
sudo apt install python3 python3-venv python3-pip -ypython3 -m venv ~/.venvsource ~/.venv/bin/activateПроверьте установку:
python3 --version & pip --versionУстановите библитеки для отправки запросов и планирования задач:
pip install requests schedule
4. Подготовьте Python-скрипт для управления ВМ
На этом шаге вы добавите на основную виртульную машину Python-скрипт, который будет обращаться по REST API к сервису «Виртуальные машины» Evolution и включать или выключать в вашем проекте машины с определенным тегом.
Создайте файл vm_sh_time.py и вставьте в него приведенный ниже код, заменив значения переменных.
5. Протестируйте управление ВМ через скрипт
На этом шаге вы проверите работу Python-скрипта, выполнив команды немедленного выключения и включения виртуальных машин, после чего запустите выполнение скрипта по расписанию.
В терминале основной виртуальной машины выполните команду немедленного выключения ВМ:
python3 vm_sh_time.py --test offВ личном кабинете на странице Инфраструктура → Виртуальные машины проверьте, что все виртуальные машины с тегом schedule перешли в статус «Выключается» → «Остановлена».
В терминале основной виртуальной машины выполните команду немедленного включения ВМ:
python3 vm_sh_time.py --test onВ личном кабинете на странице Инфраструктура → Виртуальные машины проверьте, что все виртуальные машины с тегом schedule перешли в статус «Запускается» → «Запущена».
В терминале основной виртуальной машины запустите выполнение скрипта по расписанию:
python3 vm_sh_time.py
Результат
Вы научились обращаться к сервису «Виртуальные машины» по REST API и настаивать включение и выключение набора виртуальных машин по расписанию с помощью Python-скрипта.
Виртуальные машины будут включаться и выключаться по расписанию, указанному конфигурационном файле. Когда ВМ выключена, она не тарифицируется. Вы можете изменить время включения и выключения в Python-скрипте.