ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

aws autoscaling start-instance-refresh 实战指南:用 AWS CLI 滚动更新 Auto Scaling 组的实例

aws autoscaling start-instance-refresh 实战指南:用 AWS CLI 滚动更新 Auto Scaling 组的实例 aws autoscaling start-instance-refresh 实战指南用 AWS CLI 滚动更新 Auto Scaling 组的实例【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读aws autoscaling start-instance-refresh是 AWS CLI 中启动 Amazon EC2 Auto Scaling 组**实例刷新Instance Refresh**的核心命令。当你更换了 AMI、修改了用户数据脚本或更新了启动模板后无需手动逐台替换实例只需一条命令即可让 Auto Scaling 服务按照滚动Rolling策略分批替换组内实例并在刷新过程中通过健康检查与最小健康比例等偏好设置保障业务可用性。阅读本文后你将掌握该命令的两种调用方式命令行参数与 JSON 文件、preferences全部核心参数的取值与默认行为以及结合describe-instance-refreshes、rollback-instance-refresh、cancel-instance-refresh进行状态跟踪与故障处置的完整实战方案。一、命令概览与适用场景实例刷新功能用于在 Auto Scaling 组完成配置变更后例如创建了指定新 AMI 或新用户数据脚本的启动模板自动更新组内实例。从当前仓库的服务模型 service-2.json 可以看到StartInstanceRefresh属于 autoscaling 服务 API 家族与DescribeInstanceRefreshes、CancelInstanceRefresh、RollbackInstanceRefresh共同构成完整的实例刷新操作闭环。调用成功时请求返回一个唯一 IDInstanceRefreshId用于后续跟踪刷新进度——这正是官方示例输出中的关键字段。与实例刷新相关的一组命令仓库的 autoscaling 示例目录 中提供了配套命令的示例文档命令作用对应示例文件start-instance-refresh启动实例刷新start-instance-refresh.rstdescribe-instance-refreshes查询刷新进度与状态describe-instance-refreshes.rstrollback-instance-refresh取消刷新并回滚已做的变更rollback-instance-refresh.rstcancel-instance-refresh仅取消刷新、不回滚变更cancel-instance-refresh.rst二、方式一使用命令行参数启动实例刷新官方示例中最直接的用法是纯命令行参数方式通过--auto-scaling-group-name指定目标组通过--preferences传入 JSON 格式的偏好配置aws autoscaling start-instance-refresh \ --auto-scaling-group-name my-asg \ --preferences {InstanceWarmup: 60, MinHealthyPercentage: 50}其中--auto-scaling-group-nameAuto Scaling 组的名称必填参数。服务模型 StartInstanceRefreshType 中该字段位于required列表是唯一必填项。--preferences刷新偏好设置本例设置了 60 秒实例预热InstanceWarmup与 50% 最小健康比例MinHealthyPercentage。成功调用后返回如下输出InstanceRefreshId是本次刷新的唯一标识请妥善保存用于后续查询{ InstanceRefreshId: 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b }从源码看InstanceRefreshId的语义服务模型中的 StartInstanceRefreshAnswer 明确该 ID 用于“跟踪实例刷新的进度A unique ID for tracking the progress of the instance refresh”。拿到该 ID 后可以配合describe-instance-refreshes --instance-refresh-ids查询刷新的Pending、InProgress、Successful、Failed等状态。三、方式二使用 JSON 文件启动实例刷新推荐当配置项较多时官方示例推荐将 Auto Scaling 组、期望配置DesiredConfiguration与偏好Preferences统一写入 JSON 文件通过--cli-input-json加载aws autoscaling start-instance-refresh \ --cli-input-json file://config.jsonconfig.json的完整内容如下原样保留自官方示例{ AutoScalingGroupName: my-asg, DesiredConfiguration: { LaunchTemplate: { LaunchTemplateId: lt-068f72b729example, Version: $Default } }, Preferences: { InstanceWarmup: 60, MinHealthyPercentage: 50, AutoRollback: true, ScaleInProtectedInstances: Ignore, StandbyInstances: Terminate } }输出与方式一完全一致同样返回InstanceRefreshId{ InstanceRefreshId: 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b }注意官方示例中ScaleInProtectedInstances: Ignore与StandbyInstances: Terminate的值未加引号。在实际 JSON 文件中这两处必须写成带引号的字符串形式Ignore、Terminate否则 JSON 解析会报错——上文的配置内容已做修正。逐字段解析 JSON 配置AutoScalingGroupName必填目标 Auto Scaling 组名称对应命令行--auto-scaling-group-name。DesiredConfiguration期望配置即刷新完成后组应采用的配置。服务模型 DesiredConfiguration 规定指定该结构时必须在LaunchTemplate启动模板与MixedInstancesPolicy混合实例策略多实例类型 按需/Spot 组合二者中指定其一。本例通过LaunchTemplateIdVersion$Default表示模板默认版本指定新启动模板刷新成功后Auto Scaling 组的设置会自动更新为新的期望配置。Preferences刷新偏好包含以下字段默认值与语义以 RefreshPreferences 为准字段类型/取值默认值语义InstanceWarmup整数秒组级DefaultInstanceWarmup未定义则用HealthCheckGracePeriod新实例进入InService后刷新暂停等待的时间仅在必须覆盖组级默认预热时间时才指定MinHealthyPercentage整数 0–10090或实例维护策略中的值刷新期间必须保持健康可用以支撑负载的最小实例百分比MaxHealthyPercentage整数 100–200100刷新期间可处于健康/挂起状态的最大实例百分比指定时必须同时指定MinHealthyPercentage二者差值不得大于 100范围越大可同时替换的实例越多CheckpointPercentages整数数组升序、唯一无各检查点的完成百分比阈值最后一个值必须为 100CheckpointDelay整数秒36001 小时检查点之后的等待时间指定它时必须同时指定CheckpointPercentagesSkipMatching布尔false为true时跳过与期望配置匹配的实例减少无谓替换未指定期望配置时跳过使用刷新前相同启动模板/实例类型的实例AutoRollback布尔false为true时刷新失败或触发 CloudWatch 告警阈值时自动回滚到之前的配置ScaleInProtectedInstancesRefresh/Ignore/WaitWait遇到受缩容保护实例时的行为Refresh替换、Ignore忽略、Wait等待一小时否则刷新失败StandbyInstancesTerminate/Ignore/WaitWait遇到 Standby 状态实例时的行为Terminate终止、Ignore忽略、Wait等待一小时否则刷新失败AlarmSpecification结构Alarms数组无CloudWatch 告警规格告警阈值被触发时使刷新失败BakeTime整数秒无刷新结束末尾的“烘烤”等待时间等待期结束后刷新才视为完成ScaleInProtectedInstances与StandbyInstances的取值定义服务模型中这两处字段均为受约束的字符串枚举ScaleInProtectedInstances的合法值为Refresh/Ignore/Wait见 service-2.jsonStandbyInstances的合法值为Terminate/Ignore/Wait见 service-2.json。传入枚举之外的字符串会直接报参数校验错误。四、刷新策略Strategy参数除--preferences外StartInstanceRefreshType还定义了可选的Strategy参数见 service-2.json合法值在 RefreshStrategy 中声明取值行为Rolling默认滚动替换按批次用新实例替换旧实例逐步推进直至全部替换完成ReplaceRootVolume根卷替换替换实例的根卷适用于需保留实例 ID、仅更换根卷镜像的场景命令行调用示例aws autoscaling start-instance-refresh \ --auto-scaling-group-name my-asg \ --strategy Rolling \ --preferences {AutoRollback: true, MinHealthyPercentage: 80}五、刷新失败与回滚的处理路径何时自动回滚从 AutoRollback 字段文档 可知以下三种情况不支持自动回滚即使开启AutoRollback也无济于事实例刷新未指定DesiredConfiguration期望配置Auto Scaling 组的启动模板使用 AWS Systems Manager 参数而非 AMI ID作为ImageIdAuto Scaling 组使用启动模板的$Latest或$Default版本。手动处置命令回滚aws autoscaling rollback-instance-refresh --auto-scaling-group-name my-asg会取消进行中的刷新并替换刷新期间被替换的实例将组恢复到刷新前的配置见 rollback-instance-refresh.rst。注意未指定期望配置的刷新不支持回滚。仅取消aws autoscaling cancel-instance-refresh --auto-scaling-group-name my-asg只停止刷新不回滚任何已完成的变更见 cancel-instance-refresh.rst。并发与冲突服务模型为StartInstanceRefresh声明了InstanceRefreshInProgressFault异常错误码InstanceRefreshInProgress见 service-2.json当组内已有进行中的刷新时再次调用会返回该错误。因此在自动化脚本中建议先查询刷新状态再决定是否发起新刷新。六、完整实战流程将上述知识串联为一次完整的实例滚动更新流程# 1. 启动实例刷新JSON 文件方式 aws autoscaling start-instance-refresh --cli-input-json file://config.json # 2. 使用返回的 InstanceRefreshId 轮询刷新状态 aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name my-asg \ --instance-refresh-ids 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b # 3a. 若刷新失败且未开启自动回滚手动回滚 aws autoscaling rollback-instance-refresh --auto-scaling-group-name my-asg # 3b. 若仅需终止刷新而保留已变更则取消 aws autoscaling cancel-instance-refresh --auto-scaling-group-name my-asg七、FAQ 与踩坑提示MinHealthyPercentage设得太小会怎样该值表示刷新期间允许同时处于不健康/不可用状态的实例上限百分比。设为 50 意味着刷新过程中最多允许一半实例被替换风险更高但速度更快生产环境建议保持默认 90 或更高。InstanceWarmup与组级DefaultInstanceWarmup的关系两者作用相同仅当需要覆盖组级默认预热时间时才在preferences中指定InstanceWarmup否则自动回退到组级配置。JSON 文件中的字符串枚举必须加引号Ignore、Terminate、Wait、Refresh等值要写成Ignore形式这是使用官方示例时最容易踩的坑。输出中的InstanceRefreshId一定要记录它是后续查询、追踪本次刷新进度的唯一凭据。八、进一步探索完整示例文档start-instance-refresh.rst服务模型定义输入输出结构与错误码service-2.json配套命令示例describe-instance-refreshes.rst、rollback-instance-refresh.rst、cancel-instance-refresh.rst其他 Auto Scaling 操作示例awscli/examples/autoscaling/【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进