Учитывая поле AWS Elastic-Beanstalk Worker, возможно ли использовать Flask / port: 80 для обслуживания сообщений, поступающих из связанной очереди SQS?
Я видел противоречивую информацию о том, что происходит внутри ELB-работника. Страница ELB Worker Environment гласит:
Elastic Beanstalk упрощает этот процесс, управляя очередью Amazon SQS и запуская процесс демона в каждом экземпляре, который читает для вас эту очередь. Когда демон извлекает элемент из очереди, он локально отправляет запрос HTTP POST на http://localhost/ на порт 80 с содержимым сообщения очереди в теле. Все, что нужно вашему приложению - это выполнить долгосрочную задачу в ответ на POST.
Этот вопрос SO Отличия веб-сервера от Worker говорит:
Самым важным отличием на мой взгляд является то, что экземпляры рабочего уровня не запускают процессы веб-сервера (apache, nginx и т. Д.).
Исходя из этого, я ожидал, что смогу просто запустить Flask-сервер на порту 80, и он будет обрабатывать сообщения SQS. Тем не менее, сообщение кажется неправильным. Даже на ящиках ELB-работника работает Apache, очевидно, для проверки работоспособности (когда я его остановил, мой сервер покраснел). И конечно он использует порт 80 ...
У меня уже есть Flask / Gunicorn на сервере EC2, который я пытался переместить на ELB, и я хотел бы продолжать использовать это - возможно ли это? (Примечание: демон очереди отправляет только сообщения на порт 80, которые нельзя изменить ...)
Документы не ясны, но, похоже, они ожидают, что вы измените Apache на Proxy, чтобы использовать Flask, возможно? Я надеюсь, что это не единственный способ.
Или, каков "правильный" способ настройки ELB-работника для обработки сообщений SQS? Как вы должны «выполнить долгосрочное задание»?
Примечание : теперь, когда я больше использовал ELB и достаточно хорошо его понимаю, позвольте мне пояснить, что это не сценарий использования, разработанный Amazon ELB-работники для, и у него есть некоторые глюки (которые будут отмечены). Стандартный вариант использования, по сути, заключается в том, что вы создаете простое приложение Flask и подключаете его к серверу ELB-EC2, который настроен для упрощения запуска этого приложения Flask.
Мой вариант использования был, у меня уже был сервер EC2 с большим приложением Flask, работающим под Gunicorn, а также различными другими происходящими вещами. Я хотел использовать этот сервер (как образ) для построения сервера ELB и заставить его отвечать на сообщения очереди SQS. Возможно, есть лучшие решения, например, просто написать демон опроса очереди, и никто больше никогда не воспользуется этой опцией, но это так ...