Сколько стоит облако или как сгореть на счете
Облако удобно: вводите пару команд – и у вас есть сервер, база или кластер, причем без покупки железа и поездки в дата-центр. Но за это удобство приходится платить, и платить особым образом. Облако работает не как разовая покупка сервера, а как счетчик, который тикает все время, пока машина запущена, и считает каждую минуту работы, каждый гигабайт хранения, каждый запрос. Сложность в том, что выключить этот счетчик должны вы сами. Если забыли – он продолжает крутиться, даже когда сервер ничего не делает.
Облако работает как счетчик
Главное при переходе в облако – перестать думать о ресурсе как о покупке: вы берете его в аренду и платите поминутно.

Счет в конце месяца – это не одна строка, а сотни мелких позиций, каждая из которых по отдельности выглядит копеечной. Проблема в том, что копейки складываются, и в том, что многие позиции тикают незаметно для того, кто их завел.
Где деньги утекают незаметно
Большинство утечек становятся очевидными, как только знаешь, куда смотреть.
Чаще всего деньги уходят на забытые ресурсы. Виртуальную машину, базу или кластер поднимают ради эксперимента, заканчивают работу, а ресурс остается работать и продолжает списывать деньги. Через месяц про него уже никто не помнит, но в счете он есть.
Вторая частая статья расходов – исходящий трафик, и на ней попадаются почти все. Входящий трафик в облако обычно бесплатный, а вот исходящий, наружу или между регионами, оплачивается. Перекачка больших объемов данных из облака порой обходится дороже, чем сами серверы.
Отдельно растут хранилища. Логи, резервные копии, снапшоты дисков копятся месяцами, никто их не чистит, при этом оплата идет за каждый гигабайт, а само по себе ничего не удаляется.
Еще одна типичная ошибка – взять ресурс с запасом. Соблазн выбрать машину вдвое мощнее, чем нужно, «на всякий случай», велик, но платите вы за все ядра и всю память, даже если половина простаивает.
Наконец, managed-сервисы из прошлых модулей – managed база, managed Kubernetes – снимают с вас заботу об обслуживании, но стоят дороже, чем если бы вы держали то же самое сами. Вы доплачиваете за удобство, и это нормально, просто об этом стоит помнить.

Как сгорают на счете
Перечисленные утечки работают медленно. Но бывает и быстрое возгорание, когда счет вырастает не за месяц, а за одну ночь.
Самая частая такая история начинается с утекшего ключа – ровно того риска, о котором шла речь в модулях про Git и инфраструктуру. Разработчик случайно загружает в публичный репозиторий токен доступа к облаку. Боты находят его за считанные минуты, поднимают под вашим аккаунтом десятки самых дорогих машин с видеокартами и майнят на них криптовалюту. К утру набегает счет в десятки тысяч. Подобные рассказы в духе «проснулся, а там насчитали пятьдесят тысяч долларов» встречаются в интернете постоянно, и почти все они начинаются одинаково, а именно с ключа, попавшего не туда. Это цена секрета из шага про инфраструктуру, только теперь выраженная в деньгах.
Второй классический способ – рекурсия по недосмотру: функция, которая случайно вызывает сама себя, или логирование, которое записывает лог о записи лога. Ресурс начинает плодиться сам, счетчик крутится с огромной скоростью, и за несколько часов набегает сумма, которую вручную потратить было бы невозможно.
Как не сгореть
Все это лечится дисциплиной и парой настроек.
Первое, что стоит включить в новом облачном аккаунте, – бюджетные алерты. Это те же алерты из модуля про мониторинг, только метрика теперь денежная: облако присылает уведомление, когда расходы за месяц превысили заданную сумму. Сам по себе алерт трату не остановит, но разбудит вас раньше, чем придет счет. А алерт, на который есть конкретное действие, как мы уже знаем, и есть хороший алерт.
Дальше нужно гасить то, что не используется. Здесь прямое применение находит команда terraform destroy: подняли стенд для эксперимента, вечером снесли, и счетчик остановился. Тестовые окружения выключают на ночь и выходные, а те сервисы, что это умеют, при простое масштабируют в ноль, как делает автоскейл в Kubernetes.
Помогает и несколько привычек. Брать ресурс под реальную нагрузку, без избыточного запаса «на всякий случай» – то же правило достаточного инструмента, что и в шаге «когда Kubernetes не нужен», только теперь применительно к деньгам. Помечать ресурсы тегами, чтобы было видно, чей это ресурс и за что идет плата. И, конечно, беречь ключи: утекший токен – это самый крупный одиночный риск для вашего счета. У всей этой культуры контроля облачных расходов даже есть свое название – FinOps.
Причем здесь DevOps
Поскольку инфраструктуру в облаке создает девопс, своими руками через Terraform, счет за нее тоже во многом его зона ответственности. Вопрос «сколько это стоит» становится таким же инженерным, как и «работает ли это»: дорогой ресурс, поднятый без необходимости, – это такая же ошибка, как незакрытый порт. И здесь снова выручает инфраструктура как код: что именно создается, видно прямо в файле, дорогие ресурсы можно заметить на ревью еще до того, как они начнут списывать деньги, а destroy убирает за собой подчистую.
Словарик
| Термин | Что означает |
|---|---|
| Pay-as-you-go | Оплата облака за использованное: время работы, объем, запросы |
| Overprovisioning | Ресурс взят мощнее, чем нужно; платится и за простаивающее |
| Бюджетный алерт | Оповещение о превышении заданной суммы расходов |
| Right-sizing | Подбор размера ресурса под реальную нагрузку |
| FinOps | Культура и практика контроля облачных расходов |