可以在停机时间为零的情况下进行aws本地代码部署吗?

时间:2018-08-08 18:26:05

标签: amazon-web-services load-balancing aws-code-deploy aws-load-balancer

通过就地部署是否可以实现零停机时间部署?我知道在部署组描述(就地部署)中,我们有以下内容:

  

使用最新的应用程序版本更新部署组中的实例。在部署期间,每个实例都会暂时脱机以进行更新。

我的问题是:假设我至少有两个实例连接到负载均衡器。是否可以使用以下顺序进行原位部署:

  • 实例A与LB(负载均衡器)断开连接
  • 实例A安装最新更新并重新启动
  • 实例A已升级到最新的代码版本
  • LB与仍然具有旧代码修订版的实例B断开连接,并专门指向实例A
  • 实例B安装最新版本并重新启动
  • 实例B已升级到最新的代码版本
  • LB也连接到实例B

以上可能吗?如果是这样,我该如何设置?我曾经尝试一次部署一次,一次全部部署,但是发生的是,在所有情况下,部署总是总是同时发生在所有实例上,因此会有一些停机时间。

2 个答案:

答案 0 :(得分:1)

我认为一种选择是为每个部署在单独的文件夹中创建一个修订,并在部署完成后最终使用afterInstall钩子通过symlink进行链接。

例如

 releases
    ├── release1
    └── release2

public_html -> (symlink) release2

答案 1 :(得分:0)

是的,您可以完全按照自己的描述进行操作。如果使用deployment option WITH_TRAFFIC_CONTROL配置部署组并配置a load balancer,则CodeDeploy将在运行常规的Lifecycle挂钩脚本集之前从负载均衡器中删除实例。

您可以看到图表here,该图表演示了挂钩的执行顺序(请注意BlockTrafficAllowTraffic正在执行绑定和取消绑定)。主机选择逻辑将相同-您的最低正常主机设置。如果您一次将部署设置为一个,则CodeDeploy将不会同时部署到多个实例。