На днях я решил немного снизить расходы на Azure.
В моей нынешней компании у нас есть несколько сред, которые мы используем для различных целей, разработки, тестирования, приемки и так далее.
Все эти среды имеют немного разные уровни для различных служб, и мне стало интересно, как снизить уровень App Service Plan в нерабочее время.
Службы App Services имеют некоторые встроенные, хотя и ограниченные, возможности масштабирования, но это касается только масштабирования.
Масштабирование — это процесс добавления дополнительных экземпляров нашего приложения для адаптации к возрастающей нагрузке.
Масштабирование — это процесс запуска приложения на более производительном оборудовании.
Поскольку в App Services нет встроенной поддержки для масштабирования вверх и вниз, мне пришлось придумать собственное решение.
После небольшого исследования я создал учетную запись автоматизации Azure, две книги выполнения, которые по расписанию выполняют уменьшение и увеличение масштаба нашего плана App Service Plan.
Это оказалось очень просто реализовать, но при этом эффективно.
Отказ от ответственности: это лишь один из возможных способов масштабирования сервисов в нерабочее время, вы можете добиться того же с помощью запланированных действий на github или конвейера Azure DevOps, который запускает ваш код IaC с различными значениями параметров Sku, например.
Вот что я создал:
- Учетная запись автоматизации Azure
- Runbooks Azure
- Расписание автоматизации Azure
- Переменные учетной записи автоматизации Azure
Учетная запись автоматизации Azure — Документы
Это ресурс для автоматизации процессов в Azure, где вы определяете рунные книги, расписание и переменные.
Рунные книги Azure — документы
Здесь я определил, что должно происходить, когда расписание запускает рунную книгу и запускает задание.
Существует несколько различных типов рунных книг, здесь я выбрал powershell.
Расписание автоматизации Azure — Документы
Здесь я определяю время выполнения наших рунных книг, я выбрал еженедельное расписание для уменьшения ресурсов вечером и их обратного увеличения рано утром.
Переменные учетной записи Azure automation — Docs
Здесь я определил несколько переменных, используемых в книге выполнения.
Этот шаг необязателен, так как вы можете потенциально закодировать все в самой книге выполнения, но если вы хотите использовать одну и ту же книгу выполнения в разных средах, вы можете определить переменные и считать их в книге выполнения.
Я определил несколько переменных, одну для имени группы ресурсов, одну для имени плана обслуживания приложения и желаемого масштабирования sku и ту, которую нужно использовать в рабочее время.
Для того чтобы книга выполнения успешно изменила план обслуживания приложений, нам также необходимо предоставить идентификатор — либо управляемый идентификатор, либо назначенный пользователем — учетной записи автоматизации, достаточный для предоставления прав на план обслуживания приложений. Я выбрал управляемую идентификацию.
Собираем все вместе
После создания переменных, расписаний и книг выполнения я связал расписание с книгой выполнения.
Я создал два расписания под названиями scale-down и scale-up, два runbook с одинаковыми именами и связал расписание с runbook. Вы связываете рунную книгу с расписанием на странице обзора самой рунной книги.
Последняя недостающая часть — это код самой рунной книги, так что вот его кратчайшая версия (конечно, вы можете сделать ее более умной в зависимости от ваших потребностей), используемая для уменьшения масштаба, версия для увеличения масштаба точно такая же, но с другой переменной для sku.
До следующего!