如何使用 Web 层和工作层构建 AWS Elastic Beanstalk 生产和暂存环境?

How to structure AWS Elastic Beanstalk production and staging environments with web and worker tiers?

我计划将一个应用程序从 Heroku 转移到 AWS Elastic Beanstalk。在 Heroku 上,我有两个不同的应用程序,一个用于暂存,另一个用于生产,并且都有它们的 web 和 workers dynos。

我想在 AWS EB 上设置类似的东西。我已经阅读了 Web Tier 和 Worker Tier 的区别,但这里有一些问题:

我是否要为生产和暂存设置两个不同的应用程序?还是同一个应用程序和两个不同的环境?如果是这样,我将不得不创建 4 个环境,两个用于生产 web/worker,两个用于暂存 web/worker?什么是正确的结构?我将为 Web 和 Worker 使用相同的 Rails 应用程序。在那种情况下,我必须单独部署它们还是有一个命令可以同时部署两个环境?

I'll use the same Rails application for web and worker.

这告诉我您应该有一个应用程序。应用程序管理应用程序版本,这基本上只是部署历史。

您需要创建 4 个环境。这允许您 "promote to prod" 通过 cname 交换,或通过部署以前部署的版本。

您必须单独部署 web/worker,但您可以非常轻松地创建一个同时部署到两者的脚本。

为了将来参考,AWS Elastic Beanstalk 后来为此创建了一个名为环境链接的解决方案:

https://aws.amazon.com/about-aws/whats-new/2015/11/aws-elastic-beanstalk-adds-support-for-environment-links/

有了这个功能,我们现在可以 link 使用相同代码的两个环境(所以我们只部署一次而不是两次)。要使 worker 运行 成为工作进程并使 web 到 运行 成为 web 服务器,您可以设置不同的环境变量并自定义 EB 初始化脚本以检查这些变量和 运行 特定进程.