在过去的一周里,我一直在尝试做同样的事情,所以我想我会分享我学到的一切。尽管这些答案是关于 stackoverflow/google 的,但我仍然可以提供帮助。
1) 要让烧瓶应用程序运行起来很容易,您可以使用弹性 beanstalk CLI。通常,只需遵循 AWS 文档here,它相当简单。就 Redis/Celery 而言,你开始做很多事情。在进行初始部署之前,您可能需要设置 celery worker,您可以使用 this stackoverflow answer on how to setup celery as a 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 应用程序中,您可以了解here。
现在您已经准备好部署一切,但听到我之前提到的安全问题会导致您的应用程序在任何任务请求上失败,您会很难过,因为弹性缓存集群将属于错误的安全组原来。继续部署,这将创建您需要的安全组以及您的应用程序和其他所有内容。然后,您可以在 EC2 仪表板下的 Network & Security -> Security Groups 下找到该安全组。组的名称应该是您的环境的名称,例如“myapp-env”是默认值。现在修改入站规则并添加自定义 TCP 规则,将端口号设置为您的 redis 端口,将源设置为“Anywhere”,保存。此时,记下组名并转到您的弹性缓存。点击左侧的 Cach Clusters,修改应用的 CACHE CLUSTER(不是节点),将 VPC 安全组更新为刚才记下的并保存。
现在 celery 将自动连接到 redis 缓存,因为它会继续尝试建立连接一段时间。否则,您可以随时重新部署。
希望您现在拥有一个使用 redis 的功能正常的 Flask/Celery 应用程序。
2) 您不需要知道您的应用程序文件在 EBS EC2 实例上的位置,因为它会自动使用虚拟环境和 requirements.txt,假设您遵循 instructions found here。但是,在撰写本文时,您始终可以通过 ssh 连接到您的 EC2 实例,并在以下位置找到您的应用程序文件:
/opt/python/current/app
3)我不知道您的意思是“如果我在 virtualenv 中设置和安装所有要求,如果 EC2 实例发生更改,它们会持续存在吗?”正如我之前所说,如果您按照有关如何为 Flask 部署 EBS 环境的说明进行操作,那么部署的新实例将根据您的要求自动更新其环境。txt
4) 这是一个见仁见智的问题。我绝对听说不使用 EBS 可能是更好的选择,我个人对此没有意见,因为我只使用过 EBS。有一些严重的挣扎(包括尝试设置这个应用程序)。我听说有些人做的是通过 EBS 进行部署,以便他们可以获得预先配置并准备好运行的 EC2 机器,然后从该机器制作 AMI,拆下 EBS,然后使用 AMI 制作 EC2。不管你走哪条路,如果你打算拥有一个数据库支持的服务器,我已经(艰难地)了解到你不应该让 EBS 自动附加 RDS。这是因为 RDS 与 EBS 应用程序相关联,因此如果您必须替换资源、终止它等,您将丢失 RDS(您当然可以解决这个问题,它只是一个痛苦就是一切)。