Servers - Запуск и остановка AWS серверов по расписанию

Реклама:
Записка от 21.06.2018

Для того, чтобы уменьшить расходы на инфраструктуру, можно перевести тестовые серверы в облако 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"
        
                    }
                ]
            }
        }

В примере к заметке можно найти все указанные выше расписания. Более подробно о составлении расписаний и периодах активности можно прочитать в документации к сервису.

Примечание. Если использовать расписания в шаблонах для Cloud Formation, как описано в этой заметке, то нельзя самостоятельно изменять расписания и периоды в базе данных Dynamo DB, а так же через API к сервису, так как это приведет к конфликту настроек.

Когда шаблон отредактирован, можно создавать из него стек ресурсов в  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 завершена.

Шаблон для создания стека AWS Cloud Formation
Вверх