ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AWS CLI `autoscaling describe-instance-refreshes` 实战指南:监控 Auto Scaling 组实例刷新全生命周期

AWS CLI `autoscaling describe-instance-refreshes` 实战指南:监控 Auto Scaling 组实例刷新全生命周期 AWS CLIautoscaling describe-instance-refreshes实战指南监控 Auto Scaling 组实例刷新全生命周期【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-clidescribe-instance-refreshes是 AWS CLI 中用于查询 Auto Scaling 组实例刷新Instance Refresh状态的核心只读命令。在本文中你将掌握该命令的完整参数用法、返回字段的逐项解读以及如何结合start-instance-refresh、cancel-instance-refresh、rollback-instance-refresh等配套命令构建一套可落地的实例刷新监控与运维方案。文章内容以仓库中的官方示例文档 awscli/examples/autoscaling/describe-instance-refreshes.rst 为主体并结合 Auto Scaling 服务模型定义进行源码级深化。一、命令定位实例刷新运维的仪表盘实例刷新Instance Refresh是 Amazon EC2 Auto Scaling 提供的滚动更新机制当你的 Auto Scaling 组更新了启动模板Launch Template、AMI 或实例类型后可以通过实例刷新分批替换组内实例从而在不中断服务的前提下完成配置变更。describe-instance-refreshes命令正是这套机制中的状态查询入口。根据服务模型中对该操作的定义service-2.json#L386-L402它会返回指定 Auto Scaling 组最近六周内的实例刷新信息包括每次刷新的状态与状态说明Status / StatusReason开始与结束时间StartTime / EndTime已完成百分比PercentageComplete剩余待更新实例数InstancesToUpdate如果刷新过程中触发了回滚还会返回回滚相关信息RollbackDetails。一句话概括它是你在发布变更后盯进度、查失败、看回滚的命令行仪表盘。二、基本用法与参数说明2.1 最简单的调用查看指定 Auto Scaling 组全部实例刷新请求包括状态消息和如果可用状态原因aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name my-asg这是官方示例describe-instance-refreshes.rst中的标准用法。唯一必填参数是--auto-scaling-group-name对应服务模型DescribeInstanceRefreshesType中标记为required的字段service-2.json#L2541-L2562。2.2 完整参数清单从服务模型定义可以确认该命令共支持四个参数参数是否必填说明限制与默认值--auto-scaling-group-name必填Auto Scaling 组名称最长 255 字符--instance-refresh-ids可选一个或多个实例刷新 ID仅返回这些 ID 的刷新记录列表类型省略则返回全部--next-token可选分页令牌取自上一次调用的返回结果无--max-records可选单次调用最多返回的条数默认 50最大 100例如只查询某一次特定刷新的状态aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name my-asg \ --instance-refresh-ids 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b \ --max-records 102.3 关于分页的注意事项响应结构DescribeInstanceRefreshesAnswer中包含NextToken字段当返回条目超过单次响应上限时该字段会携带令牌供你作为下一次调用的--next-token传入service-2.json#L2528-L2540。需要注意的是查看 Auto Scaling 服务的分页器配置paginators-1.json可以发现DescribeInstanceRefreshes并未注册为自动分页操作注册的仅有DescribeAutoScalingGroups、DescribeScalingActivities等。这意味着 AWS CLI 不会自动翻页拉全所有记录你需要自行用循环处理NextToken例如在 Shell 脚本中反复调用直到返回的NextToken为空。三、完整示例与输出解读3.1 官方示例输出以下命令的完整输出来自官方示例文档展示了一个 Auto Scaling 组历史上两次实例刷新的状态aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name my-asg输出{ InstanceRefreshes: [ { InstanceRefreshId: 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b, AutoScalingGroupName: my-asg, Status: InProgress, StatusReason: Waiting for instances to warm up before continuing. For example: 0e69cc3f05f825f4f is warming up., EndTime: 2023-03-23T16:42:55Z, PercentageComplete: 0, InstancesToUpdate: 0, Preferences: { MinHealthyPercentage: 100, InstanceWarmup: 300, CheckpointPercentages: [ 50 ], CheckpointDelay: 3600, SkipMatching: false, AutoRollback: true, ScaleInProtectedInstances: Ignore, StandbyInstances: Ignore } }, { InstanceRefreshId: dd7728d0-5bc4-4575-96a3-1b2c52bf8bb1, AutoScalingGroupName: my-asg, Status: Successful, EndTime: 2022-06-02T16:53:37Z, PercentageComplete: 100, InstancesToUpdate: 0, Preferences: { MinHealthyPercentage: 90, InstanceWarmup: 300, SkipMatching: true, AutoRollback: true, ScaleInProtectedInstances: Ignore, StandbyInstances: Ignore } } ] }注意两点观察技巧InstanceRefreshes列表按创建时间戳降序排列最新的一次在最前面EndTime仅对已结束成功/失败/取消/回滚完成的刷新出现进行中的刷新该字段通常为空。3.2 状态机Status 的十种取值Status字段的合法取值在服务模型中定义为一个枚举InstanceRefreshStatusservice-2.json#L3571-L3585完整列表如下状态含义Pending请求已创建但实例刷新尚未开始InProgress实例刷新正在进行中Successful实例刷新成功完成Failed刷新失败可结合StatusReason与缩放活动Scaling Activities排查Cancelling正在取消一个进行中的刷新Cancelled刷新已取消RollbackInProgress正在执行回滚RollbackFailed回滚失败可结合StatusReason排查RollbackSuccessful回滚成功完成Baking实例刷新更新完实例后正在等待指定的 bake time示例输出中的两条记录分别对应InProgress正在进行与Successful成功完成是日常监控中最常见的两种状态。当你配置了AutoRollback时还可能在失败后看到RollbackInProgress→RollbackSuccessful/RollbackFailed的流转。3.3 核心进度字段的语义PercentageComplete已完成百分比。只有当实例健康状态变为 healthy 且度过了指定 warm-up 时间后该实例才被计入完成比例。特别地回滚期间被替换的实例不计入该值因此回滚进行中该值会逐渐回落至 0service-2.json#L3495-L3498。InstancesToUpdate完成前还需更新的实例数。若回滚已触发该值表示尚未被本次刷新更新的实例数这些实例无需在回滚中被替换。ProgressDetails仅当 Auto Scaling 组配置了 warm pool 时出现会分别给出 live pool 与 warm pool 的进度明细LivePoolProgress/WarmPoolProgress各自包含PercentageComplete与InstancesToUpdateservice-2.json#L3543-L3569。Strategy本次刷新采用的策略默认Rolling分批终止并替换实例或ReplaceRootVolume仅替换根卷、不终止实例service-2.json#L3519-L3522。RollbackDetails回滚相关细节包括回滚原因RollbackReason、回滚开始时间、回滚开始时点的PercentageComplete与InstancesToUpdateservice-2.json#L5320-L5345。四、Preferences 字段深度解析返回结果中的Preferences记录了发起刷新时配置的各项偏好其结构对应服务模型中的RefreshPreferencesservice-2.json#L5195-L5244。理解这些字段能让你在查看历史刷新记录时准确还原当时的策略配置。字段含义与默认值如下字段取值范围/默认值说明MinHealthyPercentage0–100默认 90或组实例维护策略设定值操作进行期间组内必须保持健康可用实例的最小百分比MaxHealthyPercentage100–200默认 100替换实例时可同时处于健康/待定状态的最大百分比指定时必须同时指定MinHealthyPercentage且二者差值不超过 100区间越大可同时替换的实例越多InstanceWarmup秒新实例进入InService后等待多久再替换下一个实例未指定时默认取组的DefaultInstanceWarmup否则取HealthCheckGracePeriodCheckpointPercentages升序数组末位必须为 100各检查点的进度阈值用于分批验证CheckpointDelay秒默认 36001 小时到达检查点后暂停等待的时间指定它时必须同时指定CheckpointPercentagesSkipMatchingtrue/false默认 false为 true 时跳过与期望配置一致的实例不重复替换AutoRollbacktrue/false默认 false刷新失败或 CloudWatch 告警阈值被触发时是否自动回滚到原配置ScaleInProtectedInstancesRefresh/Ignore/Wait默认Wait遇到受 scale-in 保护的实例时的处理策略替换 / 忽略 / 等待 1 小时后失败StandbyInstancesTerminate/Ignore/Wait默认Wait遇到Standby状态实例时的处理策略终止 / 忽略 / 等待 1 小时后失败AlarmSpecification可选CloudWatch 告警规格告警阈值被触发时判定刷新失败BakeTime秒刷新完成后、在判定成功之前额外等待的烘烤时间对应Baking状态示例输出中两条记录的Preferences差异值得品味第一条刷新配置了MinHealthyPercentage: 100与检查点机制CheckpointPercentages: [50]、CheckpointDelay: 3600属于高可用优先的保守滚动策略第二条则使用了MinHealthyPercentage: 90与SkipMatching: true在保障可用性的同时跳过配置一致的实例以加快速度。五、与配套命令组合完整的实例刷新运维闭环describe-instance-refreshes单独使用是查询工具与以下命令组合后即可形成完整闭环相关示例均位于仓库的 awscli/examples/autoscaling 目录5.1 发起刷新start-instance-refresh发起刷新时返回InstanceRefreshId后续可用它精确查询进度示例见 start-instance-refresh.rstaws autoscaling start-instance-refresh \ --auto-scaling-group-name my-asg \ --preferences {InstanceWarmup: 60, MinHealthyPercentage: 50}输出{ InstanceRefreshId: 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b }也可以使用--cli-input-json file://config.json从 JSON 文件加载完整的期望配置与偏好包括DesiredConfiguration中的LaunchTemplate及其版本适合在 CI/CD 流水线中固化发布参数。5.2 取消刷新cancel-instance-refresh当刷新拖得过久或发现问题时取消进行中的刷新示例见 cancel-instance-refresh.rstaws autoscaling cancel-instance-refresh \ --auto-scaling-group-name my-asg取消后调用describe-instance-refreshes对应记录的状态将变为Cancelling继而Cancelled。5.3 回滚刷新rollback-instance-refresh未配置AutoRollback或需要手动回滚时可主动发起回滚该命令同样存在对应示例文档rollback-instance-refresh.rst。回滚完成后查询结果中的RollbackDetails会记录回滚原因与开始时间Status则显示RollbackSuccessful或RollbackFailed。5.4 建议的轮询脚本骨架由于describe-instance-refreshes不参与自动分页且刷新是异步长任务一个实用的监控方式是轮询直到终态#!/usr/bin/env bash ASGmy-asg while true; do STATUS$(aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name $ASG \ --instance-refresh-ids 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b \ --query InstanceRefreshes[0].Status --output text) echo Current status: $STATUS case $STATUS in Successful|Failed|Cancelled|RollbackSuccessful|RollbackFailed) break ;; esac sleep 30 done注意用--query仅抽取状态字段可显著减小输出体积便于脚本解析。六、易踩的坑与排查思路未注册自动分页如前文所述DescribeInstanceRefreshes不在 paginators-1.json 的自动分页列表中数据量大时必须手动循环NextToken不要假设--max-items能自动翻页。EndTime为空不代表异常进行中的刷新Pending/InProgress/Cancelling/RollbackInProgress/Baking通常没有EndTime只有终态记录才会携带。Failed状态的排查路径服务模型明确指出刷新失败时先看StatusReason再结合缩放活动describe-scaling-activities定位是实例启动失败、健康检查未通过还是 warm-up 超时。Wait策略的隐性超时ScaleInProtectedInstances与StandbyInstances默认值均为Wait即等待 1 小时超时后刷新会失败。如果组内存在长期处于 scale-in 保护或 Standby 的实例建议在发起刷新时显式设置为Refresh/Ignore或Terminate避免刷新无谓挂起一小时。AutoRollback的适用限制未指定DesiredConfiguration、启动模板使用 SSM 参数而非 AMI ID、或启动模板使用$Latest/$Default版本时不支持自动回滚service-2.json#L5218-L5220配置前需确认组是否符合条件。七、小结aws autoscaling describe-instance-refreshes是实例刷新生命周期中不可或缺的状态查询命令必填参数--auto-scaling-group-name定位目标组--instance-refresh-ids精确定位单次刷新--max-records与--next-token控制分页返回的Status十态、PercentageComplete、InstancesToUpdate、Preferences与RollbackDetails共同构成完整的进度与策略画像。结合仓库中的服务模型service-2.json、官方示例describe-instance-refreshes.rst以及配套的 start/cancel/rollback 示例你可以在发布流程中快速落地发起 → 轮询 → 诊断 → 取消/回滚的自动化运维能力。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表