首页 文章

在Elastic Beanstalk上使用Worker Tier设置Django的预定/ cron作业

提问于
浏览
7

我目前正在将Django网站从我自己的运行Ubuntu的托管服务器迁移到AWS Elastic Beanstalk .

到目前为止,我发现这个过程有点直截了当 - 直到尝试为我的应用程序设置一些预定的作业 . 根据我的收集,我想使用 cron.yaml 文件在工作层环境中运行cron作业 . 我已经阅读了文档:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

并阅读博客文章:https://medium.com/@joelennon/running-cron-jobs-on-amazon-web-services-aws-elastic-beanstalk-a41d91d1c571#.mx7dq9ufo

各种StackOverflow帖子,但我觉得我仍然缺少一些关于实际构成我的工作层环境的基本概念 . 在我自己的服务器上,我可以简单地设置一个cron作业来满足这种需求 - 所以这个概念对我来说是个新鲜事 . 我还在Heroku上运行了一些使用web和worker dynos,异步处理,Redis和Celery以及预定作业的Django应用程序,但我无法弄清楚如何将其转换为Elastic Beanstalk世界 .

基本上,我想要理解的概念是:

  • 就代码而言,实际构成我的工作层环境的是什么?显然不仅仅是cron.yaml文件 . 这是我的Web应用程序的精确克隆,也部署到此环境中?或者这可以以某种方式引用我的Web环境中的代码并以这种方式运行?

  • 或者工作者应用程序是否完全是全新的应用程序?我是否需要创建一个单独的完整Django / Flask应用程序来执行此操作?

  • 我的工作人员如何与我的网络应用程序进行实际交谈? cron.yaml中的POST消息实际上是如何在Web应用程序上执行作业的?如果它是一个独立的应用程序,那么工作者和Web环境实际上是如何链接的?

我本质上想要安排一些Django管理命令 . 我也将方法暴露为POST endpoints ,但无法弄清楚如何让工作者环境与Web应用程序上的/执行作业进行对话 .

请原谅我的天真,我真的很感激任何关于这个概念如何融合在一起的建议和方向 .

1 回答

  • 3

    所以我最后和一位更熟悉AWS服务的朋友交谈 . 他解释了这些概念,并通过如下设置工作环境来运行预定作业:

    • 为Web环境构建了一个单独的独立应用程序 . 我构建了一个单独的"worker" Django应用程序,但这可能是Flask或任何其他框架或语言

    • 创建了一个名为"cron"的应用程序,该应用程序具有处理到不同 endpoints 的POST消息的视图,这些视图本质上是我想要执行的预定作业 . 这些 endpoints 是我的 cron.yaml 文件中的作业所指向的

    • 由于我的工作需要对Web应用程序进行数据库更改,因此我将工作器应用程序设置为使用与Web应用程序相同的数据库 . 这就像将RDS环境变量添加到我的工作线程环境配置一样简单 . 例如 . 将RDS_DB_NAME,RDS_HOSTNAME,RDS_USERNAME设置为指向Web环境数据库

    Et voila,按计划执行预定作业,并根据需要更改数据库 .

相关问题