在Amazon Elastic Beanstalk上同时部署到多个环境



我有一个应用程序,它有几个环境(都在Amazon Elastic Beanstalk中运行),即生产、工作和调试。每个环境都有相应的git分支,这些分支在某些方面与master不同(比如,修改了配置,删除了一些代码)。

我使用eb deploy从其分支部署新版本的应用程序。它使用git zip压缩当前git分支并将信息发送给Amazon。然后部署到正在运行的实例。

然而,问题是部署需要一些时间(大约5分钟)。因此,在部署过程中,例如,在工作环境和生产环境中,它有不同的代码。这很糟糕,因为我的更改可能会改变队列协议或类似的东西。

我想要的是能够上传信息并在所有环境中进行处理,但实际上不是替换代码,只是准备它。在我对所有的环境都这样做之后,发出像"finish deploy"这样的命令,以便在所有的环境中同时替换代码库。

有办法吗?

您需要执行"蓝绿色"部署,而不是就地执行。由于您的部署模型需要同步多个部分,因此对这些部分使用的协议的更改意味着这些部分必须同时部署。如果存在强绑定设计的频繁破坏协议,则将其视为单个服务。

"已部署"意味着系统的最外层是公开的,并且可以被其他系统使用。在这种情况下,听起来你有一个web服务器层向其他系统公开API,一个工作层读取web层产生的消息。

当进行中断队列协议更改时,应该将两个更改集(web服务器层和队列层)部署到全新的beanstalk环境中,将它们配置为相互使用,然后在暴露的端点上进行DNS交换,从旧的web服务器EB环境到新的web服务器EB环境。在webserver层交换DNS并验证环境正常工作后,可以销毁旧的webserver和queue层。

对于不违反协议的更新,您可以简单地更新一个或另一个环境。

听起来很复杂,因为它确实很复杂。如果你经常破坏协议,那么你的系统就没有足够的解耦,无法期望对worker层和webserver层进行版本化,这就是为什么你必须做这个复杂的过程来同时对它们进行版本化。

希望这对你有帮助!

相关内容

  • 没有找到相关文章

最新更新