本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在实例刷新期间更换根卷
工作原理
根卷替换通过在保持实例运行的同时仅替换根 EBS 卷来更新您的实例。这样就无需启动新实例,也避免了潜在的容量限制。此过程会保留所有其他实例资源,包括:
-
网络接口和 IP 地址
-
非根 EBS 卷
-
实例存储卷和数据
-
安全组和 IAM 角色
在更换根卷期间,您的应用程序将继续在现有实例上运行。将分离原始根卷,从您指定的 AMI 创建新的根卷,然后连接到同一个实例。成功替换后,原始根卷将自动删除。
当您使用替换根卷策略时,实例会经历以下生命周期状态:
-
ReplacingRootVolume-开始更换根卷 -
ReplacingRootVolume:Wait-等待生命周期挂钩完成(如果已配置) -
ReplacingRootVolume:Proceed-继续进行更换 -
RootVolumeReplaced-成功完成更换
根卷替换完成后,Auto Scaling 会对更新的实例进行运行状况检查。如果某个实例的根卷更换失败,Auto Scaling 会将该实例标记为终止,并将其替换为新实例。
要求
-
您的 Auto Scaling 组必须使用混合实例策略
-
混合实例策略中的所有替代项都必须指定
ImageId -
AMIs 必须只包含一个根卷
-
所有实例都必须与该组的启动模板配置相匹配
-
您必须使用包含
ImageId覆盖的混合实例策略的所需配置开始实例刷新。
使用 “替换根卷” 开始实例刷新
使用 “替换根卷” (AWS 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"
}
限制
-
如果 A EC2 uto Scaling 组或所需的实例刷新配置使用
$Latest或$Default启动模板版本,则无法使用替换根卷启动实例刷新。 -
如果 Amazon A EC2 uto Scaling 组包含的实例类型不在混合实例策略中,则无法使用替换根卷启动实例刷新。
-
在使用 Replace Root Volume 刷新实例期间,您只能连接所需配置的混合实例策略中存在的类型的实例。
-
在具有温池的 A EC2 uto Scaling 组上,您无法使用替换根卷来启动实例刷新。
-
您无法使用替换根卷向具有活动实例刷新的 Amazon A EC2 uto Scaling 组添加温池。