API хостинг-провайдера: что автоматизируют и когда это нужно
Пока сервер один, панель управления закрывает всё: нажали кнопку, машина создалась. Вопрос об API возникает позже, когда серверов становится несколько, а действия начинают повторяться: поднять окружение под ветку, снять копию перед выкаткой, добавить мощности на время распродажи и убрать после.
Разберём, что вообще умеет API провайдера, какие задачи через него решают на практике, при чём тут Terraform и в какой момент это перестаёт быть игрушкой и начинает экономить время.
Что такое API провайдера
Это способ управлять инфраструктурой не мышкой, а запросами из программы. Всё, что вы делаете в личном кабинете, можно сделать вызовом: создать сервер нужной конфигурации, перезагрузить, снять снапшот, добавить IP-адрес, удалить машину.
Работает это по общему принципу: провайдер выдаёт токен, программа отправляет запрос с этим токеном, в ответ получает результат. Токен привязан к аккаунту и заменяет пароль, поэтому обращаться с ним нужно как с паролем.
Кроме самого API у провайдеров обычно есть два надстроенных инструмента:
- CLI - утилита командной строки. Тот же API, но вызывается одной командой и удобен в скриптах.
- Провайдер для Terraform - описание инфраструктуры файлом. Вы задаёте, какие серверы должны существовать, а инструмент приводит реальность к этому описанию.
Что через него автоматизируют
Создание одинаковых окружений. Тестовый стенд под каждую ветку разработки, демо-стенд для клиента, окружение под учебный курс. Руками это десятки одинаковых кликов, скриптом - одна команда, и все стенды гарантированно одинаковые.
Снапшоты по расписанию. Копия перед каждой выкаткой, снапшот раз в сутки, удаление старых по сроку хранения. Резервное копирование перестаёт зависеть от того, вспомнил ли человек, см. резервное копирование VPS.
Масштабирование под нагрузку. Добавить серверов на время распродажи или сезона и убрать после. В связке с почасовой оплатой это прямая экономия: ресурсы существуют ровно столько, сколько нужны.
Инвентаризация и порядок. Список всех серверов с конфигурациями и стоимостью, выгруженный в отчёт. Когда машин больше десятка, это единственный способ не платить за забытые.
При чём тут Terraform
Скрипт на API решает задачу один раз: создал сервер, выполнил, забыл. Terraform работает иначе - он хранит описание того, как инфраструктура должна выглядеть, и при каждом запуске приводит реальность к описанию.
Практическая разница видна в трёх вещах:
- Инфраструктура лежит в репозитории. Видно, кто и когда что менял, изменения проходят через обычный код-ревью.
- Одинаковые окружения воспроизводятся. Тестовый контур поднимается из того же описания, что и боевой, отличаясь парой параметров.
- Ничего не теряется. Забытый сервер, созданный руками мимо описания, становится заметен при следующем запуске.
Обратная сторона - Terraform надо изучить, а описание поддерживать. Для одного-двух серверов это чистые накладные расходы.
Когда это оправдано
Честный ответ: не всегда. Автоматизация имеет смысл, когда экономит больше времени, чем требует на поддержку.
Пока не нужно:
- один-два сервера, которые меняются раз в полгода;
- проект без тестового контура;
- изменения делаются раз в месяц и занимают пять минут.
Уже нужно:
- серверы регулярно создаются и удаляются;
- нужны одинаковые окружения под разработку и бой;
- инфраструктура растёт и падает вслед за нагрузкой;
- в команде несколько человек, и важно, чтобы изменения были прозрачны.
Разумный порядок - не бросаться сразу в Terraform, а начать со скрипта под самую надоевшую задачу. Обычно это снапшот перед выкаткой или подъём тестового стенда. Если скриптов накопилось много и они начали противоречить друг другу, вот тогда пора переходить к описанию инфраструктуры.
Безопасность токена
Пункт, который недооценивают: токен API даёт над аккаунтом столько же власти, сколько пароль, а иногда больше. Через него можно создать десяток дорогих серверов или удалить существующие вместе с данными.
Базовые правила:
- Не хранить токен в репозитории. Место токена - переменные окружения или хранилище секретов, см. как выложить приложение на сервер.
- Отдельный токен под каждую задачу. Скомпрометированный отзывается без остановки всего остального.
- Минимальные права. Если провайдер позволяет ограничить токен только чтением, для отчётов берите такой.
- Отзывать вовремя. Токены уволившихся сотрудников и завершённых проектов не должны жить вечно.
Отдельно про удаление: команда на удаление сервера выполняется мгновенно и без вопросов. Скрипт с ошибкой в условии сносит боевую машину так же охотно, как тестовую, поэтому опасные операции стоит выполнять с явным подтверждением, а копии держать вне сервера.
С чего начать
1. Получить токен в личном кабинете и сохранить его в надёжном месте. 2. Сделать безопасный запрос - например, получить список своих серверов. Так проверяется, что доступ работает. 3. Автоматизировать одно действие, которое надоело выполнять руками. 4. Добавить обработку ошибок. Запрос может не пройти, и скрипт должен об этом сообщить, а не молча продолжить. 5. Перейти к описанию инфраструктуры, когда скриптов станет много.
Актуальный список доступных методов всегда смотрят в документации провайдера: наборы возможностей у всех разные, и универсального API для хостинга не существует.
Частые ошибки
Кладут токен в репозиторий. Даже в приватный: доступ к нему шире, чем кажется, а история хранит всё.
Автоматизируют то, что делается раз в год. Скрипт нужно поддерживать, и на редких задачах он обходится дороже ручной работы.
Не проверяют ответы API. Запрос не прошёл, скрипт продолжил, и на выходе получилось не то, что ожидалось.
Удаляют без подтверждения. Ошибка в условии уносит боевой сервер за секунду, и отменить это нельзя.
Начинают с Terraform ради одного сервера. Инструмент для управления парком, а не для единственной машины.
Считают API заменой мониторингу. Он умеет создавать и удалять, но не следит за состоянием, для этого нужен мониторинг.
Частые вопросы
Что даёт API хостинг-провайдера? Возможность управлять серверами из кода: создавать, перезагружать, снимать снапшоты, менять конфигурацию, удалять. Всё то же, что в панели, но без участия человека.
Чем CLI отличается от API? CLI - утилита, которая обращается к тому же API, но вызывается одной командой. Удобна в скриптах и не требует писать запросы вручную.
Зачем нужен Terraform, если есть скрипты? Скрипт выполняет действие, Terraform хранит описание нужного состояния и приводит инфраструктуру к нему. Это даёт воспроизводимость и историю изменений в репозитории.
Нужен ли API для одного сервера? Как правило нет. Панели достаточно, а поддержка скриптов займёт больше времени, чем сэкономит.
Где хранить токен? В переменных окружения или в хранилище секретов, но не в коде и не в репозитории. Токен равен паролю от аккаунта.
Что автоматизируют в первую очередь? Снапшот перед выкаткой и создание тестовых окружений. Это самые частые повторяющиеся действия, и выигрыш заметен сразу.
Можно ли случайно удалить сервер через API? Да, команда выполняется сразу и без подтверждения. Поэтому опасные операции защищают явной проверкой, а резервные копии хранят вне сервера.
Нужен сервер, которым можно управлять из кода? VPS на NVMe от 459 руб в месяц - панель, API, CLI и провайдер Terraform входят в тариф, площадки в Москве, Казани и Амстердаме. Активация за 3 минуты, первые 7 дней - тестовый период с возвратом средств.