Вопрос или проблема
У меня есть несколько экземпляров EC2, на которых работает веб-приложение в контейнере Docker, и я настроил их на автоматическое отключение за пределами рабочего времени (например, с 7 утра до 7 вечера) для сокращения расходов. Я хотел бы узнать, могу ли я автоматизировать включение экземпляра при запросе URL веб-приложения (даже когда EC2 остановлен), в случае, если кто-то захочет получить доступ вне ранее настроенных рабочих часов.
Некоторые люди рекомендовали мне запустить приложение в AWS Lambda, но как вызвать функцию запуска при помощи DNS-запроса?
Это не является легко осуществимым. Вы можете найти какой-то сложный способ с использованием Lambda и логированием Route 53, но даже если вы это сделаете, запуск EC2-экземпляра может занять 5 минут. Это означает, что к тому времени, как EC2-экземпляр запустится, запрос уже будет прерван.
Lambda
Переписывание вашего приложения на Lambda/серверлесс-вычислениях решит эту проблему. Вы платите только за запрос, и в большинстве случаев это не дорого. Большинство серверлесс-приложений стоят очень дешево. Однако некоторые из них могут стоить гораздо дороже, чем экземпляры EC2.
Практичный вариант
Наиболее практичный способ сократить расходы, вероятно, использование автоскейлинга и небольших вычислительных узлов для увеличения мощности, а не нескольких крупных экземпляров. Вы поддерживаете небольшой набор ресурсов в работе круглосуточно, с увеличением ресурсов в течение ваших загруженных периодов.
С контейнерами вы могли бы рассмотреть использование Fargate для поддержания контейнера с низкими ресурсами в работе круглосуточно, а затем увеличивать количество ресурсов, когда нагрузка возрастает. Это может быть как автоскейлинг, так и планируемый скейлинг. Я не знаю, можно ли использовать Fargate и EC2 в пределах одного кластера ECS, но если можно, это может решить проблему.
Нет возможности запустить экземпляр EC2 при запросе URL веб-приложения. HTTP-запрос будет уже прерван, прежде чем экземпляр будет готов обслуживать запрос.
Также не будет вовлечена никакая аутентификация, что означает, что любой случайный запрос от бота может инициировать запуск экземпляра EC2.
В теории можно создать стек, чтобы сделать это, например, использовав маршрутизацию ALB для определенного пути к функции Lambda, которая могла бы запустить экземпляр EC2. Но задействованные ресурсы будут дороже, чем если бы экземпляр работал круглосуточно.
Если вы хотите сократить расходы, AWS может быть не лучшим поставщиком для вас.
вы можете разместить 1 веб-страницу на более дешевом сервере
использовать dynu dynamic dns для перенаправления на эту дешевую веб-страницу сервера, когда ваш EC2 не работает
и на этой дешевой веб-странице сервера предоставить кнопку, которая будет вызывать API для запуска EC2
это поможет вам сократить расходы ..
.
Ответ или решение
Теория
Вопрос об автоматическом запуске EC2-инстанса при запросе DNS предполагает сложную интеграцию с различными сервисами AWS. Основная идея заключается в том, чтобы снизить расходы на инфраструктуру AWS, связанные с работой инстансов EC2 в нерабочее время. Однако в AWS EC2 инстансы запускаются по определенным триггерам, и запрос DNS сам по себе не является подходящим триггером, поскольку он не может напрямую инициировать такие процессы, как запуск инстанса. Кроме того, задержки при запуске инстанса могут привести к тайм-ауту исходного запроса.
Пример
Рассмотрим некоторые варианты и возможные решения, которые могли бы быть использованы для решения данной задачи:
-
Использование AWS Lambda и Route 53: Хотя теоретически возможно создать логику, запускающую EC2 инстанс через AWS Lambda при определенных событиях, таких как изменения в Route 53, это может быть сложно и неэффективно. Этот процесс может вызвать неприемлемые задержки, так как время запуска инстанса обычно больше времени ответа DNS-запроса.
-
Переход на Serverless-Архитектуру: Перенос вашего приложения на AWS Lambda или другие серверлесс решения. Это позволит сократить расходы, так как оплата производится только за время выполнения кода. Однако это потребует значительного изменения архитектуры приложения и может не соответствовать текущим требованиям производительности или нагрузке.
-
Использование AWS Fargate и Auto Scaling: Запуск меньших контейнеров на AWS Fargate в режиме 24/7 с возможностью автоматического или запланированного увеличения ресурсов в пиковые часы. Это может быть более гибким и экономически целесообразным вариантом, но также требует значительных изменений в текущей архитектуре.
Применение
Теперь, когда теория понятна, рассмотрим практические шаги, которые помогут решить описанную проблему:
-
Создание Промежуточного Решения: Вы могли бы использовать альтернативный метод, например, размещение статической веб-страницы на дешевом сервере. Эта страница может отображаться пользователям в нерабочее время и содержать кнопку для запуска EC2-инстанса. Например, при нажатии этой кнопки произойдет вызов Lambda-функции, которая запустит инстанс EC2.
-
Поддержание Минимальных Ресурсов в Постоянной Работе: Используйте меньший инстанс AWS EC2 или небольшой набор контейнеров в AWS Fargate, которые работают постоянно и обрабатываются все базовые запросы. Это позволяет сократить время бездействия и обеспечить минимальную доступность.
-
Планирование Автоматического Запуска: Рассмотрите возможность создания расписания для автоматического запуска и остановки ресурсов в AWS, которые подходят для времени наибольшей активности пользователей. Это может быть сделано через Amazon CloudWatch Events или регулярное расписание с использованием AWS Step Functions.
Работы по реализации указанных инструментов и методик требуют тщательной подготовки и тестирования всех связанных компонентов на предмет надежности и совместимости, чтобы минимизировать риски перебоя в обслуживании.
Заключение
Автоматизация запуска EC2 по DNS-запросу на текущий момент не является прямолинейным и коммерчески целесообразным решением, учитывая временные и ресурсные задержки. Вместо этого полезно обратить внимание на переход на серверлес-архитектуры или оптимизацию существующих ресурсов путем использования AWS Fargate, авто scaling и альтернатив, таких как промежуточные веб-страницы. Понимание и грамотное внедрение таких стратегий может существенно снизить затраты и улучшить производительность в пределах рациональных временных рамок.