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

时间:2016-03-15 10:33:02

标签: python django amazon-web-services cron elastic-beanstalk

我目前正在将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上运行的Django应用程序,它们使用web和worker dynos,异步处理,Redis和Celery以及预定的作业,但我无法弄清楚如何将其转换为Elastic Beanstalk世界。

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

  1. 就代码而言,实际构成我的工作层环境的是什么?显然不仅仅是cron.yaml文件。这是我的Web应用程序的精确克隆,也部署到此环境中?或者这可以以某种方式引用我的Web环境中的代码并以这种方式运行吗?
  2. 或者工作者应用程序是完全全新的应用程序吗?我是否需要创建一个单独的完整Django / Flask应用程序才能执行此操作?
  3. 我的工作者应用如何与我的网络应用进行实际对话? cron.yaml中的POST消息实际上是如何在Web应用程序上执行作业的?如果它是一个独立的应用程序,那么工作者和Web环境实际上是如何链接的?
  4. 我基本上想要安排一些Django管理命令。我也将方法暴露为POST端点,但无法弄清楚如何让工作者环境与Web应用程序上的/执行作业进行对话。

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

1 个答案:

答案 0 :(得分:3)

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

  • 为Web环境构建了一个单独的独立应用程序。我构建了一个单独的“工人”Django应用程序,但这可能是Flask或任何其他框架或语言
  • 创建了一个名为“cron”的应用程序,该应用程序具有处理到不同端点的POST消息的视图,这些端点本质上是我想要执行的预定作业。这些端点是我cron.yaml文件中的作业指向
  • 的端点
  • 由于我的工作需要对Web应用程序进行数据库更改,因此我将worker应用程序设置为使用与Web应用程序相同的数据库。这就像将RDS环境变量添加到我的工作线程环境配置一样简单。例如。设置RDS_DB_NAME,RDS_HOSTNAME,RDS_USERNAME以指向Web环境数据库

Et瞧,计划的工作按计划执行,并根据需要更改数据库。