本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在实例刷新期间更换根卷
工作原理
根卷替换通过在保持实例运行的同时仅替换根 EBS 卷来更新您的实例。这样就无需启动新实例,也避免了潜在的容量限制。此过程会保留所有其他实例资源,包括:
-
网络接口和 IP 地址
-
非根 EBS 卷
-
实例存储卷和数据
-
安全组和 IAM 角色
在更换根卷期间,您的应用程序将继续在现有实例上运行。将分离原始根卷,从您指定的 AMI 创建新的根卷,然后连接到同一个实例。成功替换后,原始根卷将自动删除。
当您使用替换根卷策略时,实例会经历以下生命周期状态:
-
ReplacingRootVolume-开始更换根卷 -
ReplacingRootVolume:Wait-等待生命周期挂钩完成(如果已配置) -
ReplacingRootVolume:Proceed-继续进行更换 -
RootVolumeReplaced-成功完成更换
根卷替换完成后,Auto Scaling 会对更新的实例进行运行状况检查。如果某个实例的根卷更换失败,Auto Scaling 会将该实例标记为终止,并将其替换为新实例。
要求
-
您的 Auto Scaling 组必须使用混合实例策略
-
混合实例策略中的所有替代项都必须指定
ImageId -
AMIs 必须只包含一个根卷
-
所有实例都必须与该组的启动模板配置相匹配
-
您必须使用包含
ImageId替代项的混合实例策略的所需配置开始实例刷新。
使用 “替换根卷” 开始实例刷新
使用 “替换根卷” (Amazon CLI) 开始刷新实例
使用以下start-instance-refresh
aws autoscaling start-instance-refresh --cli-input-json file://config.json
config.json 的内容:
例
{ "AutoScalingGroupName":"my-asg", "Strategy" :"ReplaceRootVolume", "DesiredConfiguration":{ "MixedInstancesPolicy":{ "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateId":"my-launch-template", "Version":"1"}, "Overrides": [ { "InstanceType":"c5.large", "ImageId":"ami-1234example"}, { "InstanceType":"m5.large", "ImageId":"ami-2345example"} ] } } }, "Preferences": { "InstanceWarmup":60, "MinHealthyPercentage":90, "AutoRollback":true, "ScaleInProtectedInstances":Ignore, "StandbyInstances":Ignore} }
如果不提供首选项,则会使用默认值。有关更多信息,请参阅 了解实例刷新的默认值。
输出示例:
{
"InstanceRefreshId": "08b91cf7-8fa6-48af-b6a6-d227f40f1b9b"
}
限制
-
如果 EC2 Auto Scaling 组或所需的实例刷新配置使用
$Latest或$Default启动模板版本,则无法使用替换根卷启动实例刷新。 -
如果 Amazon EC2 Auto Scaling 组包含的实例类型不在混合实例策略中,则无法使用替换根卷启动实例刷新。
-
在使用 Replace Root Volume 刷新实例期间,您只能连接所需配置的混合实例策略中存在的类型的实例。
-
在具有温池的 EC2 Auto Scaling 组上,您无法使用替换根卷来启动实例刷新。
-
您无法使用替换根卷向具有活动实例刷新的 Amazon EC2 Auto Scaling 组添加温池。
使用生命周期挂钩替换根卷
正在更换根卷的实例会遵循自己的生命周期过渡,允许您在替换 and/or 后调用操作(例如 Lambda 函数)。有关根卷更换期间生命周期状态的更多信息,请参阅正在更换根卷的实例的生命周期状态转换。
有关添加生命周期钩子的更多信息,请参阅 向自动扩缩组添加生命周期挂钩。有关完成生命周期操作的更多信息,请参阅 在自动扩缩组中完成生命周期操作。
在替换根卷之前,生命周期挂钩可能在以下情况下很有用:
-
在更换根卷和重启实例之前,您希望优雅地关闭应用程序。
-
您想在更换卷之前将数据从根卷移动到其他位置。
更换根卷后,生命周期挂钩在以下情况下可能很有用:
-
在开始接收流量之前,您需要验证您的实例是否已完全准备好使用新 AMI。
-
你想引导以前存在于根卷上的应用程序数据。
添加生命周期钩子时,请考虑以下事项:
-
为生命周期操作配置
autoscaling:EC2_INSTANCE_TERMINATING生命周期挂钩后,即将进行根卷更换的实例在进入ReplacingRootVolume:Wait状态时会暂停以执行自定义操作。 -
为生命周期操作配置
autoscaling:EC2_INSTANCE_LAUNCHING生命周期挂钩时,刚刚替换了根卷的实例在进入Pending:Wait状态时会暂停执行自定义操作。
当实例达到等待状态时,Amazon EC2 Auto Scaling 将发送通知。Auto Scaling 生命周期挂钩通知包含一个Action字段,其值ReplaceRootVolume表示实例正在更换根卷。
本指南的 EventBridge 部分提供了这些通知的示例。有关更多信息,请参阅 实例刷新替换根卷生命周期事件。