0Pricing
DevOps Bootcamp · 课时

管理 Terraform 状态与远程后端

理解 Terraform 状态,配置安全的远程后端,处理状态锁定,并避免协作式基础设施即代码流水线中的状态损坏

管理 Terraform 状态与远程后端 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

什么是 Terraform 状态

Terraform 会将已创建的内容记录在状态文件(terraform.tfstate)中,并将您的配置映射到实际的云资源。

没有状态信息,Terraform 就无法知道哪些资源已经存在,可能会创建重复资源或无法完成更新。

本地状态为何不适合团队协作

默认情况下,状态存储在本地磁盘上。在团队协作或 CI 环境中,这会带来问题:

  • 其他人无法查看您的状态
  • 并发运行会损坏文件
  • 文件以明文保存机密信息,可能被意外提交

解决方案是使用远程后端。

远程后端

远程后端会将状态存储在共享且持久的位置,例如 S3 存储桶、Azure Blob、GCS 或 Terraform Cloud。

这样,每次流水线运行都能以同一份当前基础设施状态作为唯一事实来源。

terraform {
  backend "s3" {
    bucket = "my-tf-state"
    key    = "prod/terraform.tfstate"
    region = "us-east-1"
  }
}

状态锁定

如果两次流水线运行同时执行 apply,就可能损坏状态。状态锁定通过一次只允许一个写入操作来避免这一问题。

使用 S3 后端时,DynamoDB 表会提供锁。Terraform Cloud 会自动执行锁定。

  backend "s3" {
    bucket         = "my-tf-state"
    key            = "prod/terraform.tfstate"
    dynamodb_table = "tf-locks"
  }

加密状态

状态文件通常包含密码和密钥等敏感值。请始终对静态状态进行加密。

对于 S3 后端,请启用存储桶加密,并在后端配置中设置 encrypt = true。

  backend "s3" {
    bucket  = "my-tf-state"
    key     = "prod/terraform.tfstate"
    encrypt = true
  }

使用工作区管理环境

Terraform 的工作区允许一份配置管理多个状态文件,每个环境对应一个状态文件。

在不同工作区之间切换,确保预发布环境和生产环境不会共享同一份状态。

terraform workspace new staging
terraform workspace select production

在 CI 中执行 Plan 和 Apply

在流水线中,运行 terraform plan 预览变更(通常在拉取请求中执行),运行 terraform apply 应用变更(合并到 main 后执行)。

请将计划保存到文件中,以便 apply 严格按照已审核的内容执行。

terraform plan -out=tfplan
terraform apply -auto-approve tfplan

检查状态

您可以查询状态,查看 Terraform 正在跟踪的内容。

  • terraform state list — 列出受管理的资源
  • terraform state show <addr> — 显示某个资源的详细信息

请避免手动编辑状态,改用命令进行操作。

terraform state list
terraform state show aws_instance.web

导入现有资源

如果某个资源是在 Terraform 之外创建的,请使用 terraform import 将其纳入管理,而不是重新创建。

在现有基础设施中采用 IaC 时,这可以避免造成破坏性的重复资源。

terraform import aws_s3_bucket.logs my-existing-bucket

处理漂移

当有人手动更改基础设施,导致实际情况不再与状态匹配时,就会发生漂移。

请定期运行 terraform plan 检测漂移,然后重新应用配置以恢复原状,或更新配置以匹配实际情况。

绝不要提交状态

即使使用远程后端,也要确保本地状态文件和计划文件被 Git 忽略。它们包含机密信息。

良好的 .gitignore 可以防止意外泄露。

# .gitignore
*.tfstate
*.tfstate.*
tfplan
.terraform/

快速检查

测试您对 Terraform 状态的理解。

回顾

您学会了安全地管理 Terraform 状态。

  • 状态将配置映射到实际资源;绝不要手动编辑状态
  • 远程后端让团队和 CI 共享状态
  • 锁定和加密可以防止状态损坏和信息泄露
  • 工作区隔离不同环境;plan 用于检测漂移

稳健的状态管理是可靠 IaC 流水线的基础。

常见问题解答

「管理 Terraform 状态与远程后端」课时是免费的吗?

是的 — 「管理 Terraform 状态与远程后端」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「管理 Terraform 状态与远程后端」这节课中我会学到什么?

理解 Terraform 状态,配置安全的远程后端,处理状态锁定,并避免协作式基础设施即代码流水线中的状态损坏 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「管理 Terraform 状态与远程后端」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Terraform 和 GitHub Actions 实现 IaC
  2. 管理云资源
  3. 自动化基础设施更新
  4. 管理 Terraform 状态与远程后端
← 返回 DevOps Bootcamp