AWS Autoscaling更新

时间:2017-11-13 05:26:16

标签: amazon-web-services autoscaling

您可以创建新的启动配置(更新AMI或其他),并将其与现有的Autoscaling Group相关联。 Per AWS Docs:更改Auto Scaling组的启动配置后,将使用新配置选项启动任何新实例,但现有实例不受影响。

你怎么强迫这个?意味着现在重新启动所有新实例(使用新的AMI)。我是否必须删除现有的Autoscaling组并创建一个新的Autoscaling组(使用新的Config)?或者我简单地删除现有实例(手动逐个删除)然后用新AMI重新启动ASG。任何最佳做法/陷阱? CloudFormation具有RollingUpdate标志(不确定CF之外的那个)

由于

2 个答案:

答案 0 :(得分:1)

AWS有一些OOTB解决方案,CloudFormation(就像你说的那样),Elastic Beanstalk(建立在CF之上)和CodeDeploy blue-green deployments(我没试过这个)。

就我们的SQS轮询ASG而言,我们进行“冷部署”,即在没有要处理的消息时进行“部署”(因此,由于扩展策略,没有实例)。这真的很有效。

如果您在消息处理期间在实例上设置了保护范围(并在轮询之前暂时等待),则可以在有消息的情况下安全地进行部署:

  1. 将所需容量设置为0
  2. 等一下(因为没有实例运行)
  3. 将所需容量设置回N.
  4. 注意:您可以在控制台中完成所有操作。

    您可以自己编写一个解决方案来编写解决方案...但我可能不会。

    小心:

      

    简单删除现有实例(手动逐个删除)

    您是否可以执行此操作,或者取决于实例是否仍处理请求/处理(通常您不能简单地终止实例而不丢弃服务)。

    我推荐Elastic Beanstalk,它免费提供滚动更新功能,非常容易上手。我没有尝试过CodeDeploy蓝绿色,但它看起来很有趣。如果您想要更高级的行为(或者已经在使用它),请查看Cloud Formation ... 不要为滚动部署编写自己的解决方案:只需使用CloudFormation。

答案 1 :(得分:1)

如果您的问题是“在飞行中”请求,只需启用连接耗尽或增加ELB或ASG附带的“目标组”的注销延迟。您可以将值设置为一小时。

  

启用连接耗尽时,可以指定负载均衡器在将实例报告为取消注册之前保持连接处于活动状态的最长时间。最大超时值可以设置为1到3,600秒(默认值为300秒)。达到最大时间限制时,负载均衡器会强制关闭与取消注册实例的连接。

然后你可以分离旧的实例。

  

如果从具有附加负载均衡器的Auto Scaling组中分离实例,则会从负载均衡器中取消注册该实例。如果从具有附加目标组的Auto Scaling组分离实例,则会从目标组取消注册该实例。如果为负载均衡器启用了连接耗尽,则 Auto Scaling会等待正在进行的请求完成。

如果您不想进行任何手动扩展,我猜最好的方法是将终止策略更改为OldestInstance并保持ASG不变。当扩展活动发生时,ASG将自动终止旧实例。(在您的情况下是旧的启动配置实例)

  

<强> OldestInstance 即可。 Auto Scaling终止组中最旧的实例。将Auto Scaling组中的实例升级为新的EC2实例类型时,此选项很有用。您可以使用新类型的实例逐步替换旧类型的实例。