十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

AWS CLI `autoscaling rollback-instance-refresh` 实例刷新回滚命令实战指南

AWS CLI `autoscaling rollback-instance-refresh` 实例刷新回滚命令实战指南 AWS CLIautoscaling rollback-instance-refresh实例刷新回滚命令实战指南【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读aws autoscaling rollback-instance-refresh是 AWS CLI 中用于**回滚正在进行的实例刷新Instance Refresh**的核心命令当 Auto Scaling 组ASG在滚动更新实例过程中出现健康问题或配置错误时它可以立即撤销刷新已做的更改将实例恢复到刷新前的状态。本文以仓库内的官方示例文档 rollback-instance-refresh.rst 为骨架结合 AWS CLI 内置的 Auto Scaling 服务模型源码完整讲解命令用法、参数约束、底层 API 映射、异常场景与限制条件让你能够在生产环境中安全、精准地执行回滚操作。命令概览什么场景需要回滚实例刷新实例刷新Instance Refresh是 Amazon EC2 Auto Scaling 提供的能力用于在修改 ASG 的启动模板、AMI 等配置后以滚动方式逐批替换组内实例而不中断服务。但在以下场景中刷新可能失败或导致业务受损新启动模板或新 AMI 中的软件存在缺陷实例无法通过健康检查新配置导致应用启动失败实例进入不健康状态运维人员希望放弃本次变更恢复到刷新开始前的旧配置。此时rollback-instance-refresh会取消正在进行中的刷新并回滚刷新已做出的所有替换Auto Scaling 会重新用刷新前的旧配置替换那些在刷新期间被替换的实例从而将 ASG 恢复到刷新开始前的状态。它是与 start-instance-refresh.rst、cancel-instance-refresh.rst 并列的实例刷新命令族成员区别在于命令行为start-instance-refresh启动一次实例刷新可设置AutoRollback等偏好cancel-instance-refresh仅取消刷新不恢复已替换的实例rollback-instance-refresh取消刷新并撤销刷新已做的实例替换完整命令示例与输出解析官方示例文档 rollback-instance-refresh.rst 给出了最小可用示例对名为my-asg的 Auto Scaling 组执行回滚。aws autoscaling rollback-instance-refresh \ --auto-scaling-group-name my-asg输出示例{ InstanceRefreshId: 08b91cf7-8fa6-48af-b6a6-d227f40f1b9b }输出解析InstanceRefreshId与本次回滚关联的实例刷新 ID。根据服务模型 service-2.json 中RollbackInstanceRefreshAnswer的字段定义这是该实例刷新在启动时被分配的唯一 ID也是后续通过describe-instance-refreshes查询回滚进度的关键标识。命令成功后Auto Scaling 会立即开始替换实例整个回滚是异步执行的需要持续观察刷新状态确认回滚完成详见下文验证回滚结果。参数详解输入输出模型与约束从服务模型源码RollbackInstanceRefreshType见 service-2.json可以看到该命令的请求结构定义如下RollbackInstanceRefreshType: { type: structure, required: [AutoScalingGroupName], members: { AutoScalingGroupName: { shape: XmlStringMaxLen255, documentation: pThe name of the Auto Scaling group./p } } }由此可以确认两个关键约束--auto-scaling-group-name是唯一且必需的参数类型为字符串最长 255 个字符值为 Auto Scaling 组的名称该命令不接受其他任何参数没有可选的偏好设置、实例数量等选项回滚策略由 Auto Scaling 组既有的实例刷新上下文决定。返回结构RollbackInstanceRefreshAnswer仅包含一个成员InstanceRefreshIdXmlStringMaxLen255即上面输出示例中的字段。底层原理从 CLI 命令到 API 调用的映射在 AWS CLI 仓库中Auto Scaling 的服务模型文件位于 awscli/botocore/data/autoscaling/2011-01-01/service-2.jsonCLI 的所有autoscaling子命令都由该模型驱动生成。其中RollbackInstanceRefresh操作的元数据如下RollbackInstanceRefresh: { name: RollbackInstanceRefresh, http: { method: POST, requestUri: / }, input: {shape: RollbackInstanceRefreshType}, output: { shape: RollbackInstanceRefreshAnswer, resultWrapper: RollbackInstanceRefreshResult }, errors: [ {shape: LimitExceededFault}, {shape: ResourceContentionFault}, {shape: ActiveInstanceRefreshNotFoundFault}, {shape: IrreversibleInstanceRefreshFault} ] }从源码结构可以推断出以下实现事实该操作通过POST /发送到 Auto Scaling 服务端点https://autoscaling.region.amazonaws.com/请求与响应均使用 XML 封装resultWrapper字段表明响应会被包装为RollbackInstanceRefreshResult元素命令执行成功后返回 200 及InstanceRefreshId与常见的组不存在类错误不同该命令专门定义了ActiveInstanceRefreshNotFoundFault找不到正在进行的实例刷新与IrreversibleInstanceRefreshFault当前刷新不可回滚两类语义明确的错误用于提示回滚失败的具体原因。回滚不支持的场景与错误处理根据服务模型RollbackInstanceRefresh的官方操作文档同见 service-2.json以下情况不支持回滚调用会失败并抛出IrreversibleInstanceRefreshFault实例刷新没有指定 desired configuration启动刷新时未提供期望配置ASG 的启动模板使用 AWS Systems ManagerSSM参数而不是 AMI ID作为ImageId属性ASG 使用的启动模板版本为$Latest或$Default回滚无法确定确切的旧版本镜像。此外命令可能返回的其余错误类型包括错误含义LimitExceededFault超出 Auto Scaling 服务配额限制如同时进行的回滚/刷新数量达到上限ResourceContentionFault服务资源争用可稍后重试ActiveInstanceRefreshNotFoundFault指定 ASG 不存在正在进行中的实例刷新因此最佳实践是在调用回滚前先用describe-instance-refreshes确认该组确实存在状态为InProgress的刷新任务并确认刷新是通过显式 desired configuration 发起的。实战配合启动与状态检查命令完成一次安全回滚步骤 1启动实例刷新可选用于演示先发起一次带期望配置的实例刷新。官方示例 start-instance-refresh.rst 展示了通过 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 } }需要注意示例中启动刷新使用了Version: $Default而根据上文提到的回滚限制使用$Default或$Latest版本的刷新是无法回滚的。若要确保后续可回滚应显式指定具体的模板版本号如Version: 2或直接使用 AMI 作为 desired configuration。AutoRollback: true是刷新自身的自动回滚开关当刷新进度无法满足MinHealthyPercentage时Auto Scaling 会自动回滚本次刷新无需人工干预。手动执行rollback-instance-refresh则用于在自动回滚未触发但你需要主动放弃变更的场景。步骤 2确认刷新正在进行执行 describe-instance-refreshes.rst 中的命令查看当前状态aws autoscaling describe-instance-refreshes \ --auto-scaling-group-name my-asg在输出中定位目标刷新确认其Status为InProgress{ 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., PercentageComplete: 0, Preferences: { MinHealthyPercentage: 100, InstanceWarmup: 300, CheckpointPercentages: [50], CheckpointDelay: 3600, SkipMatching: false, AutoRollback: true, ScaleInProtectedInstances: Ignore, StandbyInstances: Ignore } }步骤 3执行回滚并验证结果确认刷新正在进行后执行回滚命令aws autoscaling rollback-instance-refresh \ --auto-scaling-group-name my-asg返回的InstanceRefreshId与刷新 ID 一致。随后再次运行describe-instance-refreshes观察该 ID 的状态变化回滚开始后Auto Scaling 会立即用旧配置替换刷新期间被替换的实例当状态最终变为Successful、PercentageComplete达到 100 时表示 ASG 已恢复到刷新前的状态。小结rollback-instance-refresh只接受--auto-scaling-group-name一个必填参数输出唯一的InstanceRefreshId该命令的本质是调用 Auto Scaling 的RollbackInstanceRefreshAPIPOST /其请求/响应结构与错误类型均可在 service-2.json 中核实使用$Latest/$Default模板版本、SSM 参数型 AMI、或无 desired configuration 发起的刷新不可回滚回滚前务必用describe-instance-refreshes确认存在InProgress的刷新任务与cancel-instance-refresh仅取消不同回滚会撤销已做的实例替换是生产环境变更回退的最后一道保险。仓库内相关的全部命令示例与完整服务模型均可进一步查阅rollback-instance-refresh.rst、start-instance-refresh.rst、cancel-instance-refresh.rst、describe-instance-refreshes.rst 以及 awscli/botocore/data/autoscaling/2011-01-01/service-2.json。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表