如何自动在AWS Auto Scaling组中循环新映像?


21

我有一个带有负载均衡器和自动缩放组的Web应用程序设置,用于管理缩放。源代码位于git存储库中,因此在代码更改时我不必更新映像,但是有时环境会更改,因此我们创建了一个新映像。然后,该图像需要循环到自动缩放组中。

有没有一种方法可以自动循环图像?现在,我安排了摆脱旧实例的放大和缩小操作。


2
如果在创建新的启动配置并更新自动伸缩组之后,将每个实例标记为不正常(例如使用as-set-instance-health),以便自动伸缩仅将其替换为新实例,则可能会更有效。
cyberx86 '04 -4-30

Answers:


10

我想建议“ AWS-HA-Release”执行此操作-AWS-HA-Release的工作方式:

  1. 如果当前的自动伸缩组和ELB报告5个运行状况良好的实例,
  2. AWS-HA-Release将新实例投入生产,并等待ELB将其确定为运行正常(将运行正常的实例总数增加到6)
  3. 删除一个旧实例(总共最多5个)
  4. 使另一个实例投入使用(总共6个)
  5. 删除一个旧实例(总共最多5个)
  6. 依此类推,直到所有实例都被替换为止

在这种情况下,您可以在不停机的情况下交付新代码或新AMI版本,并受益于全新实例。AWS-HA-Release工具可从https://github.com/colinbjohnson/aws-missing-tools获得


9

比较简单的方法是将Auto-Scaling Group(ASG)中的最小实例数增加到当前数量的两倍,等待所有实例都启动后再将最小实例数更改为原来的最小数量。ELB将杀死较旧的实例,并将新的实例留给代码。为此,应将“终止策略”设置为“ OldestInstance ”以按预期工作。默认终止策略可能会产生有害的副作用。

您可以在此处查看AWS CLI参数和示例:http : //docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html


干杯,这是一种超级方便,无忧的方法。
伊拉德纳瓦(Elad Nava)

1
根据AWS文档,即使选择自定义终止策略,这也不总是可行,ASG会在应用终止策略之前保持AZ的平衡。因此,将大小加倍和减半可能会留下几个旧实例。当使用具有多个实例类型和购买选项的ASG时,这尤其可能发生,因为在应用“ OldestInstance”策略之前,ASG将保持可用区的平衡并且市场选项(即期与按需)平衡:docs.aws.amazon.com /
autoscaling

6

我管理此方案的方式是在云形成中使用AWS :: AutoScaling :: AutoScalingGroup对象的UpdatePolicy功能。当云形成堆栈更新时,它将管理实例的循环。

一些参考。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy .html


感谢一吨@graeme。我不知道Cloudformation提供了此功能。
AJB

正是我想要的。当通过AWS控制台进行的更改被锁定时,我们将通过Jenkins部署堆栈。
Greg Biles

3

还可以看看现在开放源代码的Netflix Asgard工具。它不仅可以设置Auto Scaling组,还可以为一组实例执行新AMI映像的滚动发布。


您的意思是“ Netflix Asgard”

4
Netflix Asgard现在已弃用,取而代之的是Netflix Spinnaker
dlaidlaw

0

老实说,实际上并没有一个很好的方法。我发现最好的方法是在ASG名称中放置一个版本。每当我更新AMI时,我都会使用新版本创建一个新的ASG + Launch Config,以免与其他组冲突。然后,我终止旧组中的所有实例。

如果需要更多的容错部署,我建议通过创建新的负载均衡器来增加另一步骤。这使您可以将两个ASG彼此隔离。它还允许您在更新之前有一个“暂存”区域来测试您的更改。然后,当您准备进行切换时,将更新DNS记录并终止旧组中的所有实例。


0

正如我在此处发布的(类似的问题,仅与Terraform一样),它没有以任何方式内置到ASG中,除非您使用cloudformation。我也为此苦苦挣扎,因此最终编写了一个“ roller”来监视多个ASG,检查其状态并进行更新。始终乐于接受反馈。http://github.com/deitch/aws-asg-roller

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.