Elastic Beanstalk - 如何根据环境和Sidekiq Worker运行特定的ebextensions

时间:2016-01-05 15:58:56

标签: amazon-web-services elastic-beanstalk amazon-elastic-beanstalk

我将在Elastic Beanstalk上运行Rails应用程序,并且我将同时拥有Web和Sidekiq Worker环境。 问题是,因为它们都共享相同的代码, 我需要在工作环境中运行一些特定的ebextensions(初始化工作进程和所有内容)以及Web上的一些特定脚本(以初始化应用服务器和所有内容)。

  1. 如何根据EB上的环境运行特定的ebextensions,或者将两个脚本分开并告诉Elastic Beanstalk根据环境运行。

  2. sidekiq工作者是否需要在Web服务器的相同APP中,但在不同的ENV上? 例如: my_app应用 env_staging env_staging_worker env_prod env_prod_worker

  3. Sidekiq worker应该部署为worker或webapp EB环境吗? (AWS默认情况下不支持sidekiq工作者。)

  4. 如何将Sidekiq工作人员连接到应用程序,例如env_staging到env_staging_worker和env_prod用于env_prod_worker?

  5. 如果您能提供有关架构的详细信息或您可以提供的任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

如果您想坚持使用Sidekiq作为您的工作人员后端,那么您不需要启动额外的Elastic Beanstalk工作环境。您可以在Web环境中启动Sidekiq进程。请看一下这个question and answers from a similar situation

关于Elastic Beanstalk的网络和工作环境背后的实际构思和架构,我将尝试总结亚马逊的official documentation

Web环境托管响应来自用户的HTTP请求的HTTP服务器和Web应用程序。

工作者环境托管一个应用程序(可以与Web应用程序相同,但不必),它可以执行后台作业,长时间运行的任务等。

应通过 Amazon SQS message queue (额外的AWS功能/服务)连接Web和Worker环境。 您的Web应用程序应将消息发送到此队列,并且工作线程环境将使用此队列中的消息。启动工作线程环境时,可以选择应连接到哪个SQS队列。 Elastic Beanstalk将自动安装并启动一个守护进程,该守护进程使用来自此队列的消息并将其转换为HTTP POST请求。这些请求将发送到localhost和您也可以定义的路径。请求的正文将包含队列中消息的内容。您的应用程序应解析内容并相应地触发后台作业。

你知道,这会使Sidekiq实际上已经过时,因为SQS队列将处理排队逻辑。

如果你没有被限制使用Sidekiq而你的应用程序是用Rails> = 4.2编写的,那么你可以使用Active Elastic Job gem来完成后台任务。它负责所有消息发送和解析,并允许您简化部署设置。无需编写和维护ebextension脚本。