
Terraform 的 create_before_destroy:从“停机困境”到“零下线部署”在生产环境中,基础设施变更往往伴随着一个令人头疼的问题——停机。当你想要更新一个 Auto Scaling Group(ASG)的实例配置时,Terraform 默认的行为是“先销毁,再创建”,这意味着你的服务会出现一段明确的空白期。Terraform 的 create_before_destroy 生命周期规则正是为解决这一问题而生。本文将结合 AWS ASG 的实际案例,深入剖析这一强大特性。默认行为:为什么会产生停机?默认情况下,当 Terraform 必须替换一个资源时,会采用“先销毁后创建”(destroy-then-create)的顺序:原有的资源被销毁,然后再创建一个新的替代资源。对于 ASG 场景,这意味着:1. 销毁旧的 Auto Scaling Group → 所有 EC2 实例被终止 → 服务完全不可用2. 创建新的 Auto Scaling Group → 新实例启动 → 服务恢复在第 1 步和第 2 步之间,存在一个服务空白窗口。这个窗口有时只有几秒钟,有时可能长达数分钟——但在生产环境中,任何服务中断都可能是灾难性的。解决方案:启用 create_before_destroylifecycle 块中的 create_before_destroy 元参数彻底逆转了这一顺序。将其设置为 true 后,Terraform 会先创建替代资源,再销毁原有资源。对于 ASG 场景,新的流程变为:1. 创建新的 Auto Scaling Group(包括所有新实例