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

Setting up a scheduled / cron job with Django on Elastic Beanstalk with a Worker Tier

我目前正在将Django网站从运行Ubuntu的托管服务器迁移到AWS弹性Beanstalk。

到目前为止,我发现这个过程有点直截了当——直到尝试为我的应用程序设置一些预定的作业。据我所知,我希望使用cron.yaml文件在工作层环境中运行cron作业。我已经通读了这些文件:http://docs.aws.amazon.com/elasticbeanstack/latest/dg/using features managing env tiers.html_worker periodictasks

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

以及各种stackoverflow帖子,但我觉得我仍然缺少一些基本的概念,这些概念实际上构成了我的工作层环境。在我自己的服务器上,我可以简单地设置一个cron作业来满足这个需求——所以这个概念对我来说是相当新的。我也有一些Django应用程序在Heroku上运行,它们使用Web和Worker Dynos、异步处理、Redis和Cellery以及预定的作业,但我不知道如何将其转换为弹性Beanstalk世界。

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

  • 就代码而言,我的工作层环境实际上是由什么组成的?显然不仅仅是cron.yaml文件。这是我的Web应用程序的一个精确克隆,也部署到了这个环境中吗?或者这能以某种方式引用我的Web环境中的代码并以这种方式运行吗?
  • 或者工人应用程序是它自己的完整的全新应用程序吗?我是否需要创建一个单独的完整的django/flask应用程序来执行此操作?
  • 我的工作应用程序如何与我的Web应用程序进行物理对话?cron.yaml中的post消息实际上是如何在Web应用程序上执行作业的?如果它是一个独立的应用程序,那么工作环境和Web环境实际上是如何链接的?
  • 我基本上想安排一些django管理命令。我也将方法公开为后端点,但不知道如何让工作环境与Web应用程序上的作业进行对话/执行作业。

    请原谅我的幼稚,我真的很感激任何关于这个概念如何结合的建议和指导。


    最后我和一个更熟悉AWS服务的朋友聊了起来。他解释了这些概念,我通过如下设置工人环境来运行计划的作业:

    • 为Web环境构建单独的独立应用程序。我构建了一个单独的"Worker"Django应用程序,但它可以是flask或任何其他框架或语言。
    • 创建了一个名为"cron"的应用程序,它有视图来处理发送到不同端点的消息,这基本上是我想要执行的计划作业。这些端点是我的cron.yaml文件中的作业直接指向的
    • 由于我的工作需要对Web应用程序进行数据库更改,因此我将Worker应用程序设置为使用与Web应用程序相同的数据库。这就像在我的工作环境配置中添加RDS环境变量一样简单。例如,将rds_db_name、rds_hostname、rds_username设置为指向web环境数据库

    et voila,按计划执行的作业,并根据需要更改数据库。