CloudFormation,CodeDeploy,ELB& Auto-Scaling Group

时间:2018-01-31 22:23:16

标签: amazon-web-services amazon-cloudformation aws-code-deploy

我正在尝试使用ELB,Auto-Scaling组和Pipeline(使用CodeBuild和CodeDeploy)构建堆栈。 我无法理解它应该如何工作: 自动扩展组正在启动两个实例并等待X分钟,然后再开始检查实例状态 CodeDeploy应用程序部署组正在等待创建并准备好Auto-Scaling组 管道大约需要10分钟才能开始部署应用程序

我的问题是当我创建堆栈时,看起来有一个循环:AG需要来自CodeDeploy的应用程序,而CodeDeploy需要AG稳定。需要明确的是,当应用程序准备好部署时,我的Auto-Scaling组已经开始终止实例并启动新实例,因此CodeDeployment正在尝试部署到已经终止或终止的实例。

我真的不想将HealthCheckGracePeriod和PauseTime配置为10-15分钟......这太长了。

是否有通过管道进行CloudFormation + ELB + AG + CodeDeploy的最佳实践? 应该采取哪些步骤来实现这一目标?

谢谢!

1 个答案:

答案 0 :(得分:1)

这种停止/盯着实例很可能与部署类型相关联:就地与蓝/绿。 我在我的设置中尝试了两种方法,并且我将尝试总结它们的工作原理。

假设在本示例中,您有一个Autoscaling组,在部署应用程序时有2个正在运行的实例,部署配置为OneAtATime。流量由Elastic Load Balancer控制。然后:

就地部署:

  1. CodeDeploy会收到有关可用新版本的通知。
  2. 它告诉ELB停止将流量引导到第一个实例。
  3. 一旦停止流量到一个实例,它就会启动部署过程:停止应用程序,下载捆绑包等。
  4. 如果部署成功(验证服务挂钩返回0),它会告诉ELB恢复该实例的流量。
  5. 此时,1个实例正在运行旧代码,1个正在运行新代码。
  6. 在ELB停止到第二个实例的流量之后,并在那里重复部署过程。
  7. 重要提示: 启用ELB后,在部署之前阻止流量到达实例所需的时间,以及在流量直接依赖于您的运行状况检查后允许流量所需的时间:time = Healthy threshold * Interval。

    蓝/绿部署:

    1. CodeDeploy会收到有关新版本的通知。
    2. 它会复制您的Autoscaling组:该组的相同配置(包括扩展策略,计划的操作等)以及在部署开始时存在的相同数量的实例(使用与原始AG相同的AMI) - 我们的案例2。
    3. 此时,新AG没有流量。
    4. CodeDeploy执行一台计算机的所有常规安装步骤。
    5. 如果成功,它也会部署到第二台机器。
    6. 它将来自旧AG实例的流量引导至新AG。
    7. 一旦完全重新路由流量,它将删除旧的AG并终止其所有实例(在部署设置中指定的时间段后 - 此选项仅在您选择蓝/绿时可用)
    8. 现在ELB只为新的AG服务。
    9. 来自经验:

      • 蓝/绿部署有点慢,因为你需要等待 要启动的计算机,但是您可以获得更安全且防错的部署。
      • 一般情况下,我会坚持使用蓝色/绿色,带负载均衡器 启用和部署配置:AllAtOnce(如果失败, 客户不会受到影响,因为实例将不会被接收 交通。但是,并行部署后,速度将提高2倍 而不是顺序)。
      • 如果您的健康检查并验证 服务足够,你可以删除原来的 AG等待时间最短(写作时间为5分钟) 交)。