Yandex Cloud использует квоты для мягкого контроля ресурсов. Квоты можно легко увеличить через специальную форму или техническую поддержку. Однако, очень часто бывает, что о необходимости увеличить квоты мы узнаем поздно, например, когда падает джоба с terraform. Это раздражает, а в некоторых случаях даже может сломать стейт и принести ненужные проблемы.
Не так давно YC добавили возможность получить значения квот через API. И сразу же зачесались руки, поскольку такие проблемы встречались несколько раз. Как результат получилась небольшая утилита ycquoter, которая вычитывает построенный план terraform, получает значения из API по используемым квотам и проверяет влезут ли новые ресурсы без ошибок.
Мы в sports.ru начали использовать эту утилиту в Gitlab pipeline, который раскатывает новые ресурсы в Облако. Теперь появилась дополнительная джоба, которая падает, если новые ресурсы не вписываются в заказанные квоты.
Для работы утилиты потребуется выполнить несколько действий:
Создать сервисный аккаунта с правами
quota-manager.viewer
и дополнительно дать ему права на уровне cloudСоздать статичный ключ и сохранить его в виде файла
Добавить в джобу, которая будет запускать скрипт две переменные YCQOUTER_SA_FILE_PATH и YCQOUTER_CLOUD_UID, указав свои данные.
Выводим план в файл
terraform plan -out=plan.cache
Сгенерировать план в виде json, командой
terraform show -json plan.cache > fullplan.json
Далее передать план в утилиту
cat fullplan.json | ycquoter
Получить сводную таблицу с изменениями, примерно такого вида

Если добавить скрипт в пайплайн, то можно забыть про неожиданные ошибки и беготню с поднятием квот. Кроме того, можно превентивно увеличить квоты, которые подходят к лимиту.
На данный момент добавлены не все квоты и ресурсы, отслеживаются следующие:
compute
VPC
S3
ALB
NLB
K8s
По запросам список будет дополняться. Кроме того, в планах есть добавить подсветку квот которые близки к исчерпанию и подсчет стоимости новых ресурсов.