【问题标题】:Is it possible to do an aws in place code deploy with zero downtime?是否可以在零停机时间的情况下进行 aws 就地代码部署?
【发布时间】:2019-01-16 02:43:30
【问题描述】:

是否可以通过就地部署实现零停机部署?我知道在部署组描述中(对于就地部署)我们有这个:

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

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

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

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

【问题讨论】:

  • 亲爱的@abbood 我目前有几个客户使用 cloudformation 进行持续部署、滚动更新的自动扩展和应用程序负载均衡器,没有任何问题。如果您分享有关您当前环境的更多详细信息,我可能会提出一些建议。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    例如。

     releases
        ├── release1
        └── release2
    
    public_html -> (symlink) release2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多