aka*_*lar 4 amazon-ec2 amazon-web-services redis celery flask
我是 Web 开发的新手,我编写了一个小的 Flask API,它使用 Celery 作为消息队列和 Redis 作为代理。我在本地机器上使用redisredis-server
和 Celery启动celery -A application.celery worker --loglevel=info
,应用程序运行没有问题。
但是我无法让它在 AWS 上工作。现在我正在按照文档部署应用程序,但是当我尝试向我的 API 发送请求时,我收到内部服务器错误,这可能与 Redis 和 Celery 不工作有关。我通过 SSH 连接到 EC2 实例,但由于我是新手,找不到让应用程序运行的方法。
我的问题是:
1) 将应用程序、Redis 和 Celery 部署到 AWS 后,我该如何启动它?Elastic Beanstalk 是自动完成还是我需要做一些事情?
2) 我在哪里可以找到我的应用程序文件?我想我需要从 requirements.txt 手动安装所有需求,并virtualenv
在 EC2 实例中设置一个,对吗?
3) 如果我在一个virtualenv
. Elastic Beanstalk 的命令行工具会自动部署应用程序并创建负载均衡器和 Auto Scaling 组。创建新实例时,我通过 SSH 进行的安装是否可用,或者我是否需要每次都手动执行此操作,还是有其他方法?
4)我听有人说创建一个EC2实例并手动部署比使用Elastic Beanstalk更好。Elastic Beanstalk 对我有什么作用?使用 Elastic Beanstalk 还是手动部署更好?
谢谢你的帮助!
Deu*_*a25 10
在过去的一周里,我试图做完全相同的事情,所以我想我会分享我学到的一切。虽然这些答案是关于 stackoverflow/google 的,但我仍然可以提供帮助。
1) 要让 Flask 应用程序运行起来很容易,您可以使用弹性 beanstalk CLI。通常,只需按照此处的 AWS 文档操作即可,这相当简单。就 Redis/Celery 而言,您开始处理多种情况。在您进行初始部署之前,您可能想要设置 celery worker,您可以使用此 stackoverflow 答案来了解如何将 celery 设置为 daemon。请务必阅读脚本,您需要正确设置应用程序名称。当您通过 EBS 部署到生产时需要注意的是,您的应用程序将由 apache 托管,这意味着如果您通过“some_task.delay”调用您的任务,将会发生一些奇怪的事情,因为 celery 应用程序的名称将是未知的。据我所知,正确解决此问题的唯一方法是使用:
my_celery_object.send_task("flask_application_name.the_task", [param1, param2], ...)
任何需要调用任务的地方。
您现在可以准备您的 redis 缓存。您可以使用任何东西,为此我假设您想使用 AWS ElasticCache (EC)。转到 EC,您需要部署一个包含任意数量节点的缓存集群。部署后,您将在“缓存集群”下的列表中看到它。接下来,单击表中的“X 节点”链接,您需要将端点 url(和端口!)复制到您的 celery 应用程序,您可以在此处了解。
所以,现在你把一切都准备部署,你会伤心地听到我前面提到的安全东西会导致应用程序失败的任何任务请求作为弹性缓存集群将是错误的安全组的一部分开始。继续部署,这将创建您需要的安全组以及您的应用程序和其他所有内容。然后,您可以在 EC2 仪表板下的 Network & Security -> Security Groups 下找到该安全组。组的名称应该是您的环境的名称,例如“myapp-env”是默认值。现在修改入站规则并添加自定义 TCP 规则,将端口号设置为您的 redis 端口,并将源设置为“Anywhere”,保存。此时,记下组名并转到您的弹性缓存。单击左侧的 Cach Clusters,
现在 celery 将自动连接到 redis 缓存,因为它会继续尝试建立连接一段时间。否则,您可以随时重新部署。
希望你现在有一个使用 redis 的 Flask/Celery 应用程序。
2) 您不需要知道您的应用程序文件在 EBS EC2 实例上的位置,因为它会自动使用虚拟环境和 requirements.txt 假设您按照此处找到的说明进行操作。但是,在撰写本文时,您始终可以通过 SSH 连接到您的 EC2 实例,在以下位置找到您的应用程序文件:
/opt/python/current/app
3)我不知道你的意思是“如果我在一个 virtualenv 中设置并安装了所有要求,如果 EC2 实例发生变化,它们会持续存在吗?” 正如我之前所说,如果您按照有关如何为flask 部署EBS 环境的说明进行操作,那么部署的新实例将根据您的requirements.txt 自动更新其环境
4)这是一个意见问题。我肯定听说不使用 EBS 可能是更好的方法,我个人在这里没有意见,因为我只使用过 EBS。有一些严重的斗争(包括尝试设置此应用程序)。我听说有些人做的是通过 EBS 进行部署,这样他们就可以得到一台预先配置好的 EC2 机器,然后从那台机器上制作一个 AMI,拆掉 EBS,然后用 AMI 制作一个 EC2。不管你走哪条路,如果你打算拥有一个数据库支持的服务器,我已经知道(艰难的方式)你不应该让 EBS 自动附加 RDS。这是因为 RDS 然后与 EBS 应用程序相关联,所以如果您必须替换资源、终止它等,您将丢失 RDS(您当然可以解决这个问题,这只是一个痛苦就是一切)。
归档时间: |
|
查看次数: |
4063 次 |
最近记录: |