Для того, чтобы уменьшить расходы на инфраструктуру, можно перевести тестовые серверы в облако Amazon и запускать машины только когда они нужны. Чтобы автоматизировать процесс активности серверов и баз данных, Amazon предлагает инструмент AWS Instance Scheduler, который доступен по этой ссылке.
Данный инструмент представляет из себя связку из нескольких облачных сервисов: AWS Dynamo DB, AWS Lambda, AWS EC2 и других сопутствующих им. Связка сервисов организуетcя с помощью стека AWS Cloud Formation.
Для того, чтобы внедрить решение, нужно загрузить шаблон стека и дописать в него свои расписания в конец секции "Resources". Ниже представлены отрывки, определяющие три расписания.
Первое расписание: RUOfficeHours - запускать серверы в 7:30 и останавливать в 19:00 с понедельника по пятницу, часовой пояс Европа/Москва, не форсировать запуск/остановку серверов, если они были выключены/включены вне указанного периода вручную.
Второе расписание: RUStopAfterWorkingDay - останавливать серверы в 18:00 каждый день, часовой пояс Европа/Москва, не форсировать запуск/остановку серверов, если они были выключены/включены вне указанного периода вручную.
"RUOfficeHours": { "Type": "Custom::ServiceInstanceSchedule", "DependsOn": "Main", "Properties": { "Description": "RU Office hours", "ServiceToken": { "Fn::Sub": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${AWS::StackName}-InstanceSchedulerMain", }, "Enforced": "False", "Timezone": "Europe/Moscow", "Periods": [ { "Description": "Working hours on weekdays", "BeginTime": "07:30", "EndTime": "19:00", "WeekDays": "Mon-Fri" } ] } }, "RUStopAfterWorkingDay": { "Type": "Custom::ServiceInstanceSchedule", "DependsOn": "Main", "Properties": { "Description": "RU Stop after working day and don't start", "ServiceToken": { "Fn::Sub": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${AWS::StackName}-InstanceSchedulerMain", }, "Enforced": "False", "Timezone": "Europe/Moscow", "Periods": [ { "Description": "Stopping hours every day", "EndTime": "18:00" } ] } }
Третье расписание имеет двойной период активности: CZOfficeHours - запускать серверы в 7:30 и останавливать в 18:00 каждый день с понедельника по четверг, запускать серверы в 7:30 и останавливать в 17:00 каждую пятницу, часовой пояс Европа/Прага, не форсировать запуск/остановку серверов, если они были выключены/включены вне указанного периода вручную.
"CZOfficeHours": { "Type": "Custom::ServiceInstanceSchedule", "DependsOn": "Main", "Properties": { "Description": "CZ Office hours", "ServiceToken": { "Fn::Sub": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${AWS::StackName}-InstanceSchedulerMain", }, "Enforced": "False", "Timezone": "Europe/Prague", "Periods": [ { "Description": "Working hours on weekdays", "BeginTime": "07:30", "EndTime": "18:00", "WeekDays": "Mon-Thu" }, { "Description": "Working hours in Fridays", "BeginTime": "07:30", "EndTime": "17:00", "WeekDays": "Fri" } ] } }
В примере к заметке можно найти все указанные выше расписания. Более подробно о составлении расписаний и периодах активности можно прочитать в документации к сервису.
Когда шаблон отредактирован, можно создавать из него стек ресурсов в AWS Cloud Formation.

Далее необходимо указать Имя стека, Часовой пояс расписаний, Частоту проверки состояний серверов, Участие в анонимном сборе данных.
В качестве информационных тэгов Started tags и Stopped tags я рекомендую использовать следующие параметры:
Notice=Started by AWS scheduler at {day}.{month}.{year} {hour}:{minute} UTC Notice=Stopped by AWS scheduler at {day}.{month}.{year} {hour}:{minute} UTC

На странице опций ничего менять не надо.

На странице обзора настроек стека нужно поставить параметр, разрешающий изменять роли IAM.

Дождаться окончания создания стека.

Если все этапы прошли без ошибок, то будут созданы следующие ресурсы: таблицы Dynamo DB, функция Lambda, роли IAM.



Чтобы приписать сервер к какому-нибудь расписанию, определенному ранее в шаблоне стека, необходимо создать тег Schedule и присвоить ему значение равное <Имя стека>-<Имя расписания>, например cfn-StartStopScheduler-RUStopAfterWorkingDay.

Настройка автоматического запуска и остановки серверов Amazon Web Services завершена.