实例刷新与生命周期钩子
通过实例刷新逐步推出新的启动模板,并使用生命周期钩子在实例启动或终止前运行自定义逻辑。
实例刷新与生命周期钩子 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
滚动更新实例的问题
当您更新启动模板(新的 AMI、新的用户数据、新的实例类型)时,ASG 中现有的运行中实例不会自动替换,它们会继续使用旧配置运行。要传播更改,您必须替换实例。手动终止并重新启动实例存在风险,也容易出错。Instance Refresh 通过可配置的安全控制自动完成此过程。
Instance Refresh:工作原理
Instance Refresh 会分批滚动替换 ASG 实例。在每一步中,它会终止一批旧实例,等待新实例通过运行状况检查,然后继续处理下一批。您可以通过 MinHealthyPercentage(刷新期间必须保持运行状况正常的容量最低百分比)以及可选的 InstanceWarmup 时间来控制更新速度。
aws autoscaling start-instance-refresh \
--auto-scaling-group-name 'MyAppASG' \
--preferences '{
"MinHealthyPercentage": 80,
"InstanceWarmup": 300,
"CheckpointPercentages": [20, 50, 100],
"CheckpointDelay": 600
}'MinHealthyPercentage 与批次大小
MinHealthyPercentage 定义刷新期间健康容量的下限。如果将其设置为 90%,每次只替换实例群的 10%,速度较慢但更安全。设置为 50% 时,每次会替换一半实例,速度更快但冗余更少。ASG 会根据此百分比和当前期望容量自动计算批次大小。对于生产工作负载,请选择更高的百分比以维持可用性。
用于金丝雀式发布的检查点
检查点允许您在预定义的百分比里程碑处暂停 Instance Refresh。例如,您可以先刷新 20% 的实例,暂停 10 分钟运行冒烟测试,然后继续刷新。如果在任何检查点发现问题,您可以取消刷新;ASG 会停止替换其他实例,但会让已替换的实例继续运行(它们已经使用新模板)。这实际上是适用于 EC2 的金丝雀部署模式。
取消和监控 Instance Refresh
您可以随时取消正在进行的 Instance Refresh;它会停止后续替换,但不会回滚已完成的替换。使用 describe-instance-refreshes 检查状态、进度百分比以及启动失败的实例。将 Instance Refresh 集成到 CI/CD 发布流水线中,以便在向启动模板推送新的 AMI 后自动触发刷新,从而完成全自动的蓝绿式部署。
aws autoscaling describe-instance-refreshes \
--auto-scaling-group-name 'MyAppASG'
# Cancel a running refresh
aws autoscaling cancel-instance-refresh \
--auto-scaling-group-name 'MyAppASG'生命周期挂钩简介
生命周期挂钩会在关键时刻暂停 ASG 实例状态转换,以便您在实例变为活动状态之前或实例终止之前运行自定义逻辑。挂钩有两个触发点:EC2_INSTANCE_LAUNCHING(启动后、实例进入 InService 之前)和 EC2_INSTANCE_TERMINATING(做出终止决定后、实例实际终止之前)。在挂钩期间,实例处于 Pending:Wait 或 Terminating:Wait 状态。
启动生命周期挂钩的使用场景
启动挂钩非常适合用于实例提供流量之前必须完成的任务:安装其他软件、从 Parameter Store 获取配置、向服务发现注册中心注册,或运行集成测试。在挂钩完成(或超时)之前,ASG 不会将实例添加到负载均衡器目标组。这可以防止流量到达配置不完整的实例。
aws autoscaling put-lifecycle-hook \
--auto-scaling-group-name 'MyAppASG' \
--lifecycle-hook-name 'AppInit' \
--lifecycle-transition EC2_INSTANCE_LAUNCHING \
--default-result ABANDON \
--heartbeat-timeout 300终止生命周期挂钩的使用场景
终止挂钩会在实例实际终止之前运行。使用场景包括:从应用级队列中排出正在处理的请求、将缓存数据刷新到持久化存储、从服务注册中心注销,或将日志文件复制到 S3。如果没有终止挂钩,正在终止的实例上的进行中工作可能会丢失。该挂钩最多提供2 小时(心跳超时时间)来完成优雅关闭任务。
aws autoscaling put-lifecycle-hook \
--auto-scaling-group-name 'MyAppASG' \
--lifecycle-hook-name 'GracefulShutdown' \
--lifecycle-transition EC2_INSTANCE_TERMINATING \
--default-result CONTINUE \
--heartbeat-timeout 120完成生命周期挂钩
在实例上运行(或由实例触发)的自定义逻辑必须在完成后向挂钩发送信号。使用 complete-lifecycle-action,并指定 CONTINUE(正常继续)或 ABANDON(对于启动挂钩,终止实例;对于终止挂钩,忽略并继续)。您还可以在最长持续时间内按固定间隔发送心跳,以延长挂钩的超时时间。如果挂钩超时,则会应用 DefaultResult。
# From inside the instance or a Lambda triggered by EventBridge
aws autoscaling complete-lifecycle-action \
--auto-scaling-group-name 'MyAppASG' \
--lifecycle-hook-name 'AppInit' \
--lifecycle-action-result CONTINUE \
--instance-id 'i-0abc123def456'使用 EventBridge 触发逻辑
响应生命周期挂钩最简洁的方式是使用亚马逊 EventBridge。生命周期挂钩触发时,ASG 会向 EventBridge 发出事件。EventBridge 规则会将该事件路由到一个Lambda 函数,由它执行所需工作,然后调用 complete-lifecycle-action。此架构完全采用无服务器方式,无需轮询,并且可以自动扩展。SQS 和 SNS 通知是较旧的替代方案,但对于新设计,优先推荐使用 EventBridge。
Instance Refresh 与生命周期挂钩的集成
当 Instance Refresh 替换实例时,生命周期挂钩都会触发:旧实例触发终止挂钩,新实例触发启动挂钩。这意味着在滚动更新期间,您的优雅关闭逻辑和初始化逻辑会自动运行,而不仅仅是在正常扩缩容事件期间运行。在生产发布之前,请始终在分阶段的 Instance Refresh 期间测试生命周期挂钩逻辑,以验证其行为正确。
快速检查
测试您对本课程中 AWS Solutions Architect(SAA-C03)相关概念的理解。
课程回顾
在本课程中,您学习了:Instance Refresh 按滚动批次替换 ASG 实例,并通过 MinHealthyPercentage 和可选检查点控制更新过程,以便进行金丝雀式验证;生命周期挂钩会在实例启动或终止时暂停状态转换,以运行自定义初始化逻辑或优雅关闭逻辑;EventBridge + Lambda 是响应生命周期挂钩事件而无需轮询的推荐模式。接下来,我们将学习 AWS Lambda 函数、运行时、触发器和处理程序。
常见问题解答
「实例刷新与生命周期钩子」课时是免费的吗?
是的 — 「实例刷新与生命周期钩子」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「实例刷新与生命周期钩子」这节课中我会学到什么?
通过实例刷新逐步推出新的启动模板,并使用生命周期钩子在实例启动或终止前运行自定义逻辑。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「实例刷新与生命周期钩子」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 启动模板与 ASG 配置
- 扩展策略:目标跟踪与分步扩展
- 计划扩展与预测性扩展
- 实例刷新与生命周期钩子