根据应用的版本变更,Launch template随时可能发生变化,例如更换新的AMI、更新userdata等。如果ASG已经根据Launch Template创建了一堆机器,此时需要将这些机器更新,全部替换成新版本的Launch Template
ASG有instance refresh功能,当创建好新版本的launch template后,启动一个instance refresh,这样会立即更新ASG。在更新ASG时,会采取滚动更新的方式——先将一批机器终止,再启动新版本的机器,当这些新版本的机器通过健康检查后再进入下一轮的更新
在启动instance refresh时,有些概念要提前了解:
instance refresh时,ASG维护最少健康实例的百分比。例如将它设置成100%,则一次只有一个EC2进行替换;如果将它设置成0%,则所有的EC2同时被替换InService后,设置warmup时间后,它需要经过这段warmup时间才能接收流量。适用于应用需要初始化(加载数据库、从互联网拉数据等)的场景Launch Template。在进行instance refresh过程中,如果线上流量突增、发生了扩容事件,此时会使用Desired configuration来启动新扩容的机器;在instance refresh过程完成后,ASG的Launch template也被更新成Desired configurationinstance refresh是滚动更新的,当它达到特定的百分比后,可以配置checkpoint,让ASG临时停止滚动更新过程,发送一条通知给管理员。管理员收到通知后,检查新版本的配置是不是正常,如果发现有问题,管理员可以选择回退到上一个版本接下来我们将动手实践下Instance refresh
本章开始我们创建Launch template,并基于它创建了ASG。访问服务的页面输出以下内容:

本节我们将更新这个Launch template,创建v2版本,让后端输出Hello World v2。然后使用instance refresh的特性,将ASG的机器全部替换为v2版本。
进入Launch template页面,点击Modify template:

输入新版本的描述,选择基于v1来创建新的版本:

下拉到最后,更新userdata,让后端输出Hello World v2,最后点击Create template version:

新版本的Launch template创建完成后,可以将它设置成默认版本,也可以不做操作(不影响下一步):

在ASG的页面,点击Start instance refresh:

设置Minimum healthy percentage、Instance warmup、Checkpoints属性(Checkpoint这里仅用于展示如何设置,并不会启动它):

在Desired configuration部分,使用新版本的Launch template:

最后点击创建。
在创建完Instance refresh后,随时可以取消它。一开始进入Pending状态:

然后启动新的实例:

实例启动完成后,等待实例warmup:

warmup完成后,等待ELB的health check通过:


当health check通过后,进入下一轮的滚动更新:

最后等所有实例更新完成后,访问ELB能够刷新到v2版本的效果:
