How to structure AWS Elastic Beanstalk production and staging environments with web and worker tiers?
我计划将应用程序从 Heroku 转移到 AWS Elastic Beanstalk。在 Heroku 上,我有两个不同的应用程序,一个用于暂存,另一个用于生产,并且都有自己的 web 和 worker 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 个环境。这允许您通过 cname 交换或部署以前部署的版本来"升级为 prod"。
您必须单独部署您的网络/工作人员,但您可以非常轻松地创建一个同时部署到两者的脚本。
为了将来参考,AWS Elastic Beanstalk 稍后为它创建了一个名为 Environment Links 的解决方案:
https://aws.amazon.com/about-aws/whats-new/2015/11/aws-elastic-beanstalk-adds-support-for-environment-links/
借助该功能,我们现在可以使用相同的代码链接两个环境(因此我们只部署一次而不是两次)。为了让worker运行worker进程和web运行web服务器,你可以设置不同的环境变量并自定义EB初始化脚本来检查这些变量并运行特定的进程。