Приложение реализует следующее API:
- GET /info - возвращает всю информацию о ноде из Metadata API в формате JSON
- GET /load - произвольный метод выполняющий вычислительные операции способные нагрузить CPU ноды. Нужно учесть время исполнения этого метода - он не должен быть долгим, соединение не должно завершаться по таймауту. Один вызов этого метода нагружает все ядра ноды на 100. Время нагрузки задаётся через опциональный параметр timeout и по умолчанию составляет 15 секунд. Пример использования: /load?timeout=300 - нагружает все ядра ноды на 5 минут.
- В консоль управления облаком импортировать публичный SSH-ключ, если это не было сделано раньше.
- В группах безопасности открыть входящие TCP порты как минимум: 22, 5000
- Создать Elastic-IP. Он нужен буден временно для первоначальной настройки сервера.
- Создать новый экземпляр виртуальной машины Ubuntu 22.04 [Cloud Image] Тип машины: m5.large Тег Name: cpu bound Количество экземпляров: 1 Elastic IP: выбрать автоматически
- Залогиниться по внешнему IP адресу по SSH используя импортированный ключ и имя пользователя ec2-user.
- Выполнить: sudo apt update
- Поставить пакеты python3-venv и python3-pip: sudo apt install python3-venv и python3-pip
- Создать каталог ~/dev/croc: mkdir -p ~/dev/croc
- Перейти в каталог ~/dev/croc и склонировать этот репозиторий: git clone git@github.com:CrocBomber/start_task_cpu_bound_app.git
- Перейти в каталог со склонированым репозиторием: cd start_task_cpu_bound_app
- Создать виртуальное окружение командой: python3 -m venv .venv
- Активировать виртуальное окружение командой: . .venv/bin/activate
- Установить зависимости командой: pip install -r requirements.txt
- Скопировать файл template.gunicorn.service в текущий каталог с новым именем gunicorn.service: cp template.gunicorn.service gunicorn.service
- Отредактировать файл gunicorn.service поменяв в параметре ExecStart подстроку %UWSGI_PATH% на /home/ec2-user/dev/croc/start_task_cpu_bound_app/.venv/bin/gunicorn и подстроку %APP_DIR% на /home/ec2-user/dev/croc/start_task_cpu_bound_app
- Добавить службу в systemd командой: sudo ln -s /home/ec2-user/dev/croc/start_task_cpu_bound_app/gunicorn.service /etc/systemd/system/gunicorn.service
- Активировать службу командой: sudo systemctl enable gunicorn.service
- Запустить службу командой: sudo systemctl start gunicorn.service
- Проверить статус службы, что нет ошибок: sudo systemctl status gunicorn.service
- Проверить результат обращения на сервис /info по порту 5000, например: http://217.73.60.18:5000/info
- Для дополнительной проверки можно перезагрузить виртуальную машину через консоль управления облаком и убедиться, что после перезапуска сервис снова будет работать.
- Для дальнейшего создания эталонного образа машины необходимо выключить машину через консоль управления облаком.
- Сделать новый снимок жесткого диска машины, тег Name для снимка задать cpu bound.
- Создать новый образ с именем cpu bound используя снимок созданный на предыдущем шаге. При создании образа установить в значение "Нет" флаг "Удалить с экземпляром".
- Создать новый шаблон запуска выбрав образ cpu bound созданный на предыдущем шаге. Тип машины: m5.large Имя шаблона запуска: cpu_bound Поставить галочку: Удалить в случае выключения
- В консоли управления облаком перейти на страницу Алармы.
- Создать новый аларм: Пространство имён: AWS/EC2 Экземпляр: выбрать id экземпляра созданного на шаге 4. Имя: cpu_bound_cpu_utilization_%NODE_ID%, где вместо %NODE_ID% написать идентификатор экземпляра созданного в пункте 4. Статистика: среднее Метрика: CPUUtilization, знак больше >, чем 70% Проверка метрики за 1 период в 1 минуту. Нажать кнопку Создать.
- На этом создание шаблона закончено. Шаблон будет использоваться в management приложении по имени тега.