Amazon web services AWS自动缩放组的最佳DevOps使用?

Amazon web services AWS自动缩放组的最佳DevOps使用?,amazon-web-services,continuous-deployment,devops,autoscaling,Amazon Web Services,Continuous Deployment,Devops,Autoscaling,我一直在为AWS上托管的应用程序开发DevOps管道。我想对当前设置进行改进,但我不确定最好的方法。我目前的设置如下: 易北河后的ASG 所需容量:1 最小容量:1 最大容量:1 代码部署过程: 移动可部署到S3 在ASG中终止实例 自动设置新实例 新实例拉下可部署的用户数据 此设置的问题是,从实例终止到新实例完全配置,环境处于关闭状态 我一直在思考如何改进此流程以消除停机时间,我提出了两种可能的解决方案: 解决方案#1: 易北河后的ASG 所需容量:1 最小容量:1 最大容量:2 代码

我一直在为AWS上托管的应用程序开发DevOps管道。我想对当前设置进行改进,但我不确定最好的方法。我目前的设置如下:

  • 易北河后的ASG
  • 所需容量:1
  • 最小容量:1
  • 最大容量:1
  • 代码部署过程:
  • 移动可部署到S3
  • 在ASG中终止实例
  • 自动设置新实例
  • 新实例拉下可部署的用户数据
此设置的问题是,从实例终止到新实例完全配置,环境处于关闭状态

我一直在思考如何改进此流程以消除停机时间,我提出了两种可能的解决方案:

解决方案#1:

  • 易北河后的ASG
  • 所需容量:1
  • 最小容量:1
  • 最大容量:2
  • 代码部署过程:
  • 移动可部署到S3
  • 将新实例启动到ASG中
  • 新实例拉下可部署的用户数据
  • 使用旧的可部署
使用此解决方案,ASG中始终至少有一个实例能够为请求提供服务。问题是,ASG似乎不支持手动调用它来启动新实例的简单操作。(它们仅在扩展策略需要时启动新实例。)您可以将现有实例附加到组,但这会导致所需的容量值增加,我不希望这样

解决方案#2:

  • 易北河后的ASG
  • 所需容量:2
  • 最小容量:2
  • 最大容量:2
  • 代码部署过程:
  • 移动可部署到S3
  • 终止实例A
  • 自动设置新实例A
  • 实例A下拉新的可部署用户数据脚本
  • 终止实例B
  • 自动设置新实例B
  • 实例B拉下新的可部署用户数据脚本
与前面的解决方案一样,始终至少有一个实例可用于服务请求。问题是,通常有两个实例,即使只需要一个。此外,代码部署过程似乎不必要地复杂


那么,哪一个更好:解决方案1、解决方案2,还是我还没有想到的其他解决方案?还有一个简短的免责声明:我知道我使用ASG的目的与预期目的不同,但这似乎是按照AWS的“EC2实例是牛”理念实现自动代码部署的最佳方式。

即使这是DevOps管道,而不是生产环境,您所描述的内容听起来像是一个蓝色/绿色部署场景,您希望能够在环境之间切换,而无需停机。我认为最好的答案在很大程度上是针对您的需求的(我们不是100%知道),但是像这样的指南将有助于找到实现您的目标的最佳方式,无论是#1、#2还是其他方式。

即使这是DevOps管道而不是生产环境,您所描述的内容听起来像是一个蓝色/绿色部署场景,您希望能够在环境之间切换,而无需停机。我认为最好的答案在很大程度上是针对您的需求的(我们不是100%知道),但是像这样的指南将有助于找到实现您的目标的最佳方式,无论是#1、#2还是其他方式。

您正在寻找的术语是“零停机部署”

问题是,ASG似乎不支持手动调用它来启动新实例的简单操作。(它们仅在扩展策略需要时启动新实例。)您可以将现有实例附加到组,但这会导致所需的容量值增加,我不希望这样

如果您自己更改所需容量(例如通过API调用),自动缩放组将自动为您启动一个额外实例。例如,以下是一种为自动扩展组(ASG)实施零停机部署的简单方法:

  • 在弹性负载平衡器(ELB)后面运行ASG
  • 最初,所需的容量是1,因此ASG中只有一个EC2实例
  • 要部署新代码,首先使用新代码(例如,新AMI或新用户数据)创建新的启动配置
  • 接下来,将所需容量从1更改为2。ASG将使用新的启动配置自动启动新的EC2实例
  • 一旦新的EC2实例启动并运行并在ELB中注册,您将所需的容量从2更改回1,ASG将自动终止旧的EC2实例
  • 您可以手动执行此操作,也可以使用现有工具来执行此操作,例如:

    • 使用定义ASG并指定执行零停机滚动部署的ASG
    • 使用并使用
      create\u before\u destroy
      lifecycle属性定义ASG,以执行零停机(某种)蓝绿色部署
    • 使用并使用
      serial
      关键字定义ASG
    • 使用脚本

    您可以进一步了解。

    您要寻找的术语是“零停机部署”

    问题是,ASG似乎不支持手动调用它来启动新实例的简单操作。(它们仅在扩展策略需要时启动新实例。)您可以将现有实例附加到组,但这会导致所需的容量值增加,我不希望这样

    如果您自己更改所需容量(例如通过API调用),自动缩放组将自动为您启动一个额外实例。例如,这里有一个实现零停机dep的简单方法