【问题标题】:Elastic Beanstalk - how to run specific ebextensions according the the environment and Sidekiq WorkerElastic Beanstalk - 如何根据环境和 Sidekiq Worker 运行特定的 ebextensions
【发布时间】:2016-04-09 12:41:01
【问题描述】:

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

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

  2. sidekiq worker 是否应该在 Web 服务器的同一个 APP 中但在不同的 ENV 中? 例如: 我的应用 env_staging env_staging_worker env_prod env_prod_worker

  3. 是否应将 Sidekiq 工作器部署为工作器或 webapp EB 环境? (AWS 默认不支持 sidekiq worker)。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    关于 Elastic Beanstalk 的 web 和 worker 环境背后的实际想法和架构,我将尝试总结一下亚马逊的official documentation

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

    Worker 环境托管一个应用程序(可以与 Web 应用程序相同,但并非必须如此),该应用程序执行后台作业、长时间运行的任务等。

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

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

    如果您不受限于使用 Sidekiq 并且您的应用程序是使用 Rails >= 4.2 编写的,那么您可以使用 Active Elastic Job gem 来执行后台任务。它负责所有消息发送和解析,并允许您保持部署设置简单。无需编写和维护 ebextension 脚本。

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2021-11-25
      • 2021-06-15
      • 2016-10-08
      • 2020-02-28
      • 2019-12-21
      • 2015-11-11
      • 2017-08-14
      • 2017-07-21
      相关资源
      最近更新 更多