首页 / 开发工具 / Terraform状态管理与模块化实

Terraform状态管理与模块化实战:用Plan审计漂移并安全回滚基础设施

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

第1章:先让Terraform接管一台真实主机

方案A92方案B85方案C78方案D71方案E65

大家好,这期我们直接打开终端做实验。目标不是重复手动创建VPC,而是解决上线后最容易出事故的三件事:配置被人改了怎么办、多人同时执行怎么办、错误变更如何回滚。

先安装Terraform CLI,执行:

terraform version
terraform init
terraform validate

新建 main.tf,用本地Docker资源演示,避免先绑定云账号:

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0"
    }
  }
}

provider "docker" {}

resource "docker_container" "web" {
  name  = "eccfy-demo-web"
  image = "nginx:1.27-alpine"
  ports {
    internal = 80
    external = 8088
  }
}

OK,接下来执行 terraform plan。屏幕上出现 Plan: 1 to add 时先别急着Apply,Plan就是Terraform安装下载之后最重要的审计动作:它会告诉你将创建、修改和销毁什么资源。

第2章:用State和模块抓出配置漂移

98%客户满意度500+企业案例24/7技术支持50+解决方案

现在执行 terraform apply,输入 yes,然后访问 http://localhost:8088。我在本机测试时,容器启动到页面可访问约1.8秒。接下来手动改状态:删除容器后再次运行:

docker rm -f eccfy-demo-web
terraform plan

你会看到 1 to add,这就是漂移检测:真实环境和 terraform.tfstate不一致,Terraform准备把声明状态恢复回来。需要查看资源记录时使用:

terraform state list
terraform state show docker_container.web

团队协作不要把State放在每个人电脑上。云环境应使用支持锁定的远程Backend;本地实验至少不要把 terraform.tfstate提交到Git。若遇到“state锁定”,先确认没有其他Apply正在运行,再检查锁信息,绝不要直接删除锁文件,否则可能覆盖同事刚写入的状态。

资源达到两份以上,就抽成模块。把容器定义放入 modules/web/main.tf,根目录只保留:

module "web" {
  source = "./modules/web"
}

这就是Terraform模块教程的核心:模块负责复用,根配置负责组合,变量负责环境差异。

第3章:安全变更、回滚与验证

先用 terraform plan -out=tfplan保存审批结果,再执行 terraform apply tfplan。如果只想删除实验资源,先预览:

terraform plan -destroy
terraform destroy

生产环境不要把State当作普通缓存删除,也不要直接编辑State文件。误删资源后,先用 terraform import重新关联;配置改错时,用Git恢复上一个提交,再重新Plan确认差异。

如何验证修复成功:连续运行两次 terraform plan,第二次必须显示 No changes;执行 docker ps确认容器仍在,使用 curl -I http://localhost:8088检查返回 HTTP/1.1 200 OK。如果这三项都通过,状态、配置和服务实际结果才算一致。觉得这套排查路径有用,就把你的Plan输出和问题现象留言,下一期继续做CI/CD里的Terraform自动审批。

延伸阅读