【发布时间】:2019-02-16 00:49:44
【问题描述】:
给定一个 AWS Elastic-Beanstalk Worker 框,是否可以使用 Flask/port:80 来处理来自相关 SQS 队列的消息?
我在 ELB 工作人员内部看到了关于正在发生的事情的相互矛盾的信息。 ELB Worker Environment 页面说:
Elastic Beanstalk 通过管理 Amazon SQS 队列并在为您从队列中读取数据的每个实例上运行守护进程来简化此过程。当守护程序从队列中拉取项目时,它会在本地向端口 80 上的http://localhost/ 发送 HTTP POST 请求,其中包含正文中队列消息的内容。您的应用程序需要做的就是执行长时间运行的任务以响应 POST。
这个 SO 问题Differences in Web-server versus Worker 说:
我认为最重要的区别是工作层实例不运行 Web 服务器进程(apache、nginx 等)。
基于此,我希望我可以在端口 80 上运行一个 Flask-server,它会处理 SQS 消息。但是,该帖子似乎不正确。甚至 ELB-worker 机器上也运行着 Apache,显然是为了进行健康检查(当我停止它时,我的服务器变红了)。当然它使用的是 80 端口...
我已经在尝试迁移到 ELB 的 EC2 服务器上安装了 Flask/Gunicorn,我想继续使用它 - 可以吗? (注意:queue-daemon 只向端口 80 发送消息,不能更改...)
文档不清楚,但听起来他们希望您修改 Apache 以代理到 Flask,也许吧?我希望这不是唯一的方法。
或者,设置 ELB-worker 来处理 SQS 消息的“正确”方式是什么?你应该如何“执行长时间运行的任务”?
注意:现在我已经更多地使用 ELB,并且对它有了相当好的理解 - 让我明确指出,这不是的用例亚马逊为 ELB-workers 设计了,它有一些小故障(将被指出)。基本上,标准用例是您创建一个简单的 Flask 应用程序,并将其连接到 ELB-EC2 服务器,该服务器被配置为简化运行该 Flask 应用程序。
我的用例是,我已经有一个带有大型 Flask 应用程序的 EC2 服务器,在 gunicorn 下运行,以及其他各种事情。我想使用该服务器(作为图像)来构建 ELB 服务器,并让它响应 SQS 队列消息。可能有更好的解决方案,比如只写一个队列轮询守护进程,而且没有其他人会选择这个选项,但它就是......
【问题讨论】:
标签: amazon-web-services flask amazon-elastic-beanstalk